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.类型别名
设置类型别名后可以让代码可读性更强,一目了然这个变量做什么用的:
type (
ByteSize int64
)
3.变量的声明与赋值
- 变量的声明: var a int
- 变量的赋值:a = 123
- 声明并赋值: var a int = 123 (此时若省略类型,则编译器根据值自动推导类型)
- 多个变量的声明
并行方式(可以省略类型,由值推导)
var a, b, c, int = 1, 2, 3
函数内部声明变量的简写形式:
funciont main(){
a:= 1
}
函数多个返回值时可以用"_"忽略返回值
a, _, c, d := 1, 3, 4
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)