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

2019-06-26 15:05:29 +08:00
 index90
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 比较好? 或者有其他实现方式,欢迎讨论。

10141 次点击
所在节点    Go 编程语言
14 条回复
Muninn
2019-06-26 15:43:21 +08:00
golang 一般不兴给结构体搞常量
都是用 const 写最前边的
liulaomo
2019-06-26 15:49:02 +08:00
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
2019-06-26 15:52:48 +08:00
表示同意一楼的说法
GuangXiN
2019-06-26 16:28:46 +08:00
const (
a719114136
2019-06-26 16:38:01 +08:00
看实际情况,我两种都有用
brucewuio
2019-06-26 17:42:39 +08:00
神经病
index90
2019-06-26 17:56:00 +08:00
@brucewuio 麻烦不要骂人
useben
2019-06-26 17:56:15 +08:00
const (

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

如果想要一个 struct 当做常量,用一个函数 return 固定的 struct 就好了啊……
reus
2019-07-12 16:14:27 +08:00
const (
User = "abc"
)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/577660

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX