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的传递传递的是指针的值。本质还是值传递

相关推荐
ZhengEnCi5 分钟前
同样的模型,为什么本地和云 API 差别那么大:量化精度、聊天模板与采样参数的三大元凶
人工智能·算法·llm
Wang's Blog16 分钟前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
Flynn Liang25 分钟前
RAG 答非所问/幻觉怎么破?Spring AI QuestionAnswerAdvisor 召回优化实战(TopK/重排/混合检索)
人工智能·算法·spring·rag·幻觉·springai
liminla!41 分钟前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法
中科三方1 小时前
IPv6检测常见问题:AAAA记录检测不通过是什么原因?
开发语言·php
沫璃染墨2 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
维克兜率天2 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
刚入门的大一新生2 小时前
Linux-线程互斥
java·开发语言
香芋芋圆2 小时前
iD-editor 详解|OSM官方在线编辑器,基于D3.js的轻量地图编辑器
开发语言·javascript·编辑器
罗西的思考2 小时前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习