Go 的 Structs 结构体

本文详细介绍了Go语言中Structs结构体的使用,包括实例化、方法定义、嵌套结构体、匿名字段、标签以及序列化和反序列化功能,帮助读者掌握Go中面向对象编程的基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Go 的 Structs 结构体

结构体 Struct

用来实现面向对象,类似于其他语言的类(class)

package main

import "fmt"

type TestStruct struct {
	Name      string   `json:"name" xml:"name"`
//  <属性名>   <类型>    <标签...>
	isGood    bool     `json:"is_good" xml:"is_good"`
}

func main() {
	testobj := TestStruct{}
	testobj.Name = "hello" // 实例化
	testobj.isGood = true

	testobj2 := TestStruct{Name: "Hello", isGood: true} // 实例化

	fmt.Println(testobj2.Name) // 获取属性
}

匿名构建一个结构体

package main

import "fmt"

func main() {
	temp := struct {
		Name  string
		Value string
	}{
		Name:  "结构体",
		Value: "匿名构建",
	}

	fmt.Println(temp.Name, temp.Value)
}

结构体的方法

一个简单的例子 为Test绑定 Print() 函数 调用时打印对象的Name属性:

package main

import "fmt"

type Test struct {
	Name string
}

func (t *Test) Print() {
	fmt.Println(t.Name)
}

func main() {
	test := Test{Name: "hello world"}
	test.Print()
}

嵌套结构体

package main

import "fmt"

type Person struct {
	Name   string
	Gender int
	Age    int
}

type Master struct {
	Person Person
	salves []Slave
}

type Slave struct {
	Person Person
	Jobs   []Job
}

type Job struct {
	Name string
}

func main() {
	p1 := Person{Name: "小明", Age: 38, Gender: 1}
	p2 := Person{Name: "小帅", Age: 18, Gender: 1}
	p3 := Person{Name: "小美", Age: 18, Gender: 0}

	m1 := Master{Person: p1}
	s1 := Slave{Person: p2, Jobs: []Job{{Name: "工作1"}, {Name: "工作2"}}}
	s2 := Slave{Person: p3, Jobs: []Job{{Name: "工作3"}, {Name: "工作4"}}}

	fmt.Println(m1, s1, s2)
}

匿名字段

不写字段名即是匿名字段 可以直接通过对象访问

package main

type Test struct {
	string
	int
}

func main() {
	t := Test{}
	t.string = "匿名字段"
	t.int = 120
}

标签

结构体的标签用于序列号、反序列化、验证等左右,最常用的就是json标签

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	u1 := User{"小明", 35}
	fmt.Println(u1.Name, u1.Age)

	var u2 User
	err := json.Unmarshal([]byte("{\"name\": \"小明\", \"age\": 35}"), &u2)  // 使用Json字符串 反序列化一个 User 对象
	if err != nil {
		fmt.Println("反序列化错误", err.Error())
		return
	}

	fmt.Println(u1) // {小明 35}
	fmt.Println(u2) // {小明 35}
}

结构体比较

会比较对象属性是否相等

package main

import (
	"fmt"
)

type User struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	u1 := User{"小明", 35}
	u2 := User{"小明", 35}

	fmt.Println(u1 == u2)
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

deadmau5v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值