gpt4 book ai didi

go - 在结构方法中更改结构指针值

转载 作者:IT王子 更新时间:2023-10-29 02:26:26 27 4
gpt4 key购买 nike

我正试图在 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 - 在结构方法中更改结构指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42047889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com