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

15 回复

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中一般指的是不可变的值(如数字、字符串、布尔值等),而结构体由于其复杂性和可变性,通常是通过变量来操作的。不过,你可以通过不同的方式创建和初始化结构体,这里列出三种常见的方法:

  1. 直接声明和初始化

    type Person struct {
        Name string
        Age  int
    }
    
    p := Person{Name: "Alice", Age: 30}
    
  2. 使用命名字段初始化(适用于字段较多或需要明确指定字段):

    p := Person{
        Name: "Bob",
        Age:  25,
    }
    
  3. 使用零值创建后单独赋值

    var p Person
    p.Name = "Charlie"
    p.Age = 40
    

需要注意的是,尽管这些方式可以用来创建和初始化结构体变量,但它们并不等同于“结构体常量”。在Go中,一旦结构体变量被创建,其字段值是可以修改的(除非使用了某些特殊的技巧,如将结构体嵌入到不可变的类型中)。

因此,讨论“结构体常量”的实现方式在Go语言中并不准确,我们更多地是在讨论如何创建和初始化结构体变量。希望这能帮助你更好地理解Go语言中的结构体操作。

回到顶部