日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go 面向对象之结构体

發布時間:2025/3/20 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go 面向对象之结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#### Go 面向對象之結構體
最近有四天沒更新公眾號,有一些事情耽誤了,生活就是這樣,總會一些事情讓人措不及防;
***山濃水淺,坐看流年***

1. Go 也支持面向對象編程(OOP) 但是它和傳統的面向對象編程還是有一些區別,并不是純粹的面向對象編程;
2. Go 中沒有類(class), Go 中struct 和其它編程語言中的類有同等地位,所以我們可以理解Go 是基于struct 來實現OOP;
3. Go 面向對象很簡潔,沒有傳統OOP 的繼承,方法重載,構造函數等等;
4. Go 面向對象仍有繼承,封裝,多態的特性,只是它的實現與傳統的OOP語言不同;
##### 結構體與結構體變量(實例/對象)的關系圖


---
說明:
1. 將一類事物的特性提取出來(比如貓類),形成一個新的數據類型就是一個結構體;
2. 通過這個結構體,可以創建多個變量(實例/對象);
3. 事物可以是貓類,也可以是其它的類...;
案例: package mainimport "fmt"// 定義一個結構體,類似于類 // 將Cat 的各個字段/屬性,放入到結構體中 type Cat struct {Name stringAge uintColor stringHobby string } func main(){// 聲明一個Cat 變量,也就是實例var a1 Cata1.Name = "小花"a1.Age = 2a1.Color = "black"a1.Hobby = "老鼠"fmt.Println(a1)fmt.Printf("name=%s\n",a1.Name)fmt.Printf("age=%d\n",a1.Age)fmt.Printf("color=%s\n",a1.Color)fmt.Printf("hobby=%s\n",a1.Hobby) }

  


---
結構體與結構體變量(實例)的區別
1. 結構體是自定義的數據類型,代表一類事物;
2. 結構體變量是具體的,實際的,代表一個具體的變量;
---
##### 結構體變量在內存中的布局



##### 如何聲明結構體
基本語法:
type 結構體名稱 struct {
field1 type
field2 type
...
}
例如:
typt Person struct {
Name string
Age int
Class string
}
##### 字段屬性
字段是結構體的組成部分,一般是基本數據類型,數組,同時也可以是引用類型;
注意事項:
1. 字段聲明語法同變量一樣: 字段名 字段類型
2. 在創建一個結構體變量后,如果沒有給字段賦值,每個字段都對應一個默認值,引用類型默認值為nil;
3. 不同結構體變量的字段是獨立的,互不影響: 結構體是值類型; package mainimport "fmt"// 如果結構體里的字段是引用類型的: slice map channel; // 在使用前需要make分配內存才能使用; type Person struct {Name stringAge intHobby [3]stringptr *stringslice []intParents map[string]string } type Cat struct {Name stringAge int } func main(){var a1 Personfmt.Println(a1) //{0 [] nil [] map[]}if a1.ptr == nil {fmt.Println("ptr is nil")}if a1.slice == nil {fmt.Println("slice is nil")}if a1.Parents == nil {fmt.Println("parents is nil")}// 結構體字段是引用類型的話,使用前需要makea1.slice = make([]int,10)a1.slice[0] = 1a1.slice[1] = 2a1.slice[2] = 3a1.Parents = make(map[string]string)a1.Parents["name"] = "aaaa"a1.Parents["friendly"] = "father"fmt.Println(a1) // { 0 [ ] <nil> [1 2 3 0 0 0 0 0 0 0] map[friendly:father name:aaaa]}// 不同結構體變量間互不影響var c1 Catvar c2 Catc1.Name = "c1"c2.Name = "c2"c1.Age = 1c2.Age = 2fmt.Println(c1,c2) //{c1 1} {c2 2} }

  


---
##### 創建結構變量和訪問結構體字段 package mainimport "fmt"type Cat struct {Name stringAge int } func main(){// 方式1: 先聲明,再賦值var c1 Catc1.Name = "c1"c1.Age = 1fmt.Println(c1) //{c1 1}// 方式2: 字面量方式var c2 Cat = Cat{"c2",2}fmt.Println(c2) //{c2 2}// 方式3: 類型推導方式c3 := Cat{"c3",3}fmt.Println(c3) //{c3 3}// 方式4: new 方式var c4 *Cat = new(Cat)c4.Name = "c4"c4.Age = 4fmt.Println(*c4)// 方式5: &{} 方式var c5 *Cat = &Cat{}c5.Name = "c5"c5.Age = 5fmt.Println(*c5)// 方式4,方式5 返回的都是結構體的指針類型 }

  


1. 第4,5 種方式返回的是***結構體指針***;
2. 結構體指針訪問字段的標準方式應該是:(*結構體指針).字段名, 如:(*c4).Name = "c4";
3. Go 做了簡化,支持***結構體指針.字段名***,如:c4.Name = "c4",Go 編譯器底層自動處理了;
---
##### 結構體使用注意事項
1. 結構體中所有的字段在內存中是連續的;
2. 結構體是用戶自定義的類型,在和其它類型轉換時需要有完全相同的字段(名稱,個數,類型);
3. 結構體進行type 定義,Go 認為是新的數據類型,可以和基本數據類型進行強轉;
4. 結構體每個字段上可以寫tag,tag 可以通過反射機制獲取,常用的場景是序列化和反序列化; package mainimport ("encoding/json""fmt" )type Person struct {Name stringAge intHobby string } type Student struct {Name stringAge intHobby string } type Cat struct {Name string `json:"name"`Age int `json:"age"` } func main(){var p1 Personp1.Name = "p1"p1.Age = 22p1.Hobby = "run"// 結構體變量的地址fmt.Printf("p1 address: %p\n",&p1)fmt.Printf("p1.Name address: %p\n",&p1.Name) // 0xc0000562d0fmt.Printf("p1.Age address: %p\n",&p1.Age) // 0xc0000562e0 , 一個string 是16 字節fmt.Printf("p1.Hobby address: %p\n",&p1.Hobby)//0xc0000562e8 , 一個int 在64 位系統中為8字節// 類型之間強轉var s1 Students1 = Student(p1)fmt.Println(s1)fmt.Printf("s1 type is %T\n",s1) // Student// struct tagvar c1 Catc1.Name = "小花"c1.Age = 12jsonStr,err := json.Marshal(c1)if err != nil {fmt.Println(err)}// 輸出的是結構體中tag 定義的名稱fmt.Println(string(jsonStr)) // {"name":"小花","age":12} }

  個人微信公眾號上有最新內容,歡迎關注交流學習

轉載于:https://www.cnblogs.com/Mail-maomao/p/11458935.html

總結

以上是生活随笔為你收集整理的Go 面向对象之结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无码国精品一区二区免费蜜桃 | 国产精品呻吟久久 | 亚洲欧美日本国产 | 97精品在线 | 国产在线免费av | 美女毛片网站 | 欧美日韩网址 | 99免费在线视频 | 国产无遮挡又黄又爽又色 | 成人精品视频在线 | 91亚洲专区| 浪漫樱花动漫在线观看免费 | 精品人妻一区二区三区含羞草 | 男人插入女人下面的视频 | 精品1区2区| 亚洲国产成人精品激情在线 | 国产乱码精品一区二三赶尸艳谈 | 日本韩国免费观看 | 亚洲成人一级片 | 男女野外做受全过程 | 天天碰天天 | 亚洲色图导航 | 女人扒开腿让男人桶爽 | 久久人人艹 | 风间由美在线视频 | 欧美视频在线观看一区二区三区 | 四虎av在线播放 | 亚洲视频在线观看免费 | 欧美日本色| 久久国产精品影视 | 中文字幕一区二区三区免费看 | 中文在线观看免费网站 | 天天操天天透 | 天天操欧美 | 日韩一级性 | аⅴ资源中文在线天堂 | 久在线视频 | 正在播放老肥熟妇露脸 | 激情视频免费在线观看 | av片免费在线播放 | 久久久www成人免费毛片 | 99re8在线精品视频免费播放 | 中文字幕欧美另类精品亚洲 | 麻豆久久久久久 | 激情欧美一区二区三区 | 在线观看av国产一区二区 | 国产欧美日韩一区二区三区 | 国产视频一区在线观看 | 综合网av | 中文字幕无码人妻少妇免费 | 亚洲国产精品无码久久久 | 大粗鳮巴久久久久久久久 | 色婷婷91 | 日韩精品一区二区三区国语自制 | 五月婷综合网 | 久久精品aaaaaa毛片 | 午夜国产一级 | 看免费黄色大片 | 欧美精品导航 | 邻居校草天天肉我h1v1 | 在线视频观看一区 | 欧美在线影院 | 亚洲午夜一区二区 | 人妖交videohd另类 | 日韩视频区 | 天天爽天天爽夜夜爽毛片 | 一级影片在线观看 | 日韩欧美一区二区视频 | 国产精品入口日韩视频大尺度 | 中文人妻熟女乱又乱精品 | 911国产| 日本不卡专区 | 蜜桃av在线看 | 天天色天天搞 | 国产美女精品视频 | 99re6这里只有精品 | 亚洲综合网av | 国产成人精品久久二区二区 | 色射网| 黄在线视频 | 51成人做爰www免费看网站 | 欧美亚洲视频 | √天堂资源地址在线官网 | 亚洲欧美成人 | 91丨九色丨国产在线 | 影音先锋成人网 | 伊人精品一区二区三区 | 欧美黄色特级片 | 国产人与禽zoz0性伦 | 亚洲黄色片在线观看 | 91国偷自产一区二区三区观看 | 超污视频在线观看 | 日韩免费成人av | 欧美另类精品 | 永久免费av网站 | 久久精品免费看 | 日批视频在线播放 | 综合久久色 | 亚洲国产精品无码久久 |