Golang 基础05 结构体struct

结构体语法格式:

Go 复制代码
// Point 是二维坐标点, 同时演示字段标签(tag)的写法。
type Point struct { // struct 关键字定义新类型
	X int `json:"x"` // 字段标签由反射读取, json 包用它决定序列化键名
	Y int `json:"y"` // 字段名必须导出(首字母大写)才会被 json 处理
} // Point 定义结束

XY是字段,对于字段的类型可以是常见的所有,包括函数

结构体专属的绑定方法,同时验证了接收者是值接收者Test和接收者是引用接收者*Test的区别

Go 复制代码
type Test struct {
	UserName string
	UserId   int
}

func (t *Test) Change() {
	t.UserName = "changed"
	t.UserId = 100
}
func (t Test) Change2() {
	t.UserName = "changed2"
	t.UserId = 200
}

func (t *Test) OutPut() {
	fmt.Println(t.UserName)
	fmt.Println(t.UserId)
}
func main() {
	t := Test{
		UserName: "one",
		UserId:   0,
	}
	t.Change2()//change2接收者是值接收者,所以修改的数据不会映射到源
	t.OutPut()
	t.Change()
	t.OutPut()
}

结构体可以互相嵌入,结构体a嵌入到b里面,b可以使用a的方法和属性

Go 复制代码
type Test struct {
	UserName string
	UserId   int
}

func (t *Test) Change() {
	t.UserName = "changed"
	t.UserId = 100
}
func (t Test) Change2() {
	t.UserName = "changed2"
	t.UserId = 200
}

func (t *Test) OutPut() {
	fmt.Println(t.UserName)
	fmt.Println(t.UserId)
}

type School struct {
	Test
	SchoolName string
}
func main() {
	sc := new(School) //new声明结构体,所有字段默认零值
	sc.SchoolName="sdws"
	sc.UserId //可以直接调用
	sc.Test.UserId //也可以通过字段值调用
}

同时声明,结构体没有引用传递,全部都是值传递。有部分&struc的传递传递的是指针的值。本质还是值传递

相关推荐
优橙教育2 小时前
零基础学AI应用开发要多久?3个月能到什么水平
服务器·开发语言·网络·php
Navigator_Z2 小时前
LeetCode //C - 1286. Iterator for Combination
c语言·算法·leetcode
SEO_juper2 小时前
用 Python 写一个 GEO 可见性检查脚本:你的网站现在能被 AI 引用吗
开发语言·人工智能·爬虫·python·seo·外贸独立站
西柚小萌新3 小时前
【LLM&&AI应用开发 八股文】--4.3.Agent智能体(下)
java·开发语言·数据库
北极有牛3 小时前
cpp学习笔记--常量指针
java·开发语言·算法
GPU实战笔记3 小时前
云端 GPU 训练的账户余额提醒:它能说明什么,不能说明什么?
深度学习·算法·成本管理·gpu云计算·云端训练
半杯咖啡半行码3 小时前
C++ 编程与 STL 模板:从泛型编程到内存安全详解
开发语言·c++
浮链序3 小时前
怎么证明"你这个模型是偷我的"——把蒸馏变成取证工具
算法·安全·llm
小O的算法实验室3 小时前
IEEE TMC,面向异构物联网的多目标量子行为拓扑优化算法
算法