定义
var 定义变量
var a int // var 定义变量
var a int = 10 // var 设置初值
var a = 10 // var 自动解析类型 (但不能解析为 int8 等)
var a, b int = 1, 2 // var 定义同类型多变量
var (
a int
s string
) // var 定义多变量
var (
a, b int = 1, 2
s, ss string
pi = 3.1415926535 // float64
)
const 定义常量
const a int = 10 // 必须初始化
const a = 10 // 自动解析常量类型
const a, b int = 1, 2 // 定义同类型多常量
const (
a int = 10
s string = "Hello World!"
pi float64 = 3.1415926535
)
:= 自动变量
a := 1 // var a int = 1
s := "Hello World!" // var s string = "Hello World!"
b, ss := 2, "No Way Home."
- 注意: 自动变量不可用于全局变量的定义。
匿名变量
- 匿名变量
_伪接受数值,数值将直接被丢弃,不可访问其数值。 - 匿名变量
_可以使用=与:=。(其他变量重定义将出错)
func getData() (int, int) {
return 10, 20
}
func main() {
a, _ := getData() // 10, _
_, a = getData() // _, 20
}
作用域
- 局部变量:
- 每一个
{}可以被视为一个作用域,它包括函数、if语句、for语句等。 - 在局部作用域定义的变量将在所定义的作用域结束时消亡。
- 每一个
- 全局变量:
基本数据类型
概览
- 概览中的
complex/uintptr/byte/rune将作补充说明,其他不作介绍。
| 类型 | 默认值 | 描述 |
|---|---|---|
int / uint | 0 | 默认位数的整型和无符号整型,unsafe.Sizeof() 查看字节数 |
int8 / int16 / int32 / int64 | 0 | 8 / 16 / 32 / 64 位整型 |
uint8 / uint16 / uint32 / uint64 | 0 | 8 / 16 / 32 / 64 位无符号整型 |
float32 / float64 | 0.0 | 32 / 64 位浮点数(IEEE754) |
complex64 / complex128 | (0.0+0.0i) | 32 / 64 位复数 |
uintptr | nil | 无符号整型,指针类型 |
byte | '\000' | 类似 uint8,表示 ASCII 编码 |
rune | '\000' | 类似 int32,表示 UTF-8 编码 |
- 在
Golang中,int/uint不是int8/int16/int32/int64/uint8/uint16/uint32/uint64的别名。 - 后面还将介绍非基本数据类型,如
string、slice、channel。
复数类型 complex
-
可以使用
a+bi表示复数,如0.5+1.5i。 -
可以使用内置函数
func complex(r, i float64) complex128构造复数类型。
指针类型 uintptr / unsafe.Pointer
- 任何指针类型不可直接转换为
uintptr,uintptr可以与unsafe.Pointer相互转换,unsafe.Pointer可以实现对任意数据类型的强制转换,一般直接使用unsafe.Pointer即可。注意:这是危险的操作。
a := "Hello World!" // string: "Hello World!"
b := []byte(a) // []byte: [72 101 108 108 111 32 87 111 114 108 100 33]
c := **(**int)(unsafe.Pointer(&a)) // int: 8022916924116329800
字符类型 byte / rune
- 字符类型使用单引号表示,默认为
rune类型,当为ASCII编码范围时,可以转换为byte类型。字符有多种表达方式,与Clang有所不同。
| 符号 | 描述 |
|---|---|
'A' | 字符表示 |
'\n' 等 | 转义字符,与 Clang 基本相同 |
'\101' | 八进制编码,'\000' ~ '\177'(0 ~ 127) |
'\x41' | 十六进制,'\x00' ~ '\xff'(0 ~ 255) |
'\u4f60' | Unicode 编码,'\u0000' ~ '\uffff'(0 ~ 65535) |