基础语法

翻译整理自 A Tour of Go - Basics 与 Go by Example。

1. 包(Package)

Go 程序由包组成,程序入口是 package main:

package main

import (
    "fmt"
    "math/rand"
)

func main() {
    fmt.Println("随机数:", rand.Intn(10))
}
  • 每个 .go 文件第一行必须声明所属包
  • 导入路径用双引号,多个用括号分组
  • 包中首字母大写的标识符为导出(公开),小写为私有

2. 导入(Import)

可以单行或多行导入:

import "fmt"
import "math/rand"

等价于:

import (
    "fmt"
    "math/rand"
)

也可以给包起别名:

import (
    f "fmt"      // 别名 f
    _ "image/png" // 仅初始化,不引用名字
)

3. 函数

函数定义使用 func 关键字:

func add(x int, y int) int {
    return x + y
}

类型相同可以省略前一个:

func add(x, y int) int {
    return x + y
}

多返回值

函数可返回多个值(通常用于 result + error):

func swap(a, b string) (string, string) {
    return b, a
}

func main() {
    x, y := swap("A", "B")
    fmt.Println(x, y) // B A
}

命名返回值

返回值可命名,命名后会在函数开头被声明为零值,return 不带参数即可返回:

func divide(dividend, divisor int) (quotient, remainder int) {
    quotient  = dividend / divisor
    remainder = dividend % divisor
    return // 裸 return
}

4. 变量

var i int       // 零值 0
var s = "abc"   // 类型推断
var x, y = 1, 2 // 多重赋值

简短声明(仅函数内):

name := "Go" // 推断为 string

零值:数值类型 0、布尔 false、字符串 ""、指针/接口/切片/map/channel/函数 nil。

5. 常量

const Pi = 3.14159
const (
    StatusOK = 200
    NotFound = 404
)

iota 枚举

iota 在 const 块中从 0 起每行递增:

type Weekday int
const (
    Sunday Weekday = iota // 0
    Monday                // 1
    Tuesday               // 2
    Wednesday             // 3
    Thursday              // 4
    Friday                // 5
    Saturday              // 6
)

6. 命名规范

  • 使用驼峰 camelCase 或 CamelCase
  • 首字母大小写控制可见性
  • 缩写词全大写或全小写:URL / httpClient
  • 局部变量优先短名:i、ok、err

小结

掌握包、导入、函数、变量、常量后,你已经可以编写结构清晰的 Go 程序。下一章学习流程控制。