Go 语言数据类型
變量與常量
變量聲明 ,初始化與賦值
單個(gè)變量聲明和賦值
1)變量的聲明格式:var <變量名稱>【變量類型】
2)變量的賦值格式:<變量名稱> =< 值 ,表達(dá)式,函數(shù)等>
3)聲明和賦值同時(shí)進(jìn)行:var <變量名稱>【變量類型】=<值,表達(dá)式,函數(shù)等>
4)分明聲明格式:
var(
i int
j float 32
name string
)
a.同一行聲明多個(gè)變量和賦值:var a,b,c int=1,2,3 或者a,b :=1,2
b.全局變量的聲明必須使用var 關(guān)鍵詞,局部變量則可以省略,比如a.里面a,b :=1,2只能用到函數(shù)內(nèi)
c,特殊變量下劃線“_” 這里的_就是個(gè)垃圾桶,把值扔進(jìn)了垃圾桶后,程序中再不用這個(gè)值相當(dāng)于php里的unset
變量的類型轉(zhuǎn)換
1)GO中不存在隱式轉(zhuǎn)換,類型轉(zhuǎn)換必須是顯式的(必須要有目標(biāo)類型)
2)類型轉(zhuǎn)換只能發(fā)生在兩種兼容類型之間(int和bool之間是沒法轉(zhuǎn)換的)
3)類型轉(zhuǎn)換格式:<變量名稱>[:]=<目標(biāo)類型>(<需要轉(zhuǎn)換的變量>)
變量可見性規(guī)則
1)大寫字母開頭的變量是可導(dǎo)出的,也就是其他包可以讀取的,是公用變量
2)小寫字母開頭的就是不可導(dǎo)出的,是私有變量
test.go
package wangwawaimport "fmt"var Name string = "wawa"; //變量名首字母大寫,可被其他包引用func init() {fmt.Println("this is wangwawa test") } func Test() {}varTest.go
//程序所屬包 *必須package main//導(dǎo)入依賴包import ("fmt""reflect""unsafe""awesomeProject/wangwawa" )var a intvar b int = 12345;var (c intd int = 1234e string ) var i,g,h int=4,5,6 var w,v,m =4,5.2,6 //類型可不寫,不寫就默認(rèn)電腦位數(shù)類型//main函數(shù) func main(){fmt.Println(wangwawa.Name)ww,www,wwww := 4,5.2,6 //這種寫法只能在函數(shù)內(nèi)var k,_,kk = 3,4.4,4 //_代表放棄,垃圾桶var (f string)var n int =3nn := float32(n)fmt.Println(nn)fmt.Println(reflect.TypeOf(nn))fmt.Println(unsafe.Sizeof(nn))fmt.Println(a) //int默認(rèn)值為0a = 123;fmt.Println(a)fmt.Println(b)fmt.Println(c)fmt.Println(d)fmt.Println(e) //string默認(rèn)值為空fmt.Println(f)fmt.Println(i)fmt.Println(h)fmt.Println(g)fmt.Println(w)fmt.Println(reflect.TypeOf(w))fmt.Println(v)fmt.Println(reflect.TypeOf(v))fmt.Println(m)fmt.Println(ww)fmt.Println(www)fmt.Println(wwww)fmt.Println(k)fmt.Println(kk) }運(yùn)行結(jié)果:
this is wangwawa test
wawa
3
float32
4
0
123
12345
0
1234
4
6
5
4
int
5.2
float64
6
4
5.2
6
3
4
?
常量,常量聲明和iota的使用
1)常量定義形式和常量類型范圍
a.常量定義形式上可分為顯式和隱式
顯式:const identifier? [type] = value
隱式:const identifier = value (通常叫無類型常量)
b.常量可以使用內(nèi)置表達(dá)式定義,例如:len(),unsafe.Sizeof()等
c.常量范圍目前只支持布爾型、數(shù)字型(整數(shù),浮點(diǎn)和復(fù)數(shù))和字符串型
constTest.go
//程序所屬包 *必須 package mainimport ("fmt""reflect" )const name string = "wawa";const w_name = "wawa";const (title = "test"dog string = "dog" )const names,code = "wawa",0 const aname = len(dog)//表達(dá)式 這里的函數(shù)只能是內(nèi)置函數(shù),其他自定義的會(huì)報(bào)錯(cuò)//第二個(gè)()是返回類型 func ic(g string)(string) {return "11" } //main函數(shù) func main(){fmt.Println(ic(w_name))fmt.Println(name)fmt.Println(w_name)fmt.Println(title)fmt.Println(dog)fmt.Println(names)fmt.Println(reflect.TypeOf(names))fmt.Println(code)fmt.Println(reflect.TypeOf(code))fmt.Println(aname) }運(yùn)行結(jié)果:
11
wawa
wawa
test
dog
wawa
string
0
int
3
2)特別常量iota的使用
a. iota在const關(guān)建字出現(xiàn)時(shí)將被重置為0
b. const中每新增一行常量聲明將使iota計(jì)算一次
c.iota常見使用法:
1.跳值使用法
2.插隊(duì)使用法
3.表達(dá)式隱式使用法
4.單行使用法
iota不可以用于函數(shù)內(nèi)
iotaTest.go
//程序所屬包 *必須package main//導(dǎo)入依賴包import ("fmt" ) const a = iota const (d = iota //0b = iota //1_ //垃圾桶,跳過2_ //垃圾桶,跳過3c = iota //4e = 3.14 //中間把5插一個(gè)進(jìn)來成3.14f = iota //6g = iota * 2 //7 7*2h //省略 iota寫法,自動(dòng)引用最上面非空表達(dá)式 8*2i //省略 iota寫法,自動(dòng)引用最上面非空表達(dá)式 9*2j = iota //10k,l = iota+1, iota+3 //12 14m,n //13 15 m引用的k,n引用的是lo = iota //13 ) //main函數(shù) func main(){fmt.Println(a)fmt.Println(d)fmt.Println(b)fmt.Println(c)fmt.Println(e)fmt.Println(f)fmt.Println(g)fmt.Println(h)fmt.Println(i)fmt.Println(j)fmt.Println(k)fmt.Println(l)fmt.Println(m)fmt.Println(n)fmt.Println(o) }運(yùn)行結(jié)果:
0
0
1
4
3.14
6
14
16
18
10
12
14
13
15
13
?
?
總結(jié)
- 上一篇: GO语言基础语法
- 下一篇: 沿正方体一条棱剪开,不剪散,观察展开图,