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-06-26 15:43:21 +08:00
golang 一般不兴给结构体搞常量
都是用 const 写最前边的 |
2
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 的一大痛点,但是很遗憾,目前此问题并未被核心团队认为是最紧迫的问题。 |
3
szy007 2019-06-26 15:52:48 +08:00
表示同意一楼的说法
|
4
GuangXiN 2019-06-26 16:28:46 +08:00
const (
|
5
a719114136 2019-06-26 16:38:01 +08:00 via Android
看实际情况,我两种都有用
|
6
brucewuio 2019-06-26 17:42:39 +08:00
神经病
|
8
useben 2019-06-26 17:56:15 +08:00
const (
) |
10
Mohanson 2019-06-27 02:36:27 +08:00 via Android
可你定义出来的不是常量而是变量,问号???
|
11
scofieldpeng 2019-06-27 10:16:48 +08:00
看到定义常量标题第一反应不是 const ?看来楼主的代码明白了你的意思,按照 2 楼的来吧,var 这种虽然能用,但是。。。如果你的队友不靠谱的时候。。。
|
12
index90 OP @scofieldpeng 没办法哦,Go 不能定义常量的 struct,但是如果有定义常量 struct 的需求,我看到的其他库的源码基本上都是这样实现。可能我这里不应该说常量?
|
13
Muninn 2019-06-27 22:26:10 +08:00
你的 abc 看起来像是要在 struct 里边定义个常量字段。
如果想要一个 struct 当做常量,用一个函数 return 固定的 struct 就好了啊…… |
14
reus 2019-07-12 16:14:27 +08:00
const (
User = "abc" ) |