package 基本管理单元
同一个package下面,可以有非常多的不同文件,只要每个文件的头部 都有 如 “package xxx” 的相同name;
就可以在主方法中使用 xxx.Method() 调用不同文件中的方法了。
ps: 文件夹名字可以和这个package 名称不一致
e.g.
mypackage
| --a.go
| --b.go
| --c.go
a.go 中有 Saya(), b.go 中有Sayb() 3个文件共同的package name 为 testpackage
主函数中调用 a.go 和 b.go 文件中的各自方法只要用 testpackage.Saya() ,testpackage.Sayb()即可
公共/私有 变量
在 Go 中,包中成员以名称 首字母大小
写决定访问权限。
首字母大写的名称是被导出的
e.g.
• public: 首字母大写,可被包外访问。
• internal: 首字母小写,仅包内成员可以访问。
Go 语言中的下划线
"_"是特殊标识符,用来忽略结果。
1. 下划线在 import
中
在Golang里,import的作用是导入其他package。
import 下划线(如:import _ hello/imp)的作用:
当导入一个包时,该包下的文件里所有init()函数都会被执行。
然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包。
即使用【import _ 包路径】只是引用该包,仅仅是为了调用init()函数,所以无法通过包名来调用包中的其他函数。
e.g.
src
|
+--- main.go
|
+--- hello
|
+--- hello.go
// main.go 文件
package main
import _ "./hello"
func main() {
// hello.Print()
// 编译报错:./main.go:6:5: undefined: hello
}
// hello.go 文件
package hello
import "fmt"
func init() {
fmt.Println("import init() come here.")
}
func Print() {
fmt.Println("Hello!")
}
// 输出结果:
import init() come here.
2. 下划线在代码中
// 代码:
package main
import (
"os"
)
func main() {
buf := make([]byte, 1024)
f, _ := os.Open("/Users/***/Desktop/text.txt") // 解释1
defer f.Close()
for {
n, _ := f.Read(buf) // 解释2
if n == 0 {
break
}
os.Stdout.Write(buf[:n])
}
}
// 解释1:
`下划线意思是忽略这个变量`
比如os.Open,返回值为*os.File,error
普通写法是f,err := os.Open("xxxxxxx")
如果此时不需要知道返回的错误值
就可以用f, _ := os.Open("xxxxxx")
如此则忽略了error变量
// 解释2:
`占位符`
`意思是那个位置本应赋给某个值,但是咱们不需要这个值`
所以就把该值赋给下划线,意思是丢掉不要。
这样编译器可以更好的优化,任何类型的单个值都可以丢给下划线。
这种情况是占位用的,方法返回两个结果,而你只想要一个结果。
那另一个就用 "_" 占位,而如果用变量的话,不使用,编译器是会报错的。
Go 命令
go env用于打印Go语言的环境信息。
go run命令可以编译并运行命令源码文件。
go get可以根据要求和实际情况从互联网上下载或更新指定的代码包及其依赖包,并对它们进行编译和安装。
go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包。
go install用于编译并安装指定的代码包及它们的依赖包。
go clean命令会删除掉执行其它命令时产生的一些文件和目录。
go doc命令可以打印附于Go语言程序实体上的文档。我们可以通过把程序实体的标识符作为该命令的参数来达到查看其文档的目的。
go test命令用于对Go语言编写的程序进行测试。
go list命令的作用是列出指定的代码包的信息。
go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
go vet是一个用于检查Go语言源码中静态错误的简单工具。
go tool pprof命令来交互式的访问概要文件的内容。