Golang Go语言中结构体常量的三种实现方式
Golang Go语言中结构体常量的三种实现方式
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 比较好? 或者有其他实现方式,欢迎讨论。
更多关于Golang Go语言中结构体常量的三种实现方式的实战教程也可以访问 https://www.itying.com/category-94-b0.html
golang 一般不兴给结构体搞常量
都是用 const 写最前边的
更多关于Golang Go语言中结构体常量的三种实现方式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
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 的一大痛点,但是很遗憾,目前此问题并未被核心团队认为是最紧迫的问题。
表示同意一楼的说法
看实际情况,我两种都有用
神经病
麻烦不要骂人
const (
)
const 只能定义基础类型常量
可你定义出来的不是常量而是变量,问号???
看到定义常量标题第一反应不是 const ?看来楼主的代码明白了你的意思,按照 2 楼的来吧,var 这种虽然能用,但是。。。如果你的队友不靠谱的时候。。。
没办法哦,Go 不能定义常量的 struct,但是如果有定义常量 struct 的需求,我看到的其他库的源码基本上都是这样实现。可能我这里不应该说常量?
你的 abc 看起来像是要在 struct 里边定义个常量字段。
如果想要一个 struct 当做常量,用一个函数 return 固定的 struct 就好了啊……
const (
User = “abc”
)
在Go语言中,结构体常量(或称为结构体字面量)的创建和初始化通常不直接涉及“常量”的概念,因为常量在Go中一般指的是不可变的值(如数字、字符串、布尔值等),而结构体由于其复杂性和可变性,通常是通过变量来操作的。不过,你可以通过不同的方式创建和初始化结构体,这里列出三种常见的方法:
-
直接声明和初始化:
type Person struct { Name string Age int } p := Person{Name: "Alice", Age: 30}
-
使用命名字段初始化(适用于字段较多或需要明确指定字段):
p := Person{ Name: "Bob", Age: 25, }
-
使用零值创建后单独赋值:
var p Person p.Name = "Charlie" p.Age = 40
需要注意的是,尽管这些方式可以用来创建和初始化结构体变量,但它们并不等同于“结构体常量”。在Go中,一旦结构体变量被创建,其字段值是可以修改的(除非使用了某些特殊的技巧,如将结构体嵌入到不可变的类型中)。
因此,讨论“结构体常量”的实现方式在Go语言中并不准确,我们更多地是在讨论如何创建和初始化结构体变量。希望这能帮助你更好地理解Go语言中的结构体操作。