基本類型
1.基本類型列表
float32 4 精確到7位小數(shù),相當(dāng)于c的float
float64 8 精確到15位小數(shù),相當(dāng)于c的double
complex64 8
complex128 16
uintptr 足夠保存指針的32位、64位整數(shù),指針(可以存指針的整數(shù)型)
array 值類型,數(shù)組
struct 值類型,結(jié)構(gòu)體
string 值類型,字符串類型,常用
slice 引用類型,切片
map 引用類型,字典
channel 引用類型,通道
interface 接口類型,接口
function 函數(shù)類型,函數(shù)
2.類型轉(zhuǎn)換
不支持隱式類型轉(zhuǎn)換,必須進(jìn)行顯式類型轉(zhuǎn)換
轉(zhuǎn)換只發(fā)生在兩種互相兼容的類型之間: 各類int不允許相互賦值或操作,不然會(huì)在編譯時(shí)報(bào)錯(cuò)
func main(){
a := 0x1234
b := 1234.56
c := 256
fmt.Printf("%x\n", uint8(a))
fmt.Printf("%d\n", int(b))
fmt.Printf("%f\n", float64(c))
}
3.類型別名
聲明不賦值,類型零值,非空值,而是聲明后的默認(rèn)值
保留字
變量
1.變量聲明
//第二種,根據(jù)值自行判定變量類型
var v_name = value
//第三種,省略var, 注意 :=左側(cè)的變量不應(yīng)該是已經(jīng)聲明過(guò)的,否則會(huì)導(dǎo)致編譯錯(cuò)誤.
v_name := value
e.g.
var a int = 10
var b = 10
c : = 10
示例:
func main(){
println(a, b, c)
}
結(jié)果:
2.多變量聲明:
var vname1, vname2, vname3 = v1, v2, v3 //和python很像,不需要顯示聲明類型,自動(dòng)推斷
vname1, vname2, vname3 := v1, v2, v3 //出現(xiàn)在:=左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過(guò)的,否則會(huì)導(dǎo)致編譯錯(cuò)誤
//類型不同多個(gè)變量, 全局變量, 局部變量不能使用這種方式
var (
vname1 v_type1
vname2 v_type2
)
var x, y int
var ( //這種只能出現(xiàn)在全局變量中,函數(shù)體內(nèi)不支持
a int
b bool
)
var c, d int = 1, 2
var e, f = 123, "hello"
//這種不帶聲明格式的只能在函數(shù)體中出現(xiàn)
//g, h := 123, "hello"
func main(){
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
}
注意:
A.多變量賦值時(shí),將先行計(jì)算所有左側(cè)變量的值,再進(jìn)行賦值
sc[0], sc[0] = 1, 2
//get sc[0] = 2
a, _ := test()
C.已聲明但是沒(méi)有使用的變量會(huì)在編譯階段報(bào)錯(cuò),較Python 更為嚴(yán)格
常量
常量可以是字符,字符串,布爾或數(shù)字
常量賦值是編譯期的行為
1.常量聲明
在編譯階段就能確定下來(lái)的值,在運(yùn)行時(shí)無(wú)法改變?cè)撝?br />
常量可以定義為數(shù)值、布爾值或字符串等類型
const c_name [type] = value
const c_name1, c_name2 = value1, value2
const (
c_name1 = vluae1
c_name2 = value2
)
=右側(cè),必須為常量或常量表達(dá)式,如果使用到了函數(shù),必須為內(nèi)置函數(shù)(編譯期行為)
const i = 10000
說(shuō)明:
B.在定義常量數(shù)組時(shí),如果不提供初始化值,則表示與上行常量類型,值,完全相同
const (
a = "abc"
b
)
//則 b = "abc"
C.常量可以用len(), cap(), unsafe.Sizeof()常量計(jì)算表達(dá)式的值. 常量表達(dá)式中,函數(shù)必須是內(nèi)置函數(shù),否則編譯不過(guò)
package main
import "unsafe"
const (
a = "abc"
b = len(a)
c = unsafe.Sizeof(a)
)
func main(){
println(a, b, c)
}
結(jié)果: abc 3 16
枚舉
iota,特殊常量,可以認(rèn)為是一個(gè)可以被編譯器修改的常量
在每一個(gè)const關(guān)鍵字出現(xiàn)時(shí),被重置為0,然后再下一個(gè)const出現(xiàn)之前,每出現(xiàn)一次iota,其所代表的數(shù)字會(huì)自動(dòng)增加1
不提供初始值,則表示使用上一行的表達(dá)式
1.聲明:
iota生成從0開始的自動(dòng)增長(zhǎng)枚舉值,意味著,多一個(gè)枚舉值,iota+=1,無(wú)論是否使用
基本語(yǔ)法
const (
a = iota //0
b //1
c //2
)
const (
_ = iota
a //1
b //2
)
iota用法
}
const (
x = iota // 0
y = iota // 1
z = iota // 2
w //省略,默認(rèn)和前面一樣字面值 w = iota, 即3
)
const v = iota //遇到const關(guān)鍵字,iota重置
注意: 每行的變量數(shù)必須一致 const ( A, B = iota, iota C, D E, F )
//結(jié)果: 0 0 1 1 2 2 【各自增長(zhǎng)】
運(yùn)算符
Go運(yùn)算符全部是從左到右結(jié)合的
不支持運(yùn)算符重載
func main(){
i := 1
i ++
println(i)
b := i
println(b)
//syntax error: unexpected ++, expecting semicolon or newline or }
//c := i++
//意味著, ++/--不能出現(xiàn)在等號(hào)右側(cè)
}
指針
Go保留了指針, *T表示T對(duì)應(yīng)的指針類型
如果包含包名, 則應(yīng)該是 *.T
代表指針類型的符號(hào) '*' 總是和類型放在一起,而不是緊挨著變量名
同樣支持指針的指針**T
1.聲明
3.示例
type User struct {
Id int
Name string
}
func main(){
i := 100
var p *int = i //取地址
println(*p) //取值
up := User{1, "Jack"}
up.Id = 100 //直接取只針對(duì)想成員
fmt.Println(up)
u2 := *up //拷貝對(duì)象
u2.Name = "Tom"
fmt.Println(up, u2)
}
4.結(jié)果:
const (
i = 100 //首行必須有常量表達(dá)式
pi = 3.1415
)
var ( //全局變量可用,函數(shù)體內(nèi)不支持
i int
pi float32
)
標(biāo)簽:紹興 雅安 宜昌 七臺(tái)河 上海 盤錦 眉山 邢臺(tái)
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang學(xué)習(xí)筆記(二):類型、變量、常量》,本文關(guān)鍵詞 Golang,學(xué)習(xí),筆記,二,類型,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。