基础语法
Go 的程序骨架:包、导入、变量与可见性规则。
package 与 import
每个 .go 文件第一行是包声明。可执行入口包必须是 main:
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Sqrt(9))
}
- 单导入:
import "fmt" - 多导入:用括号分组(
go fmt会整理顺序) - 可用别名:
import m "math",然后m.Sqrt - 下划线导入仅执行
init:import _ "image/png"(副作用导入)
未使用的导入会编译失败——这是刻意的。
变量与常量
var name string = "xiping"
var age = 18 // 类型推断
pi := 3.14 // 短声明,只能在函数内
const MaxRetry = 3
| 写法 | 说明 |
|---|---|
var x T | 声明为类型 T,值为零值 |
var x = v | 由右侧推断类型 |
x := v | 短声明;至少有一个新变量 |
const | 编译期常量 |
一次声明多个:
var a, b int = 1, 2
x, y := "hi", true
零值
未显式赋值的变量不是「未定义」,而是类型的零值:
| 类型 | 零值 |
|---|---|
| 数值 | 0 |
bool | false |
string | "" |
| 指针 / slice / map / channel / 函数 / interface | nil |
var n int
var s string
fmt.Println(n, s == "") // 0 true
可见性(导出)
Go 用首字母大小写控制包外是否可见:
- 大写开头:导出(Exported),包外可访问,如
fmt.Println - 小写开头:包内私有,如
fmt.println不存在
package greeter
func Hello() string { // 导出
return hello()
}
func hello() string { // 包内
return "hi"
}
没有 public / private 关键字;跨包只能用导出标识符。
运算符与基本字面量
算术:+ - * / %;比较:== != < > <= >=;逻辑:&& || !;位运算:& | ^ &^ << >>。
a, b := 7, 2
fmt.Println(a/b, a%b) // 3 1(整数除法截断)
字符串用双引号;原始字符串用反引号(可含换行、不转义):
s := "line\n"
raw := `path\not\escaped`
小结
- 文件属某个
package;入口是package main+func main - 优先在函数内用
:=;包级用var/const - 记住零值,少写无意义的初始化
- 导出靠首字母大写