Go 类型常量与非类型常量
示例
Go中的常数可以输入或不输入。例如,给定以下字符串文字:
"bar"
可能会说文字的类型是string,但是,这在语义上是不正确的。相反,文字是Untyped字符串常量。它是一个字符串(更正确的说,它的默认类型是string),但是它不是Go值,因此只有在键入的上下文中分配或使用它之前,它才是类型。这是一个微妙的区别,但是一个有用的理解。
同样,如果我们将文字分配给常量:
const foo = "bar"
由于默认情况下常量是无类型的,因此它保持无类型。也可以将其声明为类型化的字符串常量:
const typedFoo string = "bar"
当我们尝试在确实具有类型的上下文中分配这些常量时,差异就发挥了作用。例如,考虑以下内容:
var s string s = foo //这很好 s = typedFoo //像这样 type MyString string var mys MyString mys = foo //这很好 mys = typedFoo //不能在分配中使用typedFoo(类型字符串)作为MyString类型