50

Golang学习笔记之包(package)

 5 years ago
source link: https://studygolang.com/articles/16762?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

包是结构化代码的一种方式:每个程序都由包的概念组成,可以使用自身的包或者从其它包中导入内容。

一、工作空间

编译⼯具对源码目录有严格要求,每个⼯作空间 (workspace) 必须由 bin、 pkg、 src 三个目录组成。

a2i22eR.png!web

二、包结构

所有代码都必须组织在 package 中。

• 包由同⼀目录下的多个源码⽂件组成。

• 包名类似 namespace,与包所在目录名、编译⽂件名⽆关。

• 目录名最好不⽤ main、 all、 std 这三个保留名称。

• 可执⾏⽂件必须包含 package main,⼊⼝函数 main。

包声明 "package + 包名" ,必须在源文件中非注释的第一行指明这个文件属于哪个包。如:package main。package main表示一个可独立执行的程序,每个Go应用程序都包含一个名为 main 的包。

同一个包(package)下面,可以有非常多的不同文件,只要每个文件的头部都有相同name就可以,如 "package oldboy" 。文件夹名字可以和这个package名称不一致。

三、标准库

在Go的安装文件里包含了一些可以直接使用的包,即标准库。
Golang标准库文档

四、第三方库

通过"go get + 完整包名"保存下载第三方库。

在执行go get 命令之前,确保你的电脑配置了环境变量GOPATH,并且安装git。

五、导出包里面的数据

变量、函数、结构体、方法等,首字母大写,则可以被其他的包访问,如果首字母小写,则只能在本包中使用。

六、导入包

(1)导入标准库的系统包。

import "fmt"

(2)绝对路径导入包,导入 gopath/src/geometry/rectangle包中的内容。

"import "geometry/rectangle"

(3)相对路径导入包,导入同一目录下 rectangle 包中的内容。

import "./rectangle //仅对 go run main.go 有效"

(4)包重命名模式,导入包并启用别名。

import f "fmt //导入fmt,给他起别名f

(5)简便模式,这样就可以直接使用其内容,而不用再使用其"包名."的模式

import . "fmt" //例如fmt.Println可以直接写为Println

(6)⾮导⼊模式,仅让该包执⾏初始化函数

import _"./rectangle" //仅执行该包内的init函数

未使⽤的导⼊包,会被编译器视为错误 (不包括 "import _")。

七、初始化

• 每个源⽂件都可以定义⼀个或多个初始化函数。

• 编译器不保证多个初始化函数执⾏次序

• 初始化函数在单⼀线程被调⽤,仅执⾏⼀次。

• 初始化函数在包所有全局变量初始化后执⾏。

• 在所有初始化函数结束后才执⾏ main.main。

• ⽆法调⽤初始化函数。

• 如果一个包导入了另一个包,被导入的包先初始化。

函数形式如下:

func init() {
    f.Println("init")
}

不应该滥⽤初始化函数,仅适合完成当前⽂件中的相关环境设置。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK