登录
首页 >  Golang >  Go问答

GO的结构类型别名解决方案

来源:stackoverflow

时间:2024-03-11 08:21:27 362浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《GO的结构类型别名解决方案》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

所以我试图从“C”移植一个实现 AVL 树的包。它是一个嵌入式实现,因此 AVL 结构嵌入在应用程序定义的结构中。

AVL 包中的所有内部代码都使用类型转换,因此,例如,如果您将 AVL 标头放在结构的开头,则传递给 AVL 例程的内容类似于

(struct avl *)&foo

其中 foo 是您的应用程序结构。

据我了解,GO 不会让你这样做(并非没有可怕的变态,据我了解,这些变态不受支持,也不安全。)

也就是说,这就是我的想法:我向 AVL 结构添加了一个字段

owner 接口{}

然后我向 avl_tree_insert() 添加了一个参数:

owner 接口{}

该参数是指向应用程序结构开头的指针,因此完成了类似的操作:

avl_tree_insert(root, &mystruct.avl, &mystruct, cmp_func)

avl_tree_insert 然后将所有者接口存储在其结构中的相应字段中。与以前一样,查找或遍历树的例程返回一个 AVL 节点指针,然后客户端执行

nodep = avlp.owner.(*mystruct)

一切顺利。这一切都有效,但我忍不住想知道是否有更好的方法?谢谢!


解决方案


更好的方法是使用接口:

type avltreenode interface {
  // functions related to tree links, etc
}

type nodeimpl struct {
  // implements avltreenode
}

// mynode embeds nodeimpl, so it is an avltreenode
type mynode struct {
   nodeimpl
  // otherfields
}

这允许您使用 avltreenode 接口编写树管理函数,然后您可以使用类型断言来访问具体结构本身。

avl_tree_insert(root, &mystruct, cmp_func)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>