結構體繼承
#說起繼承,學過Java,Python的肯定都不陌生,但是Go中,可沒有這個東西吶。
那咋辦呢???,還是得用結構體來實現。
假裝我們都是男孩,喜歡車,那我們就拿車來舉例子吧。
車結構體
//车 type Car struct { Brand string //车品牌 CarNum string //车牌号 Tyre int //轮胎个数 } //给车绑定一个方法,说明车的基本信息 func (this *Car) carInfo() { fmt.Printf("品牌:%s,车牌号:%s,轮胎个数:%d\n", this.Brand, this.CarNum, this.Tyre) }
BMW車
//宝马车 type BMWCar struct { //*Car和Car基本没有区别,一个存的是整个结构体,一个存的是结构体地址,用法大同小异 *Car //这就表示继承了Car这个结构体 }
比亞迪車
##//比亚迪车 type BYDCar struct { *Car }
可能看到這,你會有種熟悉得感覺,這不就是上節課所將的結構體嵌套嗎? ? ?
這跟繼承有毛關係?
其实在Go中,结构体既可以用来存储数据,也可以用来模仿对象的各种操作。
main代码
func main() { //一个宝马对象 var bmw1 = BMWCar{&Car{ Brand: "宝马x8", CarNum: "京666", Tyre: 4, }} //一个比亚迪对象 var byd1 = BYDCar{&Car{ Brand: "比亚迪L3", CarNum: "京111", Tyre: 4, }} //因为 BMWCar 和 BYDCar 都继承了Car,所以都有carInfo这个方法 bmw1.carInfo() byd1.carInfo() }
执行结果
这就是一个最简单的,面向对象,跟其他语言一样,继承会将所有的属性和方法都继承过来。
序列化
到此为止呢,结构体基本可以告一段落了,基本算是入门了,当然,并没有结束,但是我想大家都累了,换个方向继续玩。
这个东西叫做序列化,什么意思呢,就是像咱们的切片了,map了,结构体了等,这些都是Go的类型。
如果要和其他语言交流,人家可没有这些玩意唉,那怎么办呢???
众多大佬就形成了一个规范,json
数据格式,json
数据必须是字符串类型。
最外面是'
号,键/值对组合中的键名写在前面并用双引号""
包裹。
就像这样。
'{"Gender":"男","Name":"张三"}' //'说明这个是字符串,一般打印时不显示
序列化我们用到的是json
模块的Marshal
方法。
切片序列化
单独的切片序列化用的很少,但是仍然还是要知道。
示例代码
package main import ( "encoding/json" "fmt" ) type Student struct { Gender string Name string } func main() { var StudentList = []string{"张三", "李四"} fmt.Printf("StudentList类型:%T\n", StudentList) //[]string,这是列表类型 serializeByte, err := json.Marshal(StudentList) if err != nil { fmt.Println("序列化失败") return } var serializeStr = string(serializeByte) fmt.Printf("serializeStr类型:%T\n", serializeStr) //string,这是字符串类型 fmt.Printf("serializeStr值:%v\n", serializeStr) //["张三","李四"] }
第16行代码将切片序列化,但是返回的是[]byte
类型,第21行代码将[]byte
类型转成字符串。
执行结果
map序列化
字典序列化,就比较有味道了,序列化的是一个标准的json
数据格式。
示例代码
package main import ( "encoding/json" "fmt" ) type Student struct { Gender string Name string } func main() { var StudentInfo = map[string]string{ "Name":"张三", "Age":"18", "Gender":"男", } fmt.Printf("StudentInfo类型:%T\n",StudentInfo) serializeByte, err := json.Marshal(StudentInfo) if err != nil { fmt.Println("序列化失败") } var serializeStr = string(serializeByte) fmt.Printf("serializeStr类型:%T\n", serializeStr) //string,这是字符串类型 fmt.Printf("serializeStr值:%v\n", serializeStr) //{"Age":"18","Gender":"男","Name":"张三"} }
执行结果
这个就有点像标准的json
格式了。
结构体序列化
结构体代码
type Student struct { Name string Gender string Age int }
main
func main() { var s1 = Student{ Name: "张三", Gender: "男", Age: 18, } fmt.Printf("StudentInfo类型:%T\n", s1) serializeByte, err := json.Marshal(s1) if err != nil { fmt.Println("序列化失败") } var serializeStr = string(serializeByte) fmt.Printf("serializeStr类型:%T\n", serializeStr) //string,这是字符串类型 fmt.Printf("serializeStr值:%v\n", serializeStr) }
执行结果
切片套结构体
一般情况下,这种方式数据格式是用的比较多的。
当然, 还可以切片嵌套map,方法和此方法一样,不做例子了。
示例代码
package main import ( "encoding/json" "fmt" ) type Student struct { Name string Gender string Age int } func main() { var s1 = Student{ Name: "张三", Gender: "男", Age: 18, } var s2 = Student{ Name: "李四", Gender: "女", Age: 16, } //一个存放 Student 的列表 var studentList = []Student{s1, s2} fmt.Printf("StudentInfo类型:%T\n", studentList) serializeByte, err := json.Marshal(studentList) //main.Student if err != nil { fmt.Println("序列化失败") } var serializeStr = string(serializeByte) fmt.Printf("serializeStr类型:%T\n", serializeStr) //string,这是字符串类型 fmt.Printf("serializeStr值:%v\n", serializeStr) }
执行结果
结构体标签(Tag)
Tag
可以理解为结构体的说明,由一对反引号包裹起来。
但是一般情况下,Tag在序列化是用的比较多。
结构体代码
type Student struct { Name string `json:"name"` Gender string `json:"gender"` Age int `json:"age"` }
每个字段后面跟的,就是Tag,一定不要把格式搞错啦。
main代码
func main() { var s1 = Student{ Name: "张三", Gender: "男", Age: 18, } fmt.Printf("StudentInfo类型:%T\n", s1) serializeByte, err := json.Marshal(s1) //main.Student if err != nil { fmt.Println("序列化失败") } var serializeStr = string(serializeByte) fmt.Printf("serializeStr类型:%T\n", serializeStr) //string,这是字符串类型 fmt.Printf("serializeStr值:%v\n", serializeStr) }
执行结果
可以发现key成小写的了,这就说明一个问题。
在序列化時,如果結構體#有json
這個Tag,序列化時就會以json
Tag為準,如果沒有json
#Tag,則以結構體欄位為準。
總結
#上述我們學習了Go基礎之結構體的結構體繼承,#,
##結構體標籤以上是Go語言基礎之結構體(冬日篇)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Toensureinitfunctionsareeffectiveandmaintainable:1)Minimizesideeffectsbyreturningvaluesinsteadofmodifyingglobalstate,2)Ensureidempotencytohandlemultiplecallssafely,and3)Breakdowncomplexinitializationintosmaller,focusedfunctionstoenhancemodularityandm

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

開發者應遵循以下最佳實踐:1.謹慎管理goroutines以防止資源洩漏;2.使用通道進行同步,但避免過度使用;3.在並發程序中顯式處理錯誤;4.了解GOMAXPROCS以優化性能。這些實踐對於高效和穩健的軟件開發至關重要,因為它們確保了資源的有效管理、同步的正確實現、錯誤的適當處理以及性能的優化,從而提升軟件的效率和可維護性。

Goexcelsinproductionduetoitsperformanceandsimplicity,butrequirescarefulmanagementofscalability,errorhandling,andresources.1)DockerusesGoforefficientcontainermanagementthroughgoroutines.2)UberscalesmicroserviceswithGo,facingchallengesinservicemanageme

我們需要自定義錯誤類型,因為標準錯誤接口提供的信息有限,自定義類型能添加更多上下文和結構化信息。 1)自定義錯誤類型能包含錯誤代碼、位置、上下文數據等,2)提高調試效率和用戶體驗,3)但需注意其複雜性和維護成本。

goisidealforbuildingscalablesystemsduetoitssimplicity,效率和建築物內currencysupport.1)go'scleansyntaxandaxandaxandaxandMinimalisticDesignenhanceProductivityAndRedCoductivityAndRedCuceErr.2)ItSgoroutinesAndInesAndInesAndInesAndineSandChannelsEnablenableNablenableNableNablenableFifficConcurrentscorncurrentprogragrammentworking torkermenticmminging

Initfunctionsingorunautomationbeforemain()andareusefulforsettingupenvorments和InitializingVariables.usethemforsimpletasks,避免使用輔助效果,andbecautiouswithTestingTestingTestingAndLoggingTomaintAnainCodeCodeCodeClarityAndTestesto。

goinitializespackagesintheordertheordertheyimported,thenexecutesInitFunctionswithinApcageIntheirdeFinityOrder,andfilenamesdetermineTheOrderAcractacractacrosmultiplefiles.thisprocessCanbeCanbeinepessCanbeInfleccessByendercrededBydeccredByDependenciesbetenciesbetencemendencenciesbetnependendpackages,whermayleLeadtocomplexinitialitialializizesizization


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。