go modules
目录
在一个空文件夹下,初始化一个 Module
$ go mod init example
go: creating new go.mod: module example
此时,在当前文件夹下生成了go.mod,这个文件记录当前模块的模块名以及所有依赖包的版本。
接着,我们在当前目录下新建文件 main.go,添加如下代码:
package main
import (
	"fmt"
	"rsc.io/quote"
)
func main() {
	fmt.Println(quote.Hello())  // 你好,世界。
}
运行 go run . ,输出如下
main.go:6:2: no required module provides package rsc.io/quote; to add it:
        go get rsc.io/quote
手动执行第三方包 rsc.io/quote的下载
$ go get rsc.io/quote
go: added golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
go: added rsc.io/quote v1.5.2
go: added rsc.io/sampler v1.3.0
具体的版本信息也记录在了go.mod中
module example
go 1.22.2
require rsc.io/quote v1.5.2
require (
	golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect
	rsc.io/sampler v1.3.0 // indirect
)
在 go.mod 的第5行是直接依赖,后面的 // indirect 是间接依赖
可以通过go list -m all列出当前模块和所有依赖
$ go list -m all
example
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c
rsc.io/quote v1.5.2
rsc.io/sampler v1.3.0
第一行是当前模块,也称为主模块。后面的是依赖,依赖包含名称和版本号,第一个依赖是伪版本号,后面的是正常的语义版本标签。
go.sum 中包含了模块的哈希值
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=
rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
我们在当前目录,添加一个子 package calc,代码目录如下:
demo/
   |--calc/
      |--calc.go
   |--main.go
在 calc.go 中写入
package calc
func Add(num1 int, num2 int) int {
	return num1 + num2
}
在 package main 中如何使用 package cal 中的 Add 函数呢?
import 模块名/子目录名即可,修改后的 main 函数如下:
package main
import (
	"fmt"
	"example/calc"
	"rsc.io/quote"
)
func main() {
	fmt.Println(quote.Hello())
	fmt.Println(calc.Add(10, 3))
}
$ go run .
你好,世界。
13
    Do not communicate by sharing memory; instead, share memory by communicating.

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号