首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
beego
V2EX  ›  Go

Golang 中结构体常量的三种实现方式

  •  
  •   index90 · 110 天前 · 1759 次点击
    这是一个创建于 110 天前的主题,其中的信息可能已经有所发展或是发生改变。
    type User interface {
      Name() string
    }
    
    type a struct {}
    func (a *a) Name() string {
      return "xiaoming"
    }
    
    type b struct {
      name string
    }
    
    func (b *b) Name() string {
      return b.name
    }
    
    type c struct {
      Name string
    }
    
    var ConstA = a{}
    var ConstB = b{ name: "xiaoming" }
    var ConstC = c{ Name: "xiaoming" }
    

    这三种方式你会选哪种? 我怎么觉得 A 比较好? 或者有其他实现方式,欢迎讨论。

    14 回复  |  直到 2019-07-12 16:14:27 +08:00
        1
    Muninn   110 天前
    golang 一般不兴给结构体搞常量
    都是用 const 写最前边的
        2
    liulaomo   110 天前
    ConstC.Name 可以更改吧。

    ConstA 和 ConstB 可以被整体修改。

    其实可以写一个函数返回一个副本:

    type b struct {
    name string
    }

    func (b *b) Name() string {
    return b.name
    }

    func ConstB() b {
    return b{ name: "xiaoming" }
    }

    缺少不变量支持确实是 Go 的一大痛点,但是很遗憾,目前此问题并未被核心团队认为是最紧迫的问题。
        3
    szy007   110 天前
    表示同意一楼的说法
        4
    GuangXiN   110 天前
    const (
        5
    a719114136   110 天前 via Android
    看实际情况,我两种都有用
        6
    brucewuio   110 天前
    神经病
        7
    index90   110 天前
    @brucewuio 麻烦不要骂人
        8
    useben   110 天前
    const (

    )
        9
    index90   110 天前
    @useben const 只能定义基础类型常量
        10
    Mohanson   109 天前 via Android
    可你定义出来的不是常量而是变量,问号???
        11
    scofieldpeng   109 天前
    看到定义常量标题第一反应不是 const ?看来楼主的代码明白了你的意思,按照 2 楼的来吧,var 这种虽然能用,但是。。。如果你的队友不靠谱的时候。。。
        12
    index90   109 天前
    @scofieldpeng 没办法哦,Go 不能定义常量的 struct,但是如果有定义常量 struct 的需求,我看到的其他库的源码基本上都是这样实现。可能我这里不应该说常量?
        13
    Muninn   108 天前
    你的 abc 看起来像是要在 struct 里边定义个常量字段。

    如果想要一个 struct 当做常量,用一个函数 return 固定的 struct 就好了啊……
        14
    reus   94 天前
    const (
    User = "abc"
    )
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2772 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 12:54 · PVG 20:54 · LAX 05:54 · JFK 08:54
    ♥ Do have faith in what you're doing.