<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
型別 | 名稱 | 長度 | 預設值 | 說明 |
---|---|---|---|---|
pointer | 指標 | nil | ||
array | 陣列 | 0 | ||
slice | 切片 | nil | 引⽤型別 | |
map | 字典 | nil | 引⽤型別 | |
struct | 結構體 |
如果要儲存班級裡所有學生的數學成績,應該怎樣儲存呢?可能有同學說,通過定義變數來儲存。但是,問題是班級有80個學生,那麼要定義80個變數嗎?
像以上情況,最好是通過陣列的方式來儲存。
所謂的陣列:是指一系列同一型別資料的集合。
var a [10]int
陣列定義也是通過var關鍵字,後面是陣列的名字a,長度是10,型別是整型。表示:陣列a能夠儲存10個整型數位。也就是說,陣列a的長度是10。
我們可以通過len( )函數測試陣列的長度,如下所示:
var a [10]int fmt.Println(len(a)) //10
當定義完成陣列a後,就在記憶體中開闢了10個連續的儲存空間,每個資料都儲存在相應的空間內,陣列中包含的每個資料被稱為陣列元素(element),一個陣列包含的元素個數被稱為陣列的長度。
注意:陣列的長度只能是常數。以下定義是錯誤的:
var n int = 10 var a [n]int
package main import "fmt" func main(){ // 1.定義結構體 type Student struct{ id int name string age int addr string } //2.結構體初始化1,值的順序與結構體成員的順序保持一致 chary := Student{1,"chary",18,"上海"} fmt.Println(chary) //{1 chary 18 上海} //2.結構體初始化2,沒有初始化的成員自動賦值0 jeff := Student{name:"jeff"} //{0 jeff 0 } fmt.Println(jeff) //3.成員使用 chary.id = 100 //修改 fmt.Println(chary.id ) //4.結構體比較,兩個結構體可以使用 == 或 != 運運算元進行比較,但不支援 > 或 <。 fmt.Println(jeff==chary) //false //5.同型別的兩個結構體變數可以相互賦值。 var user Student user = jeff fmt.Println(user) //{0 jeff 0 } }
一般情況下,定義結構體的時候是欄位名與其型別一一對應,實際上Go支援只提供型別,而不寫欄位名的方式,也就是匿名欄位,也稱為嵌入欄位。
當匿名欄位也是一個結構體的時候,那麼這個結構體所擁有的全部欄位都被隱式地引入了當前定義的這個結構體。
//人 type Person struct { name string sex byte age int } //學生 type Student struct { Person //匿名欄位,那麼預設Student就包含了Person的所有欄位 id int addr string }
//人 type Person struct { name string sex byte age int } //學生 type Student struct { Person//匿名欄位,那麼預設Student就包含了Person的所有欄位 id int addr string } func main() { //順序初始化 s1 := Student{Person{"mike",'m',18},1,"sz"} //s1 = {Person:{name:mike sex:109 age:18}id:1 addr:sz} fmt.Printf("s1=%+vn",s1) //s2 := Student{"mike",'m',18,1,"sz"}//err //部分成員初始化1 s3 := Student{Person:Person{"lily",'f',19},id:2} //s3 = {Person:{name:lily sex:102 age:19}id:2 addr:} fmt.Printf("s3=%+vn",s3) //部分成員初始化2 s4 := Student{Person:Person{name:"tom"},id:3} //s4 = {Person:{name:tomsex:0age:0}id:3addr:} fmt.Printf("s4=%+vn",s4) }
var s1 Student//變數宣告 //給成員賦值 s1.name = "mike"//等價於s1.Person.name="mike" s1.sex = 'm' s1.age = 18 s1.id = 1 s1.addr = "sz" fmt.Println(s1) //{{mike 109 18}1 sz} var s2 Student//變數宣告 s2.Person = Person{"lily",'f',19} s2.id = 2 s2.addr = "bj" fmt.Println(s2) //{{lily 102 19}2 bj}
//人 type Person struct{ name string sex byte age int } //學生 type Student struct{ Person //匿名欄位,那麼預設Student就包含了Person的所有欄位 id int addr string name string //和Person中的name同名 } func main(){ var s Student//變數宣告 //給Student的name,還是給Person賦值? s.name = "mike" //{Person:{name:sex:0age:0}id:0addr:name:mike} fmt.Printf("%+vn",s) //預設只會給最外層的成員賦值 //給匿名同名成員賦值,需要顯示呼叫 s.Person.name = "yoyo" //Person:{name:yoyosex:0age:0}id:0addr:name:mike} fmt.Printf("%+vn",s) }
所有的內建型別和自定義型別都是可以作為匿名欄位的:
type mystr string//自定義型別 type Person struct { name string sex byte age int } type Student struct { Person //匿名欄位,結構體型別 int //匿名欄位,內建型別 mystr //匿名欄位,自定義型別 } func main() { //初始化 s1 := Student{Person{"mike",'m',18},1,"bj"} //{Person:{name:mikesex:109age:18}int:1mystr:bj} fmt.Printf("%+vn",s1) //成員的操作,列印結果:mike,m,18,1,bj fmt.Printf("%s,%c,%d,%d,%sn",s1.name,s1.sex,s1.age,s1.int,s1.mystr) }
type Person struct { //人 name string sex byte age int } type Student struct {//學生 *Person //匿名欄位,結構體指標型別 id int addr string } func main() { //初始化 s1 := Student{&Person{"mike",'m',18},1,"bj"} //{Person:0xc0420023e0id:1addr:bj} fmt.Printf("%+vn",s1) //mike,m,18 fmt.Printf("%s,%c,%dn",s1.name,s1.sex,s1.age) //宣告變數 var s2 Student s2.Person = new(Person)//分配空間 s2.name = "yoyo" s2.sex = 'f' s2.age = 20 s2.id = 2 s2.addr = "sz" //yoyo10220220 fmt.Println(s2.name,s2.sex,s2.age,s2.id,s2.age) }
package main import ( "fmt" "sync" ) type UserAges struct { ages map[string] int sync.Mutex } func (u *UserAges)Add(name string,age int) { u.Lock() defer u.Unlock() u.ages[name] = age } func (u *UserAges)Get(name string)int{ if age,ok:=u.ages[name];ok{ return age } return -1 } func main() { dic:=make(map[string]int) dic["age"] = 18 r:=UserAges{ages: dic} r.Add("jeff",20) fmt.Println(r) age:=r.Get("age") fmt.Println(age) }
以上就是go語言陣列及結構體繼承和初始化範例解析的詳細內容,更多關於go語言陣列及結構體繼承和初始化的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45