GO 模块化

任何语言都不可避免要进行模块化,这里就简单介绍下

同package 同文件夹下 不同文件之间调用

案例

该方式必须所有文件都为main,也就是包名相同,才可以运行

test.go

package main

func sayHello() {
	println("Hello makalo")
}

main.go

package main // 声明 main 包,表明当前是一个可执行程序

func main() { // main函数,是程序执行的入口
	sayHello()
}

目录结构

image-20230203161451258

编译并运行

这时候执行的命令,不再是

go run main.go

而是

go run test.go main.go

结果

image-20230203160355824

不同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

目录结构

image-20230203185716482

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

运行结果

image-20230203190225826

posted @ 2023-02-03 19:37  makalo  阅读(154)  评论(0编辑  收藏  举报