《Go语言实战》笔记之第三章 ----包

原文地址:

http://www.niu12.com/article/10

####包
所有的.go 文件,除了空行和注释,都应该在第一行声明自己所属的包。
每个包都在一个单独的目录里。 不能把多个包放到同一个目录中,
也不能把同一个包的文件分拆到多个不同目录中。
这意味着,同一个目录下的所有.go 文件必须声明同一个包名。

并不需要所有包的名字都与别的包不同, 因为导入包时是使用全路径的,
所以可以区分同名的不同包

包被导入后会使用你的包名作为默认的名字,
不过这个导入后的名字可以修改。
这个特性在需要导入不同目录的同名包时很有用

import 语句告诉编译器到磁盘的哪里去找想要导入的包
eg:import f1 path1/file
eg:import f2 path2/file

import (
f1 path1/file
f2 path2/file
)

一旦编译器找到一个满足 import 语句的包,就停止进一步查找。
有一件重要的事需要记住,编译器会首先查找 Go 的安装目录,
然后才会按顺序查找 GOPATH 变量里列出的目录。

所有导入的包必须被使用,户可能需要导入一个包,但是不需要引用这个包的标识符。
在这种情况,可以使用空白标识符_来重命名这个导入,但是会执行该包的init()

main 包:Go 语言的编译程序会试图把这种名字的包编译为二进制可执行文件。
所有用 Go 语言编译的可执行程序都必须有一个名叫 main 的包。

当编译器发现某个包的名字为 main 时,
它一定也会发现名为 main()的函数, 否则不会创建可执行文件。
main()函数是程序的入口,所以,如果没有这个函数,程序就没有办法开始执行。
程序编译时,会使用声明 main 包的代码所在的目录的目录名作为二进制可执行文件的文件名。

最佳实践:
包名的惯例是使用包所在目录的名字,
应该使用简洁、清晰且全小写的名字,这有利于开发时频繁输入包名


####init函数
每个包可以包含任意多个init(),这些函数都会在程序执行开始的时候被调用
所有被编译器发现的 init 函数都会安排在 main 函数之前执行。
init()用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作

不能导入不使用的包,为此使用空白标识符重命名这个导入可以让 init
函数发现并被调度运行,让编译器不会因为包未被使用而产生错误

多个包的init的函数执行顺序与栈执行顺序一致:先进后出,先导后执行


####Go命令

go build . 命令会执行编译整个项目
go build fileName 命令会执行编译单个文件

go clean . 删除编译生成的可执行文件

go vet main.go 检测代码的常见错误

go fmt main.go 格式化代码
posted @ 2019-01-11 13:27  周起  阅读(163)  评论(0编辑  收藏  举报