文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

改变内部构造中的引用

2024-04-04 23:16

关注

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《改变内部构造中的引用》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我一直在尝试更新结构内的映射变量,但没有成功。

我预计 golang 中的映射是通过引用传递的,因此将一个引用分配给另一个引用应该可行,但事实并非如此。

我可能在这里遗漏了一些明显的东西,如果是这样的话,抱歉!

package main

import (
        "fmt"
)

type Foo struct {
        t map[string]interface{}
}

func (F Foo) Set(ta map[string]interface{}) {
        F.t = ta
}
func (F Foo) Get() map[string]interface{} {
        return F.t
}

func main() {
        t := make(map[string]interface{})
        t["t"] = "sf"
        t["array"] = []int{1, 2, 3}

        fmt.Println(t) // prints map[t:sf array:[1 2 3]]
        var f Foo

        f.Set(t)
        // why the following?
        fmt.Println(f.t) //prints map[]

        f.t = t
        fmt.Println(f.t) //prints map[t:sf array:[1 2 3]]
}

演示:https://play.golang.org/p/i1esv1bdjgq


解决方案


基本上,您的 set 方法需要一个指针接收器才能更改结构的状态。

带有指针接收器的方法可以修改接收器指向的值。由于方法经常需要修改其接收器,因此指针接收器比值接收器更常见。

get 还应该有一个指针接收器以保持一致性:

接下来是一致性。如果该类型的某些方法必须具有指针接收器,则其余方法也应该具有指针接收器,因此无论如何使用该类型,方法集都是一致的。详情请参阅section on method sets。

请参阅 a tour of go 了解更多示例。

这是您的代码的修复:

package main

import (
    "fmt"
)

type foo struct {
    t map[string]interface{}
}

func (f *foo) set(ta map[string]interface{}) {
    f.t = ta
}
func (f *foo) get() map[string]interface{} {
    return f.t
}

func main() {
    t := make(map[string]interface{})
    t["t"] = "sf"
    t["array"] = []int{1, 2, 3}

    fmt.println(t)
    var f foo

    f.set(t)
    fmt.println(f.get()) //prints map[t:sf array:[1 2 3]]

    f.t = t
    fmt.println(f.get()) //prints map[t:sf array:[1 2 3]]
}

输出

map[t:sf array:[1 2 3]]
map[t:sf array:[1 2 3]]
map[t:sf array:[1 2 3]]

自己尝试一下here

今天关于《改变内部构造中的引用》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注编程网公众号!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯