Go语言结构体(struct)详解:定义、使用与JSON编码在Go语言中,结构体(struct)是一种非常重要的复合数据类型,它允许开发者将不同类型的数据组合在一起,形成更复杂的对象结构。结构体不仅用于数据的组织和管理,还广泛应用于网络编程、Web开发和数据序列化等领域。掌握Go语言中的结构体,不
在Go语言中,结构体(struct)是一种非常重要的复合数据类型,它允许开发者将不同类型的数据组合在一起,形成更复杂的对象结构。结构体不仅用于数据的组织和管理,还广泛应用于网络编程、Web开发和数据序列化等领域。掌握Go语言中的结构体,不仅能提升代码的可读性与可维护性,还能帮助开发者更高效地构建应用程序。本文将详细介绍Go语言结构体的定义、使用方式,以及如何将结构体数据转换为JSON格式,帮助你在实际开发中灵活运用。
本文深入探讨了Go语言中的结构体(struct)类型,首先介绍了结构体的基本概念和声明方式,然后通过实例讲解了如何初始化、复制和传递结构体数据。接着,我们将重点讨论如何通过结构体编码和解码JSON数据,包括如何使用Go的json包进行数据序列化,以及如何通过结构体标签自定义JSON字段名的映射。最后,文中还提供了一些练习题,帮助读者巩固所学知识。
package main
func distance(lat1, long1, lat2, long2 float64) float64 {
return 0.0
}
func main() {
var curiosity struct {
lat float64
long float64
}
curiosity.lat = -4.5895
curiosity.long = 137.4417
fmt.Println(curiosity.lat, curiosity.long)
fmt.Println(curiosity)
}
package main
func distance(loc1, loc2 location) dis {
return dis{0.0, 0.0}
}
type location struct {
lat float64
long float64
}
// type dis location
type dis struct {
lat float64
long float64
}
func main() {
//var curiosity struct {
// lat float64
// long float64
//}
//type location struct {
//lat float64
// long float64
// }
var spirit location
spirit.lat = -14.5684
spirit.long = 175.472636
var opportunity location
opportunity.lat = -1.9462
opportunity.long = 354.4734
fmt.Println(spirit, opportunity)
}
package main
import "fmt"
func main() {
type location struct {
lat, long float64
}
opportunity := location{lat: -1.9462, long: 354.4734}
fmt.Println(opportunity)
insight := location{lat: 4.5, long: 135.9}
fmt.Println(insight)
spirit := location{-14.5684, 175.472636}
fmt.Println(spirit)
}
pakcage main
import "fmt"
func main() {
type location struct {
lat, long float64
}
curiosity := location{-4.5859, 137.4417}
fmt.Printf("%v\n", curiosity)
fmt.Printf("%+v\n", curiosity)
}
pakcage main
import "fmt"
func main() {
type location struct {
lat, long float64
}
bradbury := location{-4.5859, 137.4417}
curiosity := bradbury
curiosity.long += 0.0106
fmt.Println(bradbury, curiosity)
}
package main
import "fmt"
func main() {
type location struct {
name string
lat float64
long float64
}
lats := []float64{-4.5859, -14.5684, -1.9462}
longs := []float64{137.4417, 175.472636, 354.4734}
locations := []location{
{name: "Bradbury Landing", lat: -4.5859, long: 137.4417},
{name: "Columbia Memorial Station", lat: -14.5684, long: 175.472636},
{name: "Challenger Memorial Station", lat: -1.9462, long: 354.4734},
}
fmt.Println(lats, longs, locations)
}
JSON(JavaScript Object Notation,JavaScript对象表示法)
常用于Web API
json包的Marshal函数可以将struct中的数据转化为JSON格式。
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
type location struct {
Lat, Long, float64
}
curiosity := location{-4.5895, 137.4417}
bytes, err := json.Marshal(curiosity)
exitOnError(err)
fmt.Println(string(bytes))
}
// exitOnError prints any errors and exits.
func exitOnError(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
Go语言中的json包要求struct中的字段必须以大写字母开头,类似CamelCase驼峰型命名规范。
但有时候我们需要snake_case蛇形命名规范,那么该怎么办?
可以为字段注明标签,使得json包在进行编码的时候能够按照标签里的样式修改字段名。
package main
import (
"encoding/json"
"fmt"
"os"
)
func main() {
type location struct {
Lat float64 `json: "latitude"`
Long, float64 `json: "longitude"`
}
curiosity := location{-4.5895, 137.4417}
bytes, err := json.Marshal(curiosity)
exitOnError(err)
fmt.Println(string(bytes))
}
// exitOnError prints any errors and exits.
func exitOnError(err error) {
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
Go语言中的结构体是组织和管理复杂数据的核心工具,理解其定义、初始化、传递和复制方式对开发高效、可维护的代码至关重要。通过结构体与JSON的结合,我们可以更方便地与外部系统进行数据交换。在本文中,我们不仅展示了如何在Go中定义和使用结构体,还介绍了如何通过结构体标签进行JSON的自定义映射,极大地方便了数据的序列化与反序列化。掌握这些基本技巧,将为你的Go语言编程之路打下坚实的基础。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!