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

有没有打代码的网站温州seo优化公司

有没有打代码的网站,温州seo优化公司,互联网工程有限公司,做网站 图片是文本Go语言方法和接收器类型详解 1. 方法接收器类型 1.1 值接收器 值接收器方法不会改变接收器的状态,因为Go语言会在调用时复制接收器的值。因此,任何对接收器成员变量的修改都只会影响副本,而不会影响原始结构体实例。 type Person struct …

Go语言方法和接收器类型详解

1. 方法接收器类型

1.1 值接收器

值接收器方法不会改变接收器的状态,因为Go语言会在调用时复制接收器的值。因此,任何对接收器成员变量的修改都只会影响副本,而不会影响原始结构体实例。

type Person struct {Name stringAge  int
}// 值接收器方法
func (p Person) GetAge() int {return p.Age
}func TestValueReceiver(t *testing.T) {p := Person{Name: "Tom", Age: 20}if age := p.GetAge(); age != 20 {t.Errorf("Expected age 20, got %d", age)}// p的值在方法调用后不会改变
}

1.2 指针接收器

指针接收器允许直接操作接收器本身,这意味着可以安全地修改接收器的字段,并且这些更改会持续存在。

// 指针接收器方法
func (p *Person) SetAge(age int) {p.Age = age
}func TestPointerReceiver(t *testing.T) {p := &Person{Name: "Tom", Age: 20}p.SetAge(21)if p.Age != 21 {t.Errorf("Expected age 21, got %d", p.Age)}// p的值会被修改
}

2. 值类型和指针类型的方法调用

2.1 值类型调用指针接收器方法

func TestValueTypeCallPointerMethod(t *testing.T) {p := Person{Name: "Tom", Age: 20}p.SetAge(21) // Go 自动转换为 (&p).SetAge(21)if p.Age != 21 {t.Errorf("Expected age 21, got %d", p.Age)}
}

2.2 指针类型调用值接收器方法

func TestPointerTypeCallValueMethod(t *testing.T) {p := &Person{Name: "Tom", Age: 20}age := p.GetAge() // Go 自动转换为 (*p).GetAge()if age != 20 {t.Errorf("Expected age 20, got %d", age)}
}

3. 不可寻址的情况

3.1 Map值不可直接修改

func TestMapValueNotAddressable(t *testing.T) {people := make(map[string]Person)people["tom"] = Person{Name: "Tom", Age: 20}// 错误做法// people["tom"].Age = 21// 正确的做法person := people["tom"]person.Age = 21people["tom"] = personif people["tom"].Age != 21 {t.Errorf("Expected age 21, got %d", people["tom"].Age)}
}

3.2 临时值不可寻址

func TestTemporaryValueNotAddressable(t *testing.T) {// 以下代码会编译错误// Person{Name: "Tom", Age: 20}.SetAge(21)// 可以调用值接收器方法age := Person{Name: "Tom", Age: 20}.GetAge()if age != 20 {t.Errorf("Expected age 20, got %d", age)}
}

3.3 字面量不可寻址

func TestLiteralNotAddressable(t *testing.T) {// 以下代码会编译错误// (&struct{ name string }{"tom"}).name = "jerry"// 正确的做法是先赋值给变量p := Person{Name: "Tom", Age: 20}p.SetAge(21)if p.Age != 21 {t.Errorf("Expected age 21, got %d", p.Age)}
}

3.4 Map值是指针类型的情况

func TestMapWithPointerValues(t *testing.T) {// 创建一个字符串到 *Person 的映射people := make(map[string]*Person)// 添加一个新的 Person 到映射中people["tom"] = &Person{Name: "Tom", Age: 20}// 直接修改 tom 的年龄people["tom"].Age = 21if people["tom"].Age != 21 {t.Errorf("Expected age 21, got %d", people["tom"].Age)}
}

4. Map值的正确修改方式

  • 获取值的副本
  • 修改副本
  • 将修改后的副本存回map

5. 方法调用的自动转换

5.1 值到指针的自动转换

  • Go编译器自动处理从值到指针的转换
  • 允许值类型调用指针接收器方法

5.2 指针到值的自动转换

  • Go编译器自动处理从指针到值的转换
  • 允许指针类型调用值接收器方法

注意事项

  1. 选择接收器类型时考虑:

    • 是否需要修改接收器状态
    • 性能考虑
    • 接口实现要求
  2. 处理不可寻址情况:

    • 使用中间变量
    • 正确处理map值的修改
    • 注意指针类型的使用
  3. 使用map存储指针时:

    • 可以直接修改指针指向的对象
    • 确保指针正确初始化
    • 考虑并发安全问题
http://www.15wanjia.com/news/11198.html

相关文章:

  • 淘客wordpress网站seo招聘
  • 北京 网站建设公司市场推广计划方案模板
  • 怎么在网站上面做悬浮广告网站建设的系统流程图
  • 网站建设要准备什么广东疫情防控措施
  • 怎样做网站排名优化今日时事新闻
  • 怎样做淘宝的导购网站推广短视频询盘获客系统
  • 百度网站前三名权重一般在多少怎么建立网站卖东西
  • ps网站建设要知道的知识友情链接只有链接
  • 电子商务网站开发的任务书做百度推广代运营有用吗
  • wordpress发布文章到指定页面网站建设优化推广
  • 快速网站开发 带数据库2023年九月份新闻
  • 杭州 城西 做网站找小网站的关键词
  • 广州网站优化排名哪家好东莞网站排名推广
  • 做网站都去哪申请网址优化服务是什么意思
  • 网站首页尺寸福州百度关键词优化
  • 网站关键字被改了免费引流推广
  • java做网站合适么怎么搜索网站
  • 中国建设银行官方网站 m.ccb.com百度贴吧人工客服电话
  • 外贸b2c平台都有哪些网站网络营销的优化和推广方式
  • 北京网站建设团队重庆搜索排名提升
  • 重庆专业做网站的公司网站新域名查询
  • h5响应式网站技术域名批量查询系统
  • 海外网站服务器下载宁波优化推广找哪家
  • 手机网站开发 视频成都调查事务所
  • 怎么提高网站的收录量网站排名优化培训
  • 广西今日头条崇左最新消息杭州百度快照优化排名推广
  • 源码WordPressseo排名赚app下载
  • 如何为公司做网站百度app下载安装
  • 电影项目做产品众筹哪个网站好百度应用商店下载安装
  • 杭州企业网站建设方案2024很有可能再次封城吗