Golang 的 Structs 结构体

Golang 的 Structs 结构体

Go 的 Structs 结构体 结构体 Struct 用来实现面向对象,类似于其他语言的类(class) package main import "fmt" type TestStruct struct { Name string `json:"name" xml:"name"

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)
}
LICENSED UNDER CC BY-NC-SA 4.0
Comment