一、Hello World项目
一切从最简单开始:
mkdir myapp
cd myapp
go mod init myapp
// myapp是主项目名
这行命令将生成一个go.mod文件,这个文件会记录所有的包的依赖关系,一个空的go.mod只有项目名称和go版本号.
nano main.go
:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
go run main.go
直接运行或go build -o run.exe
编译执行。
二、import go标准库/包
导入go语言的标准库非常简单,参见上例的Hello World中我们就导入了一个名为 fmt 的标准库,调用这个库里的Println函数:fmt.Println(“Hello World!”)
三、import 第三方包
nano main.go
:
package main
import (
"fmt"
"github.com/kataras/iris/v12" // iris是一个开源的Web框架
)
func main() {
fmt.Println("Hello World!")
app := iris.New()
fmt.Println(app.APIBuilder)
}
- 如何安装第三方包?
这时候直接执行go build -o run.exe
会报错提示找不到这个包:
no required module provides package github.com/kataras/iris; to add it:
go get github.com/kataras/iris/v12
错误信息里也提示了你需要用 go get 命令去获取这个包,现在输入:
go get github.com/kataras/iris/v12
当然,出于不能明说的原因,当你输入这行命令后,基本上是没有反应的,我们还需要这样一下:
go env -w GOPROXY=https://goproxy.cn,direct
然后再次输入:
go get github.com/kataras/iris/v12
系统将自动下载 iris 所需的文件,再次执行:
go build -o run.exe
一切正常。
现在,再次打开 go.mod,会发现自动添加了一堆包的依赖关系,因为iris这个包本身也引用了大量其他的第三方包,这些都会记录在go.mod里。
那么,刚才系统自动下载的iris包的文件实际存储在哪?
首先我们要知道GOPATH系统变量的值,在Windows下用:
echo %GOPATH%
,Linux下用 echo $GOPATH
,
得到这个变量的值后,打开 C:\Users\USERNAME\go\pkg 发现这些包都在这。
四、import 自己创建的包
- 在主项目的根目录下创建一个子目录:mkdir mypackage
- cd mypackage
- nano mypackage.go
package mypackage // 注意包名是我们自定义的,与文件夹名称一致
import (
"fmt"
)
func Sayhi() { // 这里定义了一个Sayhi的函数,注意首字母一定要大写,否则外部无法访问,这和其他OOP语言的public和private类似
fmt.Println("Hello I come from another Package")
}
- 回到主项目
nano main.go
package main
import (
"fmt"
"myapp/mypackage" // myapp是我们的主项目名,mypackage是我们自定义包名
)
func main() {
mypackage.Sayhi() // 调用mypackage下的Sayhi函数
}
五、后记
- 关于package main的特殊性
任何一个go项目都需要一个package main和一个 func main()函数,否则程序没有入口,无法运行。假设我们现在尝试一下在main.go中的第一行不使用package main而是随便创建一个比如package myapp,然后用build -o run.exe
编译,尽管代码可以通过编译但却无法执行,如图: