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

Go語言基礎之結構體(冬日篇)

開發 后端
說起繼承,學過Java,Python的肯定都不陌生,但是Go中,可沒有這個東西吶。那咋辦呢???,還是得用結構體來實現。

[[355148]]

 前言

Hey,大家好呀,我是碼農,星期八,這是最后一次了,同樣也是Go面向對象的最后一次了。堅持住,一起看看看吧。

結構體繼承

說起繼承,學過Java,Python的肯定都不陌生,但是Go中,可沒有這個東西吶。

那咋辦呢???,還是得用結構體來實現。

假裝我們都是男孩,喜歡車,那我們就拿車來舉例子吧。

車結構體

 

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

寶馬車

//寶馬車

 

  1. //寶馬車 
  2. type BMWCar struct { 
  3.     //*Car和Car基本沒有區別,一個存的是整個結構體,一個存的是結構體地址,用法大同小異 
  4.     *Car //這就表示繼承了Car這個結構體 

比亞迪車

  1. //比亞迪車 
  2. type BYDCar struct { 
  3.     *Car 

可能看到這,你會有種熟悉得感覺,這不就是上節課所將的結構體嵌套嗎???

這跟繼承有毛關系?

其實在Go中,結構體既可以用來存儲數據,也可以用來模仿對象的各種操作。

main代碼

 

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

執行結果

這就是一個最簡單的,面向對象,跟其他語言一樣,繼承會將所有的屬性和方法都繼承過來。

序列化

到此為止呢,結構體基本可以告一段落了,基本算是入門了,當然,并沒有結束,但是我想大家都累了,換個方向繼續玩。

這個東西叫做序列化,什么意思呢,就是像咱們的切片了,map了,結構體了等,這些都是Go的類型。

如果要和其他語言交流,人家可沒有這些玩意唉,那怎么辦呢???

眾多大佬就形成了一個規范,json數據格式,json數據必須是字符串類型。

最外面是'號,鍵/值對組合中的鍵名寫在前面并用雙引號""包裹。

就像這樣。

  1. '{"Gender":"男","Name":"張三"}'    //'說明這個是字符串,一般打印時不顯示 

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

切片序列化

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

示例代碼

 

  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類型:%T\n", StudentList) //[]string,這是列表類型 
  14.     serializeByte, err := json.Marshal(StudentList) 
  15.     if err != nil { 
  16.         fmt.Println("序列化失敗"
  17.         return 
  18.     var serializeStr = string(serializeByte) 
  19.     fmt.Printf("serializeStr類型:%T\n", serializeStr) //string,這是字符串類型 
  20.     fmt.Printf("serializeStr值:%v\n", serializeStr) //["張三""李四"

第16行代碼將切片序列化,但是返回的是[]byte類型,第21行代碼將[]byte類型轉成字符串。

執行結果

map序列化

字典序列化,就比較有味道了,序列化的是一個標準的json數據格式。

示例代碼

 

  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類型:%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類型:%T\n", serializeStr) //string,這是字符串類型 
  22.     fmt.Printf("serializeStr值:%v\n", serializeStr) //{"Age":"18""Gender":"男""Name":"張三"

執行結果

這個就有點像標準的json格式了。

結構體序列化

結構體代碼

 

  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類型:%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類型:%T\n", serializeStr) //string,這是字符串類型 
  14.   fmt.Printf("serializeStr值:%v\n", serializeStr) 

執行結果

切片套結構體

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

當然, 還可以切片嵌套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.   //一個存放 Student 的列表 
  24.   var studentList = []Student{s1, s2} 
  25.   fmt.Printf("StudentInfo類型:%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類型:%T\n", serializeStr) //string,這是字符串類型 
  32.   fmt.Printf("serializeStr值:%v\n", serializeStr)   

執行結果

結構體標簽(Tag)

Tag可以理解為結構體的說明,由一對反引號包裹起來。

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

結構體代碼

 

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

每個字段后面跟的,就是Tag,一定不要把格式搞錯啦。

main代碼

 

  1. func main() { 
  2.   var s1 = Student{ 
  3.     Name:   "張三", 
  4.     Gender: "男", 
  5.     Age:    18, 
  6.   } 
  7.   fmt.Printf("StudentInfo類型:%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類型:%T\n", serializeStr) //string,這是字符串類型 
  14.   fmt.Printf("serializeStr值:%v\n", serializeStr)   

執行結果

可以發現key成小寫的了,這就說明一個問題。

在序列化時,如果結構體有json這個Tag,序列化時就會以jsonTag為準,如果沒有jsonTag,則以結構體字段為準。

總結

上述我們學習了Go基礎之結構體的結構體繼承,序列化,結構體標簽。學完Go的結構體,可能你也知道了在Go中是如何模仿面向對象了。

一定記得多多實踐,多多敲代碼。如果在操作過程中有任何問題,記得下面討論區留言,我們看到會第一時間解決問題。

我是碼農星期八,如果覺得還不錯,記得動手點贊一下哈。感謝你的觀看。

本文轉載自微信公眾號「Go語言進階學習」,可以通過以下二維碼關注。轉載本文請聯系Go語言進階學習公眾號。

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2020-11-30 06:17:03

Go語言

2020-11-26 06:40:24

Go語言基礎

2020-11-23 08:54:14

Go語言結構體

2020-12-20 09:59:13

Go語言基礎技術

2020-12-02 09:10:22

Go結構數據類型

2023-07-29 15:03:29

2021-04-20 09:00:48

Go 語言結構體type

2020-11-05 09:58:16

Go語言Map

2020-12-16 08:07:28

語言基礎反射

2020-12-23 08:39:11

Go語言基礎技術

2022-02-16 10:03:06

對象接口代碼

2020-10-22 08:33:22

Go語言

2020-11-11 10:52:54

Go語言C語言

2021-06-09 09:06:52

Go語言算法

2021-02-06 18:19:54

TimeGo語言

2021-10-09 07:10:31

Go語言基礎

2022-04-27 10:01:43

切片Go封裝

2020-10-23 08:38:19

Go語言

2020-10-25 07:33:13

Go語言

2020-12-09 09:59:32

Go語言技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美综合精品另类天天更新 | 超碰最新在线 | 久久小视频 | 欧美精品一区在线发布 | www狠狠干 | 欧美国产日本一区 | 国产视频精品免费 | 高清一区二区 | 日本免费一区二区三区 | 一区二区三区四区电影视频在线观看 | 中文字幕欧美一区二区 | 日韩免费av网站 | 亚洲一区成人 | 91精品国产综合久久久久久 | 日韩高清不卡 | 精品视频一区二区三区在线观看 | 久久精品97| 九九久久久 | 午夜精品久久久久久久久久久久久 | 免费观看羞羞视频网站 | 国产欧美日韩一区二区三区在线 | 99精品在线观看 | 99亚洲视频 | 午夜久久久久久久久久一区二区 | 日韩视频在线播放 | 国产精品一区久久久 | 在线观看日本高清二区 | 在线精品观看 | 激情网站在线 | 一级片av | 韩日一区二区三区 | 精区3d动漫一品二品精区 | 成人中文网 | 亚洲免费在线 | 久久一二三区 | 伦理二区 | 羞羞视频在线观看免费观看 | 99热最新网址 | 国产视频一视频二 | 国产原创在线观看 | 欧美综合一区二区 |