Go中的常量结构

dem*_*mas 22 go

为什么我不能创建常量结构?

const FEED_TO_INSERT = quzx.RssFeed{ 0,
                    "",
                    "desc",
                    "www.some-site.com",
                    "upd_url",
                    "img_title",
                    "img_url",
                    0,
                    0,
                    0,
                    0,
                    0,
                    100,
                    "alt_name",
                    1,
                    1,
                    1,
                    "test",
                    100,
                    100,
                    0 }
Run Code Online (Sandbox Code Playgroud)

.\ rss_test.go:32:const初始化器quzx.RssFeed文字不是常量

mko*_*iva 45

因为Go不支持struct常量(强调我的)

有布尔常量,符文常量,整数常量,浮点常数,复数常量和字符串常量. 符文,整数,浮点和复数常量统称为数字常量.

在这里阅读更多内容:https://golang.org/ref/spec#Constants

  • 伤心。这是一个方便的语言功能。 (3认同)

use*_*492 6

您应该将其声明为 var。

Go 允许您在模块范围内声明和初始化全局变量。

Go 没有任何不变性的概念。'const' 并不是为了防止变量发生变异或类似的事情。

  • 这是事实(Go 中的 `const` 更接近于 C 中的 `#define`,而不是 C# 中的 `readonly`),但并不能真正解释为什么不能有类似结构体的 `const` 值。它们可能被排除在外(以及类似数组和类似映射的值)以简化编译器设计。 (5认同)

小智 5

一个好的解决方法是将其包装在一个函数中。

func FEED_TO_INSERT() quzx.RssFeed {
    return quzx.RssFeed{ 0,
                    "",
                    "desc",
                    "www.some-site.com",
                    "upd_url",
                    "img_title",
                    "img_url",
                    0,
                    0,
                    0,
                    0,
                    0,
                    100,
                    "alt_name",
                    1,
                    1,
                    1,
                    "test",
                    100,
                    100,
                    0 }
}
Run Code Online (Sandbox Code Playgroud)

注意:确保函数始终返回新对象(或副本)。

  • 通过“总是返回一个新对象”,您可以模拟一些恒定的东西,它不能改变并且应该与自身相同。听起来很奇怪。 (4认同)