基础语法与数据类型
Go 语法简洁,没有 class、继承、泛型(Go 1.18 前)等复杂特性。本章介绍变量、常量与基本类型。
变量声明
Go 有三种常见声明方式:
1 2 3 4 5 6 7 8
| var name string = "Go"
var age = 18
city := "Beijing"
|
短变量声明 := 只能在函数内使用,且左侧至少有一个新变量。
1 2
| a, b := 1, 2 b, c := 3, 4
|
多变量声明:
1 2 3 4
| var ( host string = "localhost" port int = 8080 )
|
零值
未显式赋值的变量会有零值,不会出现”未初始化”的随机值:
| 类型 |
零值 |
| 数值 |
0 |
| 布尔 |
false |
| 字符串 |
"" |
| 指针、切片、map、channel、函数、interface |
nil |
1 2 3 4
| var n int var s string var p *int
|
常量
1 2 3 4 5 6 7 8 9 10 11 12
| const Pi = 3.14159 const ( StatusOK = 200 StatusError = 500 )
const ( Sunday = iota Monday Tuesday )
|
基本数据类型
整数
1 2 3
| var a int = 42 var b int64 = 1 << 32 var c uint8 = 255
|
常用:int、int64、uint、byte(uint8)、rune(int32,表示 Unicode 码点)。
浮点
1 2
| var f1 float64 = 3.14 var f2 float32 = 1.5
|
默认浮点字面量为 float64,计算精度要求高时用 float64。
布尔
1 2 3 4
| var ok bool = true if ok { }
|
字符串
字符串是只读的字节序列,UTF-8 编码:
1 2 3 4 5 6 7 8
| s := "Hello, 世界" len(s) rune(s[0])
for i, ch := range s { fmt.Printf("%d: %c\n", i, ch) }
|
字符串不可变,拼接用 + 或 strings.Builder(高效):
1 2 3 4 5 6
| import "strings"
var b strings.Builder b.WriteString("Hello") b.WriteString(", Go") result := b.String()
|
类型转换
Go 没有隐式类型转换,必须显式转换:
1 2 3 4 5 6
| var i int = 42 var f float64 = float64(i) var u uint = uint(f)
|
指针
1 2 3 4 5
| x := 10 p := &x fmt.Println(*p) *p = 20 fmt.Println(x)
|
Go 有指针但没有指针运算(不能 p++),比 C 更安全。
类型别名与自定义类型
1 2 3 4 5 6 7 8 9
| type UserID int64 type Meters float64
var id UserID = 1001 var dist Meters = 3.5
var n int64 = int64(id)
|
小结
- 用
var 或 := 声明变量,注意零值规则
- 基本类型包括整型、浮点、布尔、字符串
- 字符串是 UTF-8 字节序列,用
range 遍历字符
- 类型转换必须显式,自定义类型需强转