一.var
语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后。
变量声明可以包含初始值,每个变量对应一个。
如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型。
//变量
var x int, y int
等同=>
var x, y int
//函数
func add(x int, y int) int {
return x + y
}
等同
func add(x, y int) int {
return x + y
}
//初始值 如有初始值,可以省略类型
var x, y = 1, 3
//在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明,
//:= 结构不能在函数外使用
//函数我必须用var声明
func add() {
var x,y=1,3
}
等同
func add() {
x,y:=1,3
}
二.基本类型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名
// 表示一个 Unicode 码点
float32 float64
complex64 complex128
附:int和uint区别: 有符号的整数类型int和无符号的整数类型uint
有符号整型int
分为int8、int16、int32、int64
数据类型 | 占用字节 | 数据范围 | 对比C语言 |
---|---|---|---|
int8 | 1 | -128~127 | char |
int16 | 2 | -32768~32767 | short |
int32 | 4 | -2147483648~2147483647(21亿) | long |
int64 | 8 | -9223372036854775808~9223372036854775807 | 比C最大要大 |
无符号整型uint
分为uint8、uint16、uint32、uint64
数据类型 | 占用字节 | 数据范围 | 对比C语言 |
---|---|---|---|
uint8(byte) | 1 | 0~255 | |
uint16 | 2 | 0~65535 | |
uint32 | 4 | 0~4294967295(42亿) | unsigned long |
uint64 | 8 | 0~18446744073709551615 |
三.关键字
3.1 for
//for循环
for i := 0; i < 10; i++ {
sum += i
}
//等同
sum := 1
for ; sum < 1000; {
sum += sum
}
//for 是 Go 中的 “while”
sum := 1
for sum < 1000 {
sum += sum
}
//无限循环 省略循环条件,该循环就不会结束
for {
}
3.2 if
//if
if x < 0 {
}else{
}
3.3 switch
Go 只运行选定的 case,而非之后所有的 case。 实际上,Go 自动提供了在这些语言中每个 case 后面所需的 break
语句
3.4 defer 语句会将函数推迟到外层函数返回之后执行。
//例一
package main
import "fmt"
func main() {
defer fmt.Println("world")
fmt.Println("hello")
}
//输出
hello
world
//例二
//defer 栈 推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。
package main
import "fmt"
func main() {
fmt.Println("counting")
for i := 0; i < 10; i++ {
defer fmt.Println(i)
}
fmt.Println("done")
}
//输出
counting
done
9
8
7
6
5
4
3
2
1
0