当前位置: 首页 > news >正文

5. Go 方法(结构体的方法成员)

Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。

当普通函数添加了接收者(receiver)后,就变成了方法。

一、函数和方法示例

// 普通函数
func Check(s string) string {
	return s
}

// 方法,有了Receiver变成方法类型
func (Receiver) Check(s string) string {
	return s
}

二、方法使用

package main

import "fmt"

type Address struct {
	City string
}

type Person struct {
	Name    string
	Age     int
	Address // 匿名成员,类型嵌入
}

// 普通函数
func Check(s string) string {
	return s
}

// 带有指针接收者的方法
func (p *Person) init(s string) {
	p.Name = s
	p.Age = 19
}

func main() {
	// 创建一个指针类型的 Person 实例
	p1 := &Person{}
	p1.init("xinglujianzhi") // p1.init  //所属关系,init方法属于p1的类型
	// 打印 Person 实例
	fmt.Println(*p1) // 解引用 p1 打印其值
}

三、总结

在 Go 中,无论接收者是值类型还是指针类型,都可以通过实例(值)或指针来调用方法。Go 通过语法糖来简化调用方式,但内部的处理还是要根据接收者的类型来确定。

  • 接收者是值类型 (p1)
    • 如果接收者是值类型 p1,那么方法调用时,会将实例的副本传递给方法。这意味着方法内对接收者字段的修改不会影响原始实例。
  • 接收者是指针类型 (*p1)
    • 如果接收者是指针类型 *p1,则方法调用时传递的是实例的地址(指针)。方法内对接收者的修改会直接影响原始实例。

语法糖:

Go 提供了语法糖,即你可以用值来调用指针类型的接收者方法,反之亦然。Go 会自动为你进行地址的转换(即自动取指针或解引用)。

相关文章:

  • w225政府管理系统设计与实现
  • 【计算机网络】传输层TCP协议
  • dockerfile构建haproxy
  • jetson nano 开机自启动python文件
  • HBase安装
  • 基于拼接的宏基因组全流程
  • 【Bluedroid】AVRCP 连接源码分析(三)
  • 高等数学(上)题型笔记(六)定积分的应用
  • 申请SSL证书,如何完成域名验证
  • 机器学习数学通关指南——微分中值定理和积分中值定理
  • 项目进度管理工具:甘特图与关键路径法(2025实战指南)
  • 【Python】VSCode 设定打开自动激活的(虚拟)环境
  • [HOT 100] 2439. 最小化数组中的最大值
  • ✨ ‌2025年Oracle从入门到实战的跃迁之路‌ ✨
  • 50周学习go语言:第四周 函数与错误处理深度解析
  • Android14 Camera框架中Jpeg流buffer大小的计算
  • 第9章:LangChain让大模型结构化输出
  • Cocos Creator Shader入门实战(一):材质和Effect的了解
  • linux -对文件描述符的操作dup、fcntl有五种
  • 基于SpringBoot+mybatisplus+vueJS的Cosplay文化展示与交流社区设计与实现
  • 做家具厂招聘有哪些网站/seo建站是什么
  • 彩票网站建设服务/360公司官网首页
  • 网站设计与建设开发/网络营销做得比较成功的案例
  • 全网营销推广是什么/广西百度seo
  • 重庆网站制作多少钱/广州排前三的seo公司
  • 天津网站制作西安/seo网站优化培训多少价格