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 比较好? 或者有其他实现方式,欢迎讨论。
1
Muninn 2019 年 6 月 26 日
golang 一般不兴给结构体搞常量
都是用 const 写最前边的 |
2
liulaomo 2019 年 6 月 26 日
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 2019 年 6 月 26 日
表示同意一楼的说法
|
4
GuangXiN 2019 年 6 月 26 日
const (
|
5
a719114136 2019 年 6 月 26 日 via Android
看实际情况,我两种都有用
|
6
brucewuio 2019 年 6 月 26 日
神经病
|
8
useben 2019 年 6 月 26 日
const (
) |
10
Mohanson 2019 年 6 月 27 日 via Android
可你定义出来的不是常量而是变量,问号???
|
11
scofieldpeng 2019 年 6 月 27 日
看到定义常量标题第一反应不是 const ?看来楼主的代码明白了你的意思,按照 2 楼的来吧,var 这种虽然能用,但是。。。如果你的队友不靠谱的时候。。。
|
12
index90 OP @scofieldpeng 没办法哦,Go 不能定义常量的 struct,但是如果有定义常量 struct 的需求,我看到的其他库的源码基本上都是这样实现。可能我这里不应该说常量?
|
13
Muninn 2019 年 6 月 27 日
你的 abc 看起来像是要在 struct 里边定义个常量字段。
如果想要一个 struct 当做常量,用一个函数 return 固定的 struct 就好了啊…… |
14
reus 2019 年 7 月 12 日
const (
User = "abc" ) |