当前位置: 首页 > 面试题库 >

在struct方法中更改struct的指针值

訾稳
2023-03-14
问题内容

我正在尝试将指针缠绕在go中。我这里有这段代码

package main

import (
    "fmt"
)

// LinkedList type
type LinkedList struct {
    data int
    next *LinkedList
}

// InsertList will insert a item into the list
func (node *LinkedList) InsertList(data int) {
    newHead := LinkedList{data, node}
    node = &newHead
}

func main() {
    node := &LinkedList{}
    node.InsertList(4)
    fmt.Printf("node = %+v\n", node)
}

和输出是

node = &{data:0 next:<nil>}

我想了解为什么node = &newHead我的InsertList方法根本没有引用节点指针指向其他结构


问题答案:

接收方node通过值传递,就像其他参数一样,因此调用者看不到您在函数中所做的任何更改。如果要让函数修改函数外部存在的内容,则该函数需要处理指向该对象的指针。在您的情况下,node是一个指针,但是您真正想要的是一个指向表示列表本身的对象的指针。例如:

package main

import (
    "fmt"
)

type LinkedListNode struct {
    data int
    next *LinkedListNode
}

type LinkedList struct {
    head *LinkedListNode
}

// InsertList will insert a item into the list
func (list *LinkedList) InsertList(data int) {
    newHead := &LinkedListNode{data, list.head}
    list.head = newHead
}

func main() {
    var list LinkedList
    list.InsertList(4)
    fmt.Printf("node = %+v\n", list.head)
    list.InsertList(7)
    fmt.Printf("node = %+v\n", list.head)
}


 类似资料:
  • 问题内容: 给定以下结构: 在结构中使用指针或值时,性能方面有何不同?是否有开销,或者这仅仅是两门Go编程课程? 我将使用指针来实现链接的结构,但这是我们唯一必须在结构中使用指针以获得性能的情况吗? PS:在上面的结构中,我们讨论了一个简单的int,但是它可以是任何其他类型(甚至是自定义类型) 问题答案: 使用对您的程序功能最有用的表格。基本上,这意味着如果将值设为有用,则使用指针。 从性能的角度

  • 问题内容: 如果我的结构包含类型为的指针,则用于检查该属性是否会导致,这使我感到奇怪。 具体来说,我将JSON对象编组到一个结构中,在该结构中,我想测试一个特定的属性是当相应的JSON结构不包含该属性时。如果不是要走的路,我应该怎么做? 问题答案: 您传递给的所有内容都包装在一个值中(如果还没有的话): 将比较值,其中第一个参数值 不是,仅包装在其中的值。 接口值表示为一对。您传递给的第一个值是一

  • 问题内容: 在Swift中,我尝试执行以下操作: Xcode 在方法中在线上报告错误。 为什么?如果将结构更改为类,则不会出错。 问题答案: 如果要修改结构的属性,请将该函数标记为mutating。

  • 问题内容: 我想知道Go中的“ struct {}”和“ struct {} {}”是什么意思?示例如下: 要么 问题答案: 是Go中的关键字。它用于定义结构类型,结构类型是命名元素的序列。 例如: 的是一个具有零个元素类型。通常在不存储任何信息时使用。它具有大小为0的优点,因此通常不需要内存来存储type值。 另一方面是复合文字,它构造一个类型的值。复合文字构造用于类型的值,例如结构,数组,映射

  • struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示: type person struct { name string age int } 看到了吗?声明一个struct如此简单,上面的类型包

  • 此函数用于定义类型的结构对象,该结构对象由defstruct操作创建。 语法 (Syntax) 以下是语法。 (struct structname values) Parameters - 'structname'是要赋予结构的名称。 'values'是需要分配给结构的键值的值。 Return Value - 返回一个struct对象,其值映射到结构的键。 例子 (Example) 以下程序显示