结构体

发布时间 2023-10-02 20:11:35作者: gao79138

结构体

代码

//example.go
package test

import "fmt"

//结构体是自定义数据类型
//定义一个结构体
type User struct {
	Name string
	Id   uint32
}

//结构体的继承,两种方法
//代表Account继承自User
type Account struct {
	User     `user:"名字"` //结构体标签,格式:`key1:"value1" key2:"value2"`
	Password string
}

//代表Contact继承自User
type Contact struct {
	*User
	Name   string
	Remark string
}

func Struct() {
	//声明一个结构体类型的变量
	var u1 User = User{
		Name: "张三",
	}
	u1.Id = 10000
	//声明一个结构体指针
	// var u2 *User = new(User) //第一种声明方式
	var u2 *User = &User{
		Name: "ggg",
	}
	(*u2).Id = 20000  //可以简写为u2.Id
	(*u2).Name = "李四" //可以简写为u2.Name
	fmt.Println(u2.Id, u2.Name)

	var a1 = Account{
		User: User{
			Name: u1.Name,
		},
		Password: "666",
	}
	fmt.Println(a1.Name, a1.Id, a1.Password)

	var c1 *Contact = &Contact{
		User: &User{
			Id: u2.Id,
		},
		Remark: "王麻子",
	}

	c1.Name = "王五" //c1.User.Name = "王五"(当没有重复字段时,c1.Name == c1.User.Name)
	c1.User.Name = "赵六"
	fmt.Println("a1=", a1) //a1= {{张三 0} 666}
	fmt.Println("c1=", c1) //c1= &{0xc000008048 王五 王麻子}
	fmt.Println(c1.User)   //&{赵六 20000}
}
//main.go
package main

import "GoExample/test"

func main() {
	test.Struct()
}
    个人感觉:继承不就是结构体的嵌套吗?