基本语言结构
以前一篇文章中的Hello World程序为例:
go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
其中第一行package main声明了当前的.go文件属于main包,main包是特殊的,如其他语言一样,它代表了Go程序的入口点。被定义为main包的文件中必须包含main函数,也如其他语言一样,程序将以main函数作为入口点开始执行整个程序。当然,package后也可以跟着一个自定义的名称,此时该文件的类型更像是一个类库,可以在别的文件中通过import方法引入。
第二行import "fmt"引入了fmt这个外部包,它提供了对std流的操作,如输入、输出等。
第三行func main() {}声明了main函数,如同前面所写的,这是程序的入口点,也是main包中的必须函数。函数中的fmt.Println()类似于.Net中的Console.WriteLine(),即为程序的输出功能。
注意
Go语言中要求大括号不能独占行,否则会报错!
目录结构
按照规范,在新建main.go文件之前,应当先初始化整个目录:
go
go mod init hello
这个命令将在当前目录初始化一个名称为hello的模块,可以发现,命令执行后目录下出现了一个go.mod文件,可以类比nodejs的package.json,这声明了当前项目的模块名称和依赖项等。如下即为生成的文件:
go
module hello
go 1.25.5
子目录
前文提及了可以在文件中用package+自定义名称声明一个模块,供别的文件导入、引用。那么导入方法即为:
go
import "[模块名]/[包名]"
比如若在模块目录下新建一个utils文件夹,那么就可以通过hello/utils导入,在这个文件中可以有很多个.go文件,将会被同时导入(类似于类的分包吧),不过这些.go文件必须都声明package utils,这个声明的名字也必须与子目录名一致。例如,目录结构为:

add.go中内容为:
go
package utils
func Add(a int, b int) int {
return a + b
}
那么在main.go中就可以通过hello/utils导入:
go
package main
import (
"fmt"
"hello/utils"
)
func main() {
fmt.Println(utils.Add(1, 1))
}
执行一下:
go
go run .

外部模块
显然为了避免重复造轮子,从外部调用已有的模块也是很重要的。我们可以前往Go官方包处查找已有的外部包。此处以quote包为例子。该页面中列出了包中所有可用的变量、常量、函数等信息:

那么如何安装或者引入这个包呢?如同python、nodejs等的一样,Go也可安装模块。首先下载模块:
go
go get "rsc.io/quote"
然后在main.go文件引入:
go
即可正常使用:



