1.基本类型
bool |
1 |
false |
不能使用0、1代替false、true |
byte |
1 |
0 |
等同于uint8 |
int、uint |
4、8 |
0 |
默认整数类型,根据平台,32或64位 |
int8、uint8 |
1 |
0 |
-128 ~ 127,0 ~ 255 |
int16、uint16 |
2 |
0 |
-32768 ~ 32767,0 ~ 65535 |
int32、uint32 |
4 |
0 |
-(2^32 / 2) ~ (2^32 / 2 - 1),0 ~ 2^32 |
int64、uint64 |
8 |
0 |
-(2^64 / 2) ~ (2^64 / 2 - 1),0 ~ 2^64 |
float32 |
4 |
0.0 |
|
float64 |
8 |
0.0 |
默认浮点数类型 |
complex64 |
8 |
|
|
complex128 |
16 |
|
|
rune |
4 |
0 |
Unicode Code Point, int32 |
uintptr |
4,8 |
0 |
足以存储指针的uint |
string |
|
"" |
字符串,默认值为空字符串,而非NULL |
array |
|
|
数组 |
struct |
|
|
结构体 |
function |
|
nil |
函数 |
interface |
|
nil |
接口 |
map |
|
nil |
字典,引用类型 |
slice |
|
nil |
切片,引用类型 |
channel |
|
nil |
通道,引用类型 |
2.类型别名
设置类型别名后可以让代码可读性更强,一目了然这个变量做什么用的:
3.变量的声明与赋值
- 变量的声明: var a int
- 变量的赋值:a = 123
- 声明并赋值: var a int = 123 (此时若省略类型,则编译器根据值自动推导类型)
- 多个变量的声明
并行方式(可以省略类型,由值推导)
var a, b, c, int = 1, 2, 3
函数内部声明变量的简写形式:
函数多个返回值时可以用"_"忽略返回值
4.类型转换
- go中不存在隐式转换,所有类型转换必须显示声明
- 转换只能发生在两种相互兼容的类型之间
- 类型转换的格式:
var a float32 = 1.1
b := int(a)
如果转换的目标是指针、单向通道或没有返回值的函数类型,那么必须使用括号,以避免造成语法分解错误。
fun main() {
x := 100
p := *int(&x) //错误:cannot convert &x (type *int) to type int
// invalid indirect of int(&x) (type int)
fmt.Println(p)
}
正确的做法是用括号,让编译器将*int解析未指针类型。
(*int)(p)
(<-chan int)(c)
(func())(x)