模块系统
大约 1 分钟
模块系统
为什么要包:
- 分门别类
- 解决同名问题 (一个包内不能有同名的东西,不同包的东西可以同名)
语法
包声明语句 (package)
语法:
通常是第一行
包名问题
尽量保持package的名字和目录名保持一致 (推荐一致,非强制,但若不遵守则该目录的其他文件也要有相同的包名), 尽量采取 有意义 简短 不与标准库冲突 的包名
// goPorject/src/projtec1/uint2/demo06/xxx.go package demo06 ...
main包
另外,main包规定是程序入口。有main包和main包里面的main函数才会得到可执行文件
(不建议做法:只要package XXX和下面的func XXX(){}这两个一样就可以正常的编译运行。但最好还是要有个main包和main函数)
(可执行程序 必须要有main包及里面的main函数,否则报错)
包导入语句 (import)
语法:
import 导入语句通常在文件开头,包声名语句的下面。包名用双引号包括
import 语句有批量导入的语法糖
包名从
$GOPATH/src/
后开始计算,使用/
进行路径分隔补充:注意 GOPATH 是Windows的系统变量,所以标准库的导入不需要路径
补充:最新版本需要禁止GO111MODULE,否则无法用GOPATH
import "fmt"
import "..."
// 或
import (
"fmt"
"..."
)
自定义包
例如:
src/demo17/test/util.go
package test
var StuNo int = 20034
func GetConn() {
...
}
src/demo17/main/test.go
package main
import (
"fmt"
"demo17/test" // 将项目路径添加到 $GOPATH 系统变量的方法 (什么傻逼玩意,酱紫用? 一般自定义包不都先教用相对路径么)
)
func main() {
fmt.Println(test.StuNo)
test.GetConn()
}
常用包
这里建议看文档,中文文档:studygolang.com/pkgdoc
- fmt