GO 模块化
任何语言都不可避免要进行模块化,这里就简单介绍下
同package 同文件夹下 不同文件之间调用
案例
该方式必须所有文件都为main,也就是包名相同,才可以运行
test.go
package main
func sayHello() {
println("Hello makalo")
}
main.go
package main // 声明 main 包,表明当前是一个可执行程序
func main() { // main函数,是程序执行的入口
sayHello()
}
目录结构
编译并运行
这时候执行的命令,不再是
go run main.go
而是
go run test.go main.go
结果
不同package 不同文件夹下 不同文件之间 调用
这里有大坑,谨慎进入
原因参考这里:
https://blog.csdn.net/qq_42428613/article/details/119327441?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1-119327441-blog-124147043.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.2&utm_relevant_index=4
总结一下注意的点:
- 在 go1.16 版本发布后,go module 由原来的默认值auto 变为on 了,意味着 go module 默认已经开启了,所以如果你看的资料太老,原来的资料上还是
GOPATH
方式,而你的 go 版本又比较新,就会有问题,因为GOPATH 和 GO MOD 不能一起使用 - 不要在
GOPATH/src
下写了,现在都是 使用go mod
只要你基础环境配好,随便在那个目录写可以 - 有
go.mod
才是根目录
有关go mod ,请参考:
https://www.cnblogs.com/makalochen/p/17090291.html
目录结构
main.go
package main // 声明 main 包,表明当前是一个可执行程序
import "modtest/test"
func main() { // main函数,是程序执行的入口
test.SayHello2()
}
test.go
package test
// 首字母大写才可被包外访问
func SayHello2() {
println("Hello makalo2")
}
go.mod
go.mod 文件是由 go mod
相关命令自动生成,如:
mod init modtest
就会生成
module modtest
go 1.19
运行结果