
一个标准的 Go 程序,就像华府的布局一样,井井有条。
package main // 1. 门派归属(包声明)
import (
"fmt" // 2. 邀请贵宾(标准库)
"time"
)
// 3. 这里的规矩(全局变量)
var wangsicong = "旺财"
// 4. 开场准备(init函数)
func init() {
fmt.Println("华府大门开了...")
}
// 5. 正式演出(main函数)
func main() {
fmt.Println("小强!")
}
第一行必须说明你是哪个院子的。package main 表示你是主院(可执行程序)的人。如果写 package utils,那你就是后勤部(工具库)的,不能独立行动。
你需要用到什么工具,得先请人。Go 语言对 import 查得很严:引入了包如果不使用,编译直接报错!(华夫人:不干活的人,我们华府不养!)

import . "fmt" -> 可以直接用 Println(),不用写 fmt.。但不推荐,容易乱。import f "fmt" -> 以后喊 f.Println() 就行。适合名字太长的时候。import _ "github.com/lib/pq" -> 不直接用它,但要执行它的 init() 函数。就像石榴姐躲在暗处。这是 Go 语言最独特的家规:首字母大小写决定可见性。
func Run(),这是对外公开的,外人(其他包)可以调用。func eat(),这是家丑,不可外扬,只能在自己包里用。init() 函数是个急惊风,它会在 main() 之前自动执行。每个文件都可以有 init(),适合做初始化工作。
func main() 是总指挥部。注意:main 函数既没有参数,也没有返回值!
请看下面的代码,找出哪个函数可以被其他包调用?
package tools
func calculate() { ... }
func Export() { ... }
var secret = "秘密"
var PublicInfo = "公告"
任务: 哪些是 Public 的?
答案: Export() 和 PublicInfo
解析: 只要首字母是大写的,就是可以“出口”的。首字母小写的 calculate 和 secret 只能在 tools 包内部使用。