一、文件列表如下
其中helloWorld目录是main包(package)所在目录,即该目录下所有的goy源文件(不包含子目录)属于main包,hello.go是mian函数所在文件
二、module-aware 模式启用
开启mod模式
go env -w GO111MODULE=on
在mod模式下,main包中需要初始化一个go,mod文件,语法如下
go mod init modulepath
本例中初始化go.mod文件如下:
go mod init my/hello
go.mod文件内容如下
module my/hello
go 1.19
三、同一模块内的调用,即在hello.go中调用greet.go中定义的函数
hello.go
package main
func main() {// Get a greeting message and print it.//message := Hello("huster")//fmt.Println(message)Helloworld() }
greet.go
package main
import ("fmt"
)
func Helloworld(){fmt.Println("hello world")
}
运行结果:
PS C:\Users\love1\Documents\technology\go\moduleMode\helloWorld> go run .
hello world
PS C:\Users\love1\Documents\technology\go\moduleMode\helloWorld>
四、在某一模块中调用子目录中定义的函数,即在hello.go中调用service/work.go中定义的函数
hello.ho
package mainimport ("my/hello/service"
)
func main() {// Get a greeting message and print it.//message := Hello("huster")//fmt.Println(message)Helloworld() work.Work()
}
service/work.go
package workimport ("fmt"
)func Work() { fmt.Println("I am a worker"
}
以上得知,模块下的子目录可以不初始化go.mod文件,并且引入方式如下:
import ("my/hello/service"
)
my/hello 是该模块的模块路径,service是该模块所在目录的子目录
五、引用其他自定义模块
helloWorld 目录中的模块 引用 yyzc目录中模块中定义的变量。首先需要在yyzc目录下初始化一个go,mod文件,然后在helloWorld中的go.mod引用此模块,示例如下:
module my/hellogo 1.19require mymod v1.2.3
replace mymod => ../yyzc/
hello.go
package mainimport ("my/hello/service""mymod""fmt"
)func main() {// Get a greeting message and print it.//message := Hello("huster")//fmt.Println(message)Helloworld() work.Work()fmt.Println(yyzc.SumA(1,2))yyzc.Helloworld()}
sum.go
package yyzcimport ("fmt"
)func Helloworld(){fmt.Println("hello world")
}func SumA(i int ,j int) int {var result intresult = i+jreturn result
}
执行结果如下:
PS C:\Users\love1\Documents\technology\go\moduleMode\helloWorld> go run .
hello world
i am a worker
3
hello world
PS C:\Users\love1\Documents\technology\go\moduleMode\helloWorld>
注意 当引用函数的时候,还是要通过packagename来作为前缀引用