常规语法和数据类型
基本数据类型
bool
//有符号整型
int(取决于计算机位数) int8 int16 int32 int64
//无符号整形(一般用于位运算等)
uint(取决于计算机位数) uint8 uint16 uint32 uint64 uintptr(取决于计算机位数)
byte // uint8 的别名
rune // int32 的别名,用于表示一个 Unicode 码点(UTF-8 字符)
// 浮点数
float32 float64
// 复数
complex64 complex128
强制类型转换
// 不同类型之间赋值需要显示的类型转换(不支持默认类型转换)
var i int = 42
var f float64 = float64(i) // 注意与C的区别:float64(i)和(float)i
短变量声明和默认类型
i := 42 // int
f := 3.142 // float64
g := 0.867 + 0.5i // complex128
关于var和:=两种赋值方式:var定义如果没有初始化则为该类型(无论是基础类型还是结构体)的零值,如果要定义一个结构体的零值,:=将做不到。
常量
//iota
func main() {
// iota只能配合const()一起使用,iota只有在const中才具有累加效果
const (
BeiJing = iota // = 0
ShangHai // = 1
GuangZhou // = 2
)
}
nil
go中的数据类型都有默认的零值,每个类型对应的零值为:
bool -> false
numbers -> 0
string -> ""
pointers -> nil
slices -> nil
maps -> nil
channels -> nil
functions -> nil
interfaces -> nil
下面清一色的nil就是这些数据类型对应的零值。
nil的特点:
- 两个nil不可比较,因为nil没有默认类型;
- 不同类型的nil指针是一致的,都是指向0x0;
- 不同类型的nil值占用的内存大小不一致,就如不同数据类型的大小不一致;
- nil是且仅是Pointer、chan、func、slice、map、interface的预定义的零值,是一个标识符,并不是关键字,甚至可以自己改变nil的值(不推荐);
转换字符(conversion character)
一般用于格式化输出%d 十进制整数
%x, %o, %b 十六进制,八进制,二进制整数。
%f, %g, %e 浮点数: 3.141593 3.141592653589793 3.141593e+00
%t 布尔:true或false
%c 字符(rune) (Unicode码点)
%s 字符串
%q 带双引号的字符串"abc"或带单引号的字符'c'
%v 变量的自然形式(natural format)
%T 变量的类型
%% 字面上的百分号标志(无操作数)
独有语法特性
```go // 声明多个相同类型的参数时,可省略前面的类型名 func add(x, y int) int { return x + y }
// 可实现多值返回 func adder(x, y string) (int, int) { return x+1, y+1 }
//在返回类型声明中直接命名返回值 func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x return } ```