成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go語(yǔ)言基礎(chǔ)之結(jié)構(gòu)體(冬日篇)

開(kāi)發(fā) 后端
說(shuō)起繼承,學(xué)過(guò)Java,Python的肯定都不陌生,但是Go中,可沒(méi)有這個(gè)東西吶。那咋辦呢???,還是得用結(jié)構(gòu)體來(lái)實(shí)現(xiàn)。

[[355148]]

 前言

Hey,大家好呀,我是碼農(nóng),星期八,這是最后一次了,同樣也是Go面向?qū)ο蟮淖詈笠淮瘟恕?jiān)持住,一起看看看吧。

結(jié)構(gòu)體繼承

說(shuō)起繼承,學(xué)過(guò)Java,Python的肯定都不陌生,但是Go中,可沒(méi)有這個(gè)東西吶。

那咋辦呢???,還是得用結(jié)構(gòu)體來(lái)實(shí)現(xiàn)。

假裝我們都是男孩,喜歡車(chē),那我們就拿車(chē)來(lái)舉例子吧。

車(chē)結(jié)構(gòu)體

 

  1. //車(chē) 
  2. type Car struct { 
  3.     Brand  string //車(chē)品牌 
  4.     CarNum string //車(chē)牌號(hào) 
  5.     Tyre   int    //輪胎個(gè)數(shù) 
  6.  
  7. //給車(chē)綁定一個(gè)方法,說(shuō)明車(chē)的基本信息 
  8. func (this *Car) carInfo() { 
  9.     fmt.Printf("品牌:%s,車(chē)牌號(hào):%s,輪胎個(gè)數(shù):%d\n", this.Brand, this.CarNum, this.Tyre) 

寶馬車(chē)

//寶馬車(chē)

 

  1. //寶馬車(chē) 
  2. type BMWCar struct { 
  3.     //*Car和Car基本沒(méi)有區(qū)別,一個(gè)存的是整個(gè)結(jié)構(gòu)體,一個(gè)存的是結(jié)構(gòu)體地址,用法大同小異 
  4.     *Car //這就表示繼承了Car這個(gè)結(jié)構(gòu)體 

比亞迪車(chē)

  1. //比亞迪車(chē) 
  2. type BYDCar struct { 
  3.     *Car 

可能看到這,你會(huì)有種熟悉得感覺(jué),這不就是上節(jié)課所將的結(jié)構(gòu)體嵌套嗎???

這跟繼承有毛關(guān)系?

其實(shí)在Go中,結(jié)構(gòu)體既可以用來(lái)存儲(chǔ)數(shù)據(jù),也可以用來(lái)模仿對(duì)象的各種操作。

main代碼

 

  1. func main() { 
  2.     //一個(gè)寶馬對(duì)象 
  3.     var bmw1 = BMWCar{&Car{ 
  4.         Brand:  "寶馬x8", 
  5.         CarNum: "京666", 
  6.         Tyre:   4, 
  7. }} 
  8.     //一個(gè)比亞迪對(duì)象 
  9.     var byd1 = BYDCar{&Car{ 
  10.         Brand:  "比亞迪L3", 
  11.         CarNum: "京111", 
  12.         Tyre:   4, 
  13. }} 
  14.     //因?yàn)?nbsp;BMWCar 和 BYDCar 都繼承了Car,所以都有carInfo這個(gè)方法 
  15.     bmw1.carInfo() 
  16.     byd1.carInfo() 

執(zhí)行結(jié)果

這就是一個(gè)最簡(jiǎn)單的,面向?qū)ο螅渌Z(yǔ)言一樣,繼承會(huì)將所有的屬性和方法都繼承過(guò)來(lái)。

序列化

到此為止呢,結(jié)構(gòu)體基本可以告一段落了,基本算是入門(mén)了,當(dāng)然,并沒(méi)有結(jié)束,但是我想大家都累了,換個(gè)方向繼續(xù)玩。

這個(gè)東西叫做序列化,什么意思呢,就是像咱們的切片了,map了,結(jié)構(gòu)體了等,這些都是Go的類(lèi)型。

如果要和其他語(yǔ)言交流,人家可沒(méi)有這些玩意唉,那怎么辦呢???

眾多大佬就形成了一個(gè)規(guī)范,json數(shù)據(jù)格式,json數(shù)據(jù)必須是字符串類(lèi)型。

最外面是'號(hào),鍵/值對(duì)組合中的鍵名寫(xiě)在前面并用雙引號(hào)""包裹。

就像這樣。

  1. '{"Gender":"男","Name":"張三"}'    //'說(shuō)明這個(gè)是字符串,一般打印時(shí)不顯示 

序列化我們用到的是json模塊的Marshal方法。

切片序列化

單獨(dú)的切片序列化用的很少,但是仍然還是要知道。

示例代碼

 

  1. package main 
  2.  
  3. import ( 
  4.     "encoding/json" 
  5.     "fmt" 
  6.  
  7. type Student struct { 
  8.     Gender string 
  9.     Name   string 
  10.  
  11. func main() { 
  12.     var StudentList = []string{"張三", "李四"
  13.     fmt.Printf("StudentList類(lèi)型:%T\n", StudentList) //[]string,這是列表類(lèi)型 
  14.     serializeByte, err := json.Marshal(StudentList) 
  15.     if err != nil { 
  16.         fmt.Println("序列化失敗"
  17.         return 
  18.     var serializeStr = string(serializeByte) 
  19.     fmt.Printf("serializeStr類(lèi)型:%T\n", serializeStr) //string,這是字符串類(lèi)型 
  20.     fmt.Printf("serializeStr值:%v\n", serializeStr) //["張三""李四"

第16行代碼將切片序列化,但是返回的是[]byte類(lèi)型,第21行代碼將[]byte類(lèi)型轉(zhuǎn)成字符串。

執(zhí)行結(jié)果

map序列化

字典序列化,就比較有味道了,序列化的是一個(gè)標(biāo)準(zhǔn)的json數(shù)據(jù)格式。

示例代碼

 

  1. package main 
  2.  
  3. import ( 
  4.     "encoding/json" 
  5.     "fmt" 
  6.  
  7. type Student struct { 
  8.     Gender string 
  9.     Name   string 
  10.  
  11. func main() { 
  12.     var StudentInfo = map[string]string{ 
  13.         "Name":"張三", 
  14.         "Age":"18", 
  15.         "Gender":"男", 
  16.     fmt.Printf("StudentInfo類(lèi)型:%T\n",StudentInfo) 
  17.     serializeByte, err := json.Marshal(StudentInfo) 
  18.     if err != nil { 
  19.         fmt.Println("序列化失敗"
  20.     var serializeStr = string(serializeByte) 
  21.     fmt.Printf("serializeStr類(lèi)型:%T\n", serializeStr) //string,這是字符串類(lèi)型 
  22.     fmt.Printf("serializeStr值:%v\n", serializeStr) //{"Age":"18""Gender":"男""Name":"張三"

執(zhí)行結(jié)果

這個(gè)就有點(diǎn)像標(biāo)準(zhǔn)的json格式了。

結(jié)構(gòu)體序列化

結(jié)構(gòu)體代碼

 

  1. type Student struct { 
  2.     Name   string 
  3.     Gender string 
  4.     Age    int 

main

 

  1. func main() { 
  2.   var s1 = Student{ 
  3.     Name:   "張三", 
  4.     Gender: "男", 
  5.     Age:    18, 
  6.   } 
  7.   fmt.Printf("StudentInfo類(lèi)型:%T\n", s1) 
  8.   serializeByte, err := json.Marshal(s1) 
  9.   if err != nil { 
  10.     fmt.Println("序列化失敗"
  11.   } 
  12.   var serializeStr = string(serializeByte) 
  13.   fmt.Printf("serializeStr類(lèi)型:%T\n", serializeStr) //string,這是字符串類(lèi)型 
  14.   fmt.Printf("serializeStr值:%v\n", serializeStr) 

執(zhí)行結(jié)果

切片套結(jié)構(gòu)體

一般情況下,這種方式數(shù)據(jù)格式是用的比較多的。

當(dāng)然, 還可以切片嵌套map,方法和此方法一樣,不做例子了。

示例代碼

 

  1. package main 
  2.  
  3. import ( 
  4.   "encoding/json" 
  5.   "fmt" 
  6.  
  7. type Student struct { 
  8.   Name   string 
  9.   Gender string 
  10.   Age    int 
  11.  
  12. func main() { 
  13.   var s1 = Student{ 
  14.     Name:   "張三", 
  15.     Gender: "男", 
  16.     Age:    18, 
  17.   } 
  18.   var s2 = Student{ 
  19.     Name:   "李四", 
  20.     Gender: "女", 
  21.     Age:    16, 
  22.   } 
  23.   //一個(gè)存放 Student 的列表 
  24.   var studentList = []Student{s1, s2} 
  25.   fmt.Printf("StudentInfo類(lèi)型:%T\n", studentList) 
  26.   serializeByte, err := json.Marshal(studentList) //main.Student 
  27.   if err != nil { 
  28.     fmt.Println("序列化失敗"
  29.   } 
  30.   var serializeStr = string(serializeByte) 
  31.   fmt.Printf("serializeStr類(lèi)型:%T\n", serializeStr) //string,這是字符串類(lèi)型 
  32.   fmt.Printf("serializeStr值:%v\n", serializeStr)   

執(zhí)行結(jié)果

結(jié)構(gòu)體標(biāo)簽(Tag)

Tag可以理解為結(jié)構(gòu)體的說(shuō)明,由一對(duì)反引號(hào)包裹起來(lái)。

但是一般情況下,Tag在序列化是用的比較多。

結(jié)構(gòu)體代碼

 

  1. type Student struct { 
  2.   Name   string `json:"name"
  3.   Gender string `json:"gender"
  4.   Age    int    `json:"age"

每個(gè)字段后面跟的,就是Tag,一定不要把格式搞錯(cuò)啦。

main代碼

 

  1. func main() { 
  2.   var s1 = Student{ 
  3.     Name:   "張三", 
  4.     Gender: "男", 
  5.     Age:    18, 
  6.   } 
  7.   fmt.Printf("StudentInfo類(lèi)型:%T\n", s1) 
  8.   serializeByte, err := json.Marshal(s1) //main.Student 
  9.   if err != nil { 
  10.     fmt.Println("序列化失敗"
  11.   } 
  12.   var serializeStr = string(serializeByte) 
  13.   fmt.Printf("serializeStr類(lèi)型:%T\n", serializeStr) //string,這是字符串類(lèi)型 
  14.   fmt.Printf("serializeStr值:%v\n", serializeStr)   

執(zhí)行結(jié)果

可以發(fā)現(xiàn)key成小寫(xiě)的了,這就說(shuō)明一個(gè)問(wèn)題。

在序列化時(shí),如果結(jié)構(gòu)體有json這個(gè)Tag,序列化時(shí)就會(huì)以jsonTag為準(zhǔn),如果沒(méi)有jsonTag,則以結(jié)構(gòu)體字段為準(zhǔn)。

總結(jié)

上述我們學(xué)習(xí)了Go基礎(chǔ)之結(jié)構(gòu)體的結(jié)構(gòu)體繼承,序列化,結(jié)構(gòu)體標(biāo)簽。學(xué)完Go的結(jié)構(gòu)體,可能你也知道了在Go中是如何模仿面向?qū)ο罅恕?/p>

一定記得多多實(shí)踐,多多敲代碼。如果在操作過(guò)程中有任何問(wèn)題,記得下面討論區(qū)留言,我們看到會(huì)第一時(shí)間解決問(wèn)題。

我是碼農(nóng)星期八,如果覺(jué)得還不錯(cuò),記得動(dòng)手點(diǎn)贊一下哈。感謝你的觀看。

本文轉(zhuǎn)載自微信公眾號(hào)「Go語(yǔ)言進(jìn)階學(xué)習(xí)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go語(yǔ)言進(jìn)階學(xué)習(xí)公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2020-11-23 08:54:14

Go語(yǔ)言結(jié)構(gòu)體

2020-11-30 06:17:03

Go語(yǔ)言

2020-11-26 06:40:24

Go語(yǔ)言基礎(chǔ)

2020-12-20 09:59:13

Go語(yǔ)言基礎(chǔ)技術(shù)

2020-12-02 09:10:22

Go結(jié)構(gòu)數(shù)據(jù)類(lèi)型

2023-07-29 15:03:29

2021-04-20 09:00:48

Go 語(yǔ)言結(jié)構(gòu)體type

2020-10-22 08:33:22

Go語(yǔ)言

2020-11-11 10:52:54

Go語(yǔ)言C語(yǔ)言

2020-11-05 09:58:16

Go語(yǔ)言Map

2020-12-16 08:07:28

語(yǔ)言基礎(chǔ)反射

2020-12-23 08:39:11

Go語(yǔ)言基礎(chǔ)技術(shù)

2022-02-16 10:03:06

對(duì)象接口代碼

2021-06-09 09:06:52

Go語(yǔ)言算法

2021-02-06 18:19:54

TimeGo語(yǔ)言

2020-12-07 05:59:02

語(yǔ)言Go接口

2021-01-13 08:40:04

Go語(yǔ)言文件操作

2021-10-30 10:43:04

語(yǔ)言Go函數(shù)

2021-11-03 10:02:07

Go基礎(chǔ)函數(shù)

2021-10-09 07:10:31

Go語(yǔ)言基礎(chǔ)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品9999| 欧美aaa一级片 | 久草视频在线播放 | 亚洲国产成人av好男人在线观看 | 久久精品99久久 | 免费毛片网 | 日本精a在线观看 | 国产网站久久 | 99成人| 欧日韩在线 | 国产精品成人品 | 高清国产一区二区 | 亚洲一区日韩 | av资源网站 | 黄色毛片一级 | 亚洲国产精品久久久久 | 亚洲精品久久嫩草网站秘色 | 国产成人精品一区二 | 精品一区二区电影 | 性高湖久久久久久久久aaaaa | 国产成人99久久亚洲综合精品 | 欧美一区二区三区视频 | 99热在线观看精品 | 欧美在线精品一区 | 中文字幕在线第一页 | 国产日韩精品久久 | 产真a观专区 | 国产一区二区免费 | 免费观看黄a一级视频 | 欧美一级片在线 | 国产高清视频在线观看 | 99小视频 | 中文字幕一区二区三区四区五区 | 中文字幕精品一区久久久久 | 毛片一区二区三区 | 午夜免费福利片 | 欧美视频一级 | 99精品在线免费观看 | 日韩国产在线 | 亚洲视频中文字幕 | 黄色在线免费观看视频 |