用一个只有main函数的go文件来简单说一下Go语言的源文件结构布局,主要分为包名、引入的包和具体函数。下边是main.go示例代码:
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
package main就是表明这个文件所在的包是main,import "fmt"表明从从fmt这个包路径引入文件到当前文件里边,而func main(){}就是在当前文件定义了一个main函数,真正执行功能的地方。fmt.Println("hello, world")中的fmt是包名,与上边import "fmt"中fmt包路径是不一样的。先使用go build main.go编译一下,./main执行之后输出了hello, world。

可以看到语句之后没有;,而且文件也没有格式缩进,不过在go中有专门对源文件进行格式化的工具gofmt,比如你可以go fmt main.go格式化源文件。

gofmt main.go只能把格式化的内容显示出来,不会在源文件上更改,可以试一下。
在一个函数引用其他包里边的函数时,需要先使用包路径引入包,之后使用包名加函数使用。比如下方的代码:
package main
import "github.com/sirupsen/logrus"
func main() {
logrus.SetLevel(logrus.TraceLevel)
logrus.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
TimestampFormat: "2022-07-17 00:00:00.000",
})
logrus.Trace("你好,整个世界")
}
可以看到import "github.com/sirupsen/logrus"就是使用包路径引入包,logrus.Println()就是包名加函数。
go fmt importTest.go先格式化一下源文件。
使用go build importTest.go编译的时候报错如下:
importTest.go:3:8: no required module provides package github.com/sirupsen/logrus: go.mod file not found in current directory or any parent directory; see 'go help modules'

这里就需要使用Go module的功能了。
mkdir importTest创建一个目录,然后mv importTest.go importTest/main.go把上边importTest.go复制到importTest目录里边,并且更名为main.go。

go mod init importTest就会在当前目录里边生成了go.mod,ls -l看一下当前目录内容。

cat go.mod看一下具体内容。

go build importTest进行构建,发现报错:
main.go:3:8: no required module provides package github.com/sirupsen/logrus; to add it:
go get github.com/sirupsen/logrus

go mod tidy让Go工具自动添加依赖包。

ls -l可以看一下当前目录里边的内容,发现多了一个go.sum文件,cat go.mod可以看到内容。

cat go.sum看一下go.sum的内容。

go build importTest构建,./importTest执行输出为TRAC[242424+08-117 00:00:00.825] 你好,整个世界 。

此文章为11月Day 24学习笔记,内容来源于极客时间《Tony Bai · Go 语言第一课》。



















