main包
主程序需要引用package main
,只有引用了main
,才可以编译生成二进制程序。
自定义包
包代码
<$GOHOME/src/packageName>/sum.go
package calculator // 包名
var logMessage = "[LOG]"
// Version of the calculator
var Version = "1.0"
func internalSum(number int) int {
return number - 1
}
// Sum two integer numbers
func Sum(number1, number2 int) int {
return number1 + number2
}
package 定义包名
go约定:小写开头的仅用于包内部,大写开头的包内外均可以用.
- 只能从包内调用
logMessage
变量。 - 可以从任何位置访问
Version
变量。 建议你添加注释来描述此变量的用途。 (此描述适用于包的任何用户。) - 只能从包内调用
internalSum
函数。 - 可以从任何位置访问
Sum
函数。 建议你添加注释来描述此函数的用途。
模块
Go通过模块引用包。
模块通常包含可提供相关功能的包。 包的模块还指定了 Go 运行你组合在一起的代码所需的上下文。 此上下文信息包括编写代码时所用的 Go 版本。
cd <$GOHOME/src/packageName>
go mod init github.com/myuser/calculator
init 后是模块名,也是下载地址,go通过这个地址去下载。
包调用
主程序:<$GOHOME/src/packageName>/main.go
通过模块名调用包
package main
import (
"fmt"
"github.com/myuser/calculator"
)
func main() {
total := calculator.Sum(3, 5) //通过模块名直接引用包下sum.go中的Sum()函数
fmt.Println(total)
fmt.Println("Version: ", calculator.Version)
}
初始化主程序模块
go mod init helloworld
修正模块文件
告知go引用本地模块 calculator 包
module helloworld
go 1.14
require github.com/myuser/calculator v0.0.0
replace github.com/myuser/calculator => ../calculator
replace
关键词指定模块的本地路径