关于struct 引用的疑问

gostucd · 2017-11-17 13:53:34 · 2587 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-11-17 13:53:34 的主题,其中的信息可能已经有所发展或是发生改变。

type MusicManager struct {
    musics []MusicEntry
}
func (m *MusicManager) Get(index int) (music *MusicEntry, err error) {
    if index < 0 || index >= len(m.musics) {
        return nil, errors.New("Index out of range.")
    }
    return &m.musics[index], nil
}
func (m *MusicManager) Add(music *MusicEntry) {
    m.musics = append(m.musics, *music)
}

go语言编程这本书中的音乐库的示例

请问这里add 为什么要引用 MusicEntry ??


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2587 次点击  
加入收藏 微博
7 回复  |  直到 2017-11-20 10:25:10
channel
channel · #1 · 7年之前
type MusicManager struct {
    musics []MusicEntry
}

结构中有 MusicEntry,add 进来不是应该的吗?要不然呢?

gostucd
gostucd · #2 · 7年之前

修正一下,我意思是 为什么是这样 append(m.musics, *music) 而不是应该 append(m.musics, music)

tk103331
tk103331 · #3 · 7年之前
gostucdgostucd #2 回复

修正一下,我意思是 为什么是这样 append(m.musics, *music) 而不是应该 append(m.musics, music)

因为m.musics是[]MusicEntry类型的,所以所以append的元素必须是MusicEntry类型的,Add(music MusicEntry) 方法传入的参数music是指针类型MusicEntry,需要使用从指针中取出值,即*music

dosecin
dosecin · #4 · 7年之前

通过指针传递,可以防止参数传递时的数据拷贝消耗

windzhu0514
windzhu0514 · #5 · 7年之前
dosecindosecin #4 回复

通过指针传递,可以防止参数传递时的数据拷贝消耗

此楼正解 上面的回答答所非问

tk103331
tk103331 · #6 · 7年之前
windzhu0514windzhu0514 #5 回复

#4楼 @dosecin 此楼正解 上面的回答答所非问

楼主说的是:

> 修正一下,我意思是 为什么是这样 append(m.musics, *music) 而不是应该 append(m.musics, music)

momaek
momaek · #7 · 7年之前
tk103331tk103331 #3 回复

#2楼 @gostucd 因为m.musics是[]MusicEntry类型的,所以所以append的元素必须是MusicEntry类型的,Add(music *MusicEntry) 方法传入的参数music是指针类型*MusicEntry,需要使用从指针中取出值,即*music

正解

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传