Go 语言结构

包声明、导入、函数、以及一个 Go 文件的最小骨架。

Beginner
Key Points`package main` + `func main()` 才是可执行程序;其他包名只能被导入。

骨架

Go
// 1. 包声明:这一行必须是文件第一行(注释除外)
package main

// 2. 导入
import (
	"fmt"
	"os"
)

// 3. 常量、变量、类型
const Version = "1.0.0"

// 4. 函数
func main() {
	fmt.Println("版本", Version)
	fmt.Println("参数", os.Args[1:])
}
Bash
go run main.go a b c
Output
版本 1.0.0
参数 [a b c]

每一部分的作用

PartRule
package必须有,且同目录下所有文件包名一致
import导入后必须使用,否则编译失败
main只有 package main 里的 main() 是入口
大小写大写开头 = 导出(public),小写 = 包内私有

导入的几种写法

Go
import "fmt"                    // 单个

import (                        // 分组
	"fmt"
	"strings"
)

import f "fmt"                  // 起别名
import _ "github.com/lib/pq"    // 只执行 init(),不直接使用
import . "fmt"                  // 并入当前命名空间(不推荐)

Blank imports are most common for driver registration: database/sql knows nothing about PostgreSQL — lib/pq's init() registers the driver.

多文件同包

Text
hello/
├── go.mod
├── main.go        package main
├── greet.go       package main   ← 同一个包,可直接互相调用
└── util/
    └── util.go    package util   ← 另一个包,需导入
Go
// greet.go
package main

import "fmt"

func greet(name string) {       // 小写,包内可见
	fmt.Println("你好,", name)
}
Go has no class files — a directory is a package. Two different package names in one directory is a compile error, quite unlike Java packages.

Friends & Partners