一.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