一、初识Golang
安装Go语言
编写hello world程序
- 新建文件夹go-learn作为go项目
- cd到go-learn文件目录,使用如下命令创建一个go.mod文件
$ go mod init fourforfo.com/hello #fourforfo.com/hello 类似于 maven中的groupId/artifactId
- 编写如下的hello world代码
package main //导入fmt模组,用于格式化文本,可以将文本内容输出到console,类似于java的System.out import "fmt" func main() { fmt.Println("Hello, World!") }
- 在go-learn路径使用
go run .
运行hello.go文件,可以看到输出结果Hello, World!
引入外部方法
- 导入
rsc.io/quote
包,并输出quote.Go()
到命令行 - 终端输入
go mod tidy
命令下载包;发现无法下载,运行go env
命令发现代理网址为GOPROXY=https://proxy.golang.org,direct
,国内无法访问改网站,使用go env -w GOPROXY=https://goproxy.cn,direct
修改成国内的代理网址,重启vscode后再次输出go mod tidy
,正常下载。 - 最后运行该文件即可。
二、多模组项目尝试
创建一个被调用的module——greetings
- cd到一个名为greetings文件夹目录下(没有greeings就创建一个),使用
go mod init fourforfo.com/greetings
初始化一个greetings module - 粘贴如下代码到greetings目录下的greetings.go文件中
如上所示:使用package greetings import "fmt" // Hello returns a greeting for the named person. func Hello(name string) string { // Return a greeting that embeds the name in a message. message := fmt.Sprintf("Hi, %v. Welcome!", name) return message }
:=
操作符可以不用声明message的类型,直接通过右边的类型来决定message的具体类型,等同于如下代码:message := fmt.Sprintf("Hi, %v. Welcome!", name) //==================等价于如下代码================== var message string message = fmt.Sprintf("Hi, %v. Welcome!", name)
创建一个能调用greetings的module——hello
- 在greetings同路径下创建一个hello文件夹,使用
go mod init fourforfo.com/hello
初始化一个hello module - 粘贴如下代码到hello目录下的hello.go文件中
package main import ( "fmt" "fourforfo.com/greetings" ) func main() { // Get a greeting message and print it. message := greetings.Hello("xiao") fmt.Println(message) }
- 执行
go mod tidy
发现无法找到"fourforfo.com/greetings",这是因为greetings未发布到Go工具能找到的地方,可以执行命令go mod edit -replace fourforfo.com/greetings=../greetings
,让Go工具从当前父目录下greetings中寻找fourforfo.com/greetings
,此时再次执行命令go mod tidy
可以正常找到greetings模组,go.mod文件如下所示module fourforfo.com/hello go 1.18 replace fourforfo.com/greetings => ../greetings require fourforfo.com/greetings v0