告别晦涩手册:用Jupiter仿真RISC-V汇编,5分钟搞懂内存小端存储与数据输入
2026/6/6 2:58:19
学习 Go 结构体方法时,必须彻底分清类型名和变量名,否则容易报错或理解错误。
由type定义的名字,代表「种类、模板」,不是具体对象。
示例:
typeStustruct{Ageint}Stu是类型名,地位等同于int、string。.字段,例如Stu.Age会报错根据类型创建的实例,占用内存,存储真实数据。
示例:
vars Stu s.Age=18s是变量名(具体对象).Age类型 = 模板 变量 = 实物 只能用实物访问字段,类型不能访问字段(stu) getAge()必报错错误示例:
func(stu)getAge()int{returnstu.Age}报错原因:
(stu)只有类型名,没有接收者变量名stu不是实例变量stu.Age正确写法:
func(s Stu)getAge()int{returns.Age}s:接收者变量Stu:接收者类型func(变量名 类型)方法名()返回值类型{}只写类型、不写变量名,代码能编译,但无法访问任何字段:
func(Stu)hello()string{return"hi"}场景:纯工具方法、不操作对象字段时可用,业务开发几乎不用。
(s Stu)示例:
func(s Stu)SetAge(ageint){s.Age=age}调用:
stu:=Stu{18}stu.SetAge(20)fmt.Println(stu.Age)// 18,原对象未修改(s *Stu)s.setAge()等价于(&s).setAge()示例:
func(s*Stu)SetAge(ageint){s.Age=age}stu:=Stu{18}stu.SetAge(20)fmt.Println(stu.Age)// 20,原对象被修改Stu是类型名:模板、种类,不能访问字段s是变量名:实例对象,可以访问字段(变量名 类型),缺一不可stu.GetAge()本质类似GetAge(stu),接收者变量代表当前调用对象类型 = 图纸 变量 = 房子 字段属于房子,不属于图纸 接收者变量代表当前这套房子 接收者类型代表这种房子的设计图