类型 | 长度(字节) | 默认值 | 说明 |
---|---|---|---|
bool | 1 | false | 一个字节,值是true或者false,不可以用0或者1表示 |
byte | 1 | 0 | byte占用8位,一个字节,相当于uint8,不带符号位 |
rune | 4 | 0 | Unicode Code Point, int32 等价于int32类型。 |
int, uint | 4或8 | 0 | 32 或 64 位,根据平台不同是32位或者64位 |
int8, uint8 | 1 | 0 | -128 ~ 127, 0 ~ 255,byte是uint8 的别名 |
int16, uint16 | 2 | 0 | -32768 ~ 32767, 0 ~ 65535 |
int32, uint32 | 4 | 0 | -21亿~ 21亿, 0 ~ 42亿,rune是int32 的别名 |
int64, uint64 | 8 | 0 | |
float32 | 4 | 0.0 | float32小数精确到7位 |
float64 | 8 | 0.0 | 由于没有double类型,所以float64就是double。float64小数精确到15位 |
complex64 | 8 | 复数类型 | |
complex128 | 16 | 复数类型 | |
uintptr | 4或8 | 以存储指针的 uint32 或 uint64 整数,指针的长度就是随平台而变 | |
array | 值类型 | ||
struct | 值类型 | ||
string | "" | UTF-8 字符串 | |
slice | nil | 引用类型 | |
map | nil | 引用类型 | |
channel | nil | 引用类型 | |
interface | nil | 接口 | |
func | nil | 函数 |
package main import "fmt" type Student struct { Name string Age int } func main() { // 值类型(value type): array struct arr := [3]string{"0", "1", "2"} st := Student{"小明", 20} // 引用类型(reference type): slice map channel sli := []string{"0", "1", "2"} ma := map[string]string{ "name": "小红", "age": "12", } a, b, c, d := referenceTest(arr, st, sli, ma) fmt.Println("原 值:", arr, st) // 原 值: [0 1 2] {小明 20} 原始值未改变 fmt.Println("返回值:", a, b) // 返回值: [0 1 22] {小明2 20} 原始值和返回值不一致,原始值未改变 fmt.Println("原 值:", sli, ma) // 原 值: [0 1 二] map[2:二 age:12 name:小红2] 原始值被改变 fmt.Println("返回值:", c, d) // 返回值: [0 1 二] map[2:二 age:12 name:小红2] 原始值和返回值一致,原始值被改变 } func referenceTest(arr [3]string, st Student, s []string, m map[string]string) ([3]string, Student, []string, map[string]string) { // 值类型 arr[2] = "22" st.Name = "小明2" // 引用类型 s[2] = "二" m["name"] = "小红2" m["2"] = "二" return arr, st, s, m }