基本類型
- 布爾型:bool
- 長度:1字節
- 取值范圍:true,false
- 注意:不可以用數字代表true或false
- 整型:int/uint
- 根據運行平台可能為32或64位
- 8位整型:int8/uint8
- 長度:1字節
- 取值范圍 -128~127/0-255
- PS:int是有符號,uint是無符號
-
字節型:byte (uint8別名)
-
16位整型:int16/uint16
- 長度:2字節
- 取值范圍:-32768~32768 / 0~65535
- 32位整型:int32(rune)/uint32
- 長度:4字節
- 取值范圍:-2^32/2 ~ 2^32/2-1 / 0~2^32-1
- 64位整型:int64/uint64
- 長度:8字節
- 取值范圍: -2^64/2 ~ 2^64/2-1 / 0~2^64-1
- 浮點型:float32/float64
- 長度:4/8字節
- 小數位:精確到7/15小數位
- 復數:complex64/complex128
- 長度8/16字節
-
足夠保存指針的32位或64位整數型:uintptr
-
其它值類型
- array、struct、string
- 引用類型
- slice、map、chan
-** 接口類型:interface**
- 函數類型:func
- 在go語言中函數是可以賦值給變量的,所以函數也是一種類型
類型零值
- 零值不等於空值,而是當變量被聲明為某種類型后的默認值,通常情況下值得類型的默認值為0,bool為false,string為空字符串。
package main
import (
"fmt"
)
func main() {
var a int
fmt.Println(a)
}
//此時打印出來的a的值是0,如果a為string類型的話,打印出來的值是空字符串,如果a為bool型的話,打印出來的值是false
類型別名
package main
import (
"fmt"
)
type (
文本 string
)
func main() {
var b 文本
b = "你好"
fmt.Println(b)
}
//此時也是可以進行打印的,但是不建議這樣使用
單個變量的聲明和賦值
- 變量的聲明格式: var <變量名稱> <變量類型>
- 變量的賦值格式: <變量名稱> = <表達式>
- 聲明的同時賦值:var <變量名稱> <變量類型> = <表達式>
package main
import (
"fmt"
)
func main() {
var b int
b = 1 //先聲明后賦值,當這個變量還沒有要用,當你在后面的分支結構中可能要用到它,這個時候不能在結構中聲明,在結構退出之后,你可能還需要其他的運算。
var c int = 1 //變量聲明的同時賦值,一般用在全局變量中,全局變量不能使用:=,必須進行顯式的說明
var f = 2 //不寫出變量類型的區別,有可能現在是int型,你在后面進行運算是float型,這個時候用系統推斷就可以保持運算的類型一致。
d := "go" //最簡寫法
e := false
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
fmt.Println(f)
}
多個變量的聲明與賦值
- 全局變量的聲明可以使用var()的方式進行簡寫
- 全局變量的聲明不可以省略var,但可以使用並行的方式
- 所有變量都可以使用類型推斷
- 局部變量不可以使用var()的方式簡寫,只能使用並行方式
package main
import (
"fmt"
)
func main() {
//var a, b, c, d int = 1, 2, 3, 4
//var a, b, c, d = 1, 2, 3, 4
//a, b, c, d := 1, 2, 3, 4
a, _, c, d := 1, 2, 3, 4 //忽略了,應用在函數的返回值當中
fmt.Println(a, c, d)
}
變量的類型轉換
- Go中不存在隱式轉換,所有的類型轉換必須顯式聲明
- 轉換只能發生在兩種相互兼容的類型之間
- 類型的轉換格式為如下
- 從嚴格意義上講type newint int,這里newint並不能說是int的別名,而只是底層數據結構相同,在這里稱之為自定義類型,在進行類型轉換時仍舊需要顯示轉換,但是byte和rune確確實實為uint8和int32的別名,可以相互進行轉換。
<Value> [:]= <TypeOfValueA>(ValueB)
package main
import (
"fmt"
)
func main() {
//在相互兼容的兩種類型之間進行轉換
var a float32 = 100.1
fmt.Println(a)
b := int(a)
fmt.Println(b)
//以下表達式無法通過編譯,因為類型不兼容
var c bool = true
d := int(c)
}
- string()表示將數據轉換成文本格式,因為計算機中存儲的任何東西本質上都是數字,因此此函數自然地認為我們需要的是用數字65表示的文本A。
package main
import (
"fmt"
"strconv"
)
func main() {
var a int = 65
b := string(a)
c := strconv.Itoa(a)
d := strconv.Atoi(c)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
}
//此時我們需要引用strconv的Itoa的函數,將65轉換成我們想要的字符串65,如果想要逆轉的話需要用Atoi函數。
