zoukankan      html  css  js  c++  java
  • Go语言package

    Go语言是使用包来组织源代码的,并实现命名空间的管理。任何源代码文件必须属于某个包。源码文件的第一行有效代码必须是 package pacakgeName 语句,通过该语句声明自己所在的包。

    一、包引用

    包通过import xxx进行导入。

    标准包的源码位于 $GOROOT/src/ 下面,标准包可以直接引用。自定义的包和第三方包的源码必须放到 $GOPATH/src 目录下才能被引用。

    包的引用可以通过以下方式:

    001、 标准引用方式如下

    import "fmt"

    此时可以用“fmt.”作为前缀引用包内可导出元素,这是常用的一种方式。如:

    fmt.Println("。。。。。。。。。")
    

    002、 别名引用方式如下

    import F "fmt"

    此时相当于给包 fmt 起了个别名 F,用“F.”代替标准的“fmt.”作为前缀引用 fmt 包内可导出元素。如:

    import F "fmt"
    
    func Pwd(){
    	F.Println("...。。。")
    }
    

    003、 省略方式如下

    import . "fmt"

    此时相当于把包 fmt 的命名空间直接合并到当前程序的命名空间中,使用 fmt 包内可导出元素可以不用前缀“fmt.”,直接引用。示例如下:

    import  ."fmt"
    
    func Pwd(){
    	Println("...。。。")
    }
    
    

    二、init()函数

    001、init()

    init()函数是Go的内置函数,会在go文件被其他文件引用前执行。

    如下:

    package controller
    
    import  ."fmt"
    
    func Pwd(){
    	Println("。。。")
    }
    
    func init()  {
    	Println("init函数先执行。。。。")
    }
    

    在主函数中调用:

    package main
    
    import "controller"
    
    func main()  {
    
    	controller.Pwd()
    }
    
    

    结果是:

    init函数先执行。。。。
    。。。
    

    002、仅执行包的初始化函数

    如果只想使用文件的init函数,不使用其他,可以通过import _ "xxx"的格式引用。如下:

    package main
    
    import (
    	_ "controller"
    )
    
    func main()  {
    	
    }
    
    init函数先执行。。。。
    

    003、init()执行顺序

    如果导入了多个具有init()函数的文件,那么按照排列顺序进行执行。

    假如以下三个包都有init()函数,那么执行顺序就是import中的排列执行。

    import (
    	_ "controller"
    	"fmt"
    	"time"
    )
    
    func main()  {
    	time.Sleep(1000)
    	fmt.Println()
    }
    

    004、嵌套init()

    如果多个包或者文件之间互相嵌套,init()函数会深度向下,从最里面的仅被引用的包开始执行init()函数。

    三、常用内置包

    1) fmt

    包 fmt 实现了格式化的 I/O 函数,这与 C 的 printf 和 scanf 类似。格式化短语派生于 C 。一些短语(%-序列)这样使用:

    2) io

    这个包提供了原始的 I/O 操作界面。它主要的任务是对 os 包这样的原始的 I/O 进行封装,增加一些其他相关,使其具有抽象功能用在公共的接口上。
    这个包实现了缓冲的 I/O。它封装于 io.Reader 和 io.Writer 对象,创建了另一个对象(Reader 和 Writer)在提供缓冲的同时实现了一些文本 I/O 的功能。

    4) sort

    sort 包提供了对数组和用户定义集合的原始的排序功能。
    strconv 包提供了将字符串转换成基本数据类型,或者从基本数据类型转换为字符串的功能。

    6) os

    os 包提供了与平台无关的操作系统功能接口。其设计是 Unix 形式的。
    sync 包提供了基本的同步原语,例如互斥锁。

    8) flag

    flag 包实现了命令行解析。
    encoding/json 包实现了编码与解码 RFC 4627 定义的 JSON 对象。

    10) html/template

    数据驱动的模板,用于生成文本输出,例如 HTML。
    将模板关联到某个上进行解析。模板内容指向数据结构的元素(通常结构的字段或者 map 的键)控制解析并且决定某个值会被显示。模板扫描结构以便解析,而“游标” @ 决定了当前位置在结构中的值。

    11) net/http

    net/http 实现了 HTTP 请求、响应和 URL 的解析,并且提供了可扩展的 HTTP 服务和基本的 HTTP 客户端。
    unsafe 包包含了 Go 程序中数据类型上所有不安全的操作。通常无须使用这个。

    13) reflect

    reflect 包实现了运行时反射,允许程序通过抽象类型操作对象。通常用于处理静态类型 interface{} 的值,并且通过 Typeof 解析出其动态类型信息,通常会返回一个有接口类型 Type 的对象。
    os/exec 包执行外部命令。

  • 相关阅读:
    Linux下修改MySQL数据库字符编码为UTF-8解决中文乱码
    ODS与DW之间的关系
    如何使用Hive&R从Hadoop集群中提取数据进行分析
    CentOS6.5下实现R绘图
    Util.FSUtils: Waiting for dfs to exit safe mode
    Grafana邮件报警
    CentOS7安装Grafana(Yum)
    CentOS7安装Node_exporter(二进制)
    CentOS7安装Prometheus(二进制)
    linux查看进程内存占用
  • 原文地址:https://www.cnblogs.com/cgl-dong/p/14034973.html
Copyright © 2011-2022 走看看