V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
index90

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

  •  
  •   index90 · Jun 26, 2019 · 10778 views
    This topic created in 2501 days ago, the information mentioned may be changed or developed.
    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 replies    2019-07-12 16:14:27 +08:00
    Muninn
        1
    Muninn  
       Jun 26, 2019
    golang 一般不兴给结构体搞常量
    都是用 const 写最前边的
    liulaomo
        2
    liulaomo  
       Jun 26, 2019
    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 的一大痛点,但是很遗憾,目前此问题并未被核心团队认为是最紧迫的问题。
    szy007
        3
    szy007  
       Jun 26, 2019
    表示同意一楼的说法
    GuangXiN
        4
    GuangXiN  
       Jun 26, 2019
    const (
    a719114136
        5
    a719114136  
       Jun 26, 2019 via Android
    看实际情况,我两种都有用
    brucewuio
        6
    brucewuio  
       Jun 26, 2019
    神经病
    index90
        7
    index90  
    OP
       Jun 26, 2019
    @brucewuio 麻烦不要骂人
    useben
        8
    useben  
       Jun 26, 2019
    const (

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

    如果想要一个 struct 当做常量,用一个函数 return 固定的 struct 就好了啊……
    reus
        14
    reus  
       Jul 12, 2019
    const (
    User = "abc"
    )
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2561 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 12:43 · PVG 20:43 · LAX 05:43 · JFK 08:43
    ♥ Do have faith in what you're doing.