栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Golang结构中的属性未修改

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang结构中的属性未修改

这不是类型系统问题,而是Go中如何传递数据的问题。

我认为根本的误解是关于“通过引用”。在Go中,所有内容均按值传递,没有按引用传递(https://golang.org/doc/faq#pass_by_value)

因此,当您将一个

Node
结构传递给该
addEdge
方法时,它实际上是在复制该结构。

如果要引用相同的基础结构而不是复制它,则应将指针传递给它。

尝试以下使用指针传递结构的稍作修改的代码:(您可以在此处调整并运行代码:https
//play.golang.org/p/Qsbi4LBXS4)
    package main    import "fmt"    type Node struct {        neighbors []*Edge        visited   bool        name      string    }    type Edge struct {        neighbor *Node    }    type Graph struct {        nodes []*Node    }    func (g *Graph) addNode(node *Node) {        g.nodes = append(g.nodes, node)    }    func (n *Node) addEdge(neighbor *Node) {        edge := &Edge{ neighbor: neighbor,        }        n.neighbors = append(n.neighbors, edge)    }    func (g Graph) String() {        for _, node := range g.nodes { //fmt.Printf("nodename: %v", node.name) fmt.Printf("number of neighbors: %dn", len(node.neighbors)) if len(node.neighbors) > 0 {     fmt.Printf("node: %v, edges: ", node.name)     for _, e := range node.neighbors {         fmt.Printf("%q", e.neighbor.name)     }     fmt.Println() }        }    }    func main() {        graph := &Graph{}        n1 := &Node{name: "abc"}        n2 := &Node{name: "def"}        graph.addNode(n1)        graph.addNode(n2)        n1.addEdge(n2)        graph.String()    }


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484161.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号