文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

结构类型中的条件/可选字段

2024-04-04 23:25

关注

小伙伴们对Golang编程感兴趣吗?是否正在学习相关知识点?如果是,那么本文《结构类型中的条件/可选字段》,就很适合你,本篇文章讲解的知识点主要包括。在之后的文章中也会多多分享相关知识点,希望对大家的知识积累有所帮助!

问题内容

我有一个像这样的 node 结构类型:

package tree

// enum for node category
type level int32
const (
    leaf level = iota + 1
    branch
    root
)

type node struct {
    children []*node
    parent   *node
    x        float32
    y        float32
    z        float32
    dim      float32
    category level
    leafpenetration float32 // needed only if category is "leaf"
    rootpaddim float32      // needed only if category is "root"
}

我有两个 node 字段,它们是可选的,仅根据 category 字段需要:

    leafPenetration float32 // Needed only if category is "Leaf"
    rootPadDim float32      // Needed only if category is "Root"

当前的 node 实现正常吗?结构类型中此类可选/条件字段的最佳实践是什么?


解决方案


我最终使用了一种非常简化的方法:

package tree

// enum for node category
type level int32
const (
    leaf level = iota + 1
    branch
    root
)

type node struct {
    category level
    parent   *node
    x        float32
    y        float32
    z        float32
    dim      float32

    roott  float32 // root thickness
    rootd  float32 // root diameter
    rootbr float32 // root bezel ratio of top-bottom, i.e. top d is larger by this much
    leafp  float32 // leaf penetration
}

func newnode(cat level, parent *node, x, y, z, dim float32) *node {
    n := &node{
        category: cat,
        parent:   parent,
        x:        x,
        y:        y,
        z:        z,
        dim:      dim,
    }
    switch n.category {
    case leaf:
        n.leafp = float32(0.3)
    case root:
        n.roott = float32(2)
        n.rootd = float32(30)
        n.rootbr = float32(1.08)
    }
    return n
}

默认情况下,字段初始化为类型的零值——在 float32 的情况下,它是 0。为了避免这种情况,通常对可选字段使用指针,例如:

type Node struct {
    Children []*Node
    Parent   *Node
    X        float32
    Y        float32
    Z        float32
    Dim      float32
    Category Level

    // Optional fields
    LeafPenetration *float32  // Needed only if category is "Leaf"
    RootPadDim      *float32  // Needed only if category is "Root"
}

指针字段将默认为 nil

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯