go语言 – 字符串常量

在Go中,双引号包括的值是字符串常量,例如,"Hello World"

字符串常量属于什么类型?答案是没有类型(untyped)。

"Hello World"这样的字符串常量没有任何类型。

const hello = "Hello World"  

在上面的例子中,我们将"Hello World"赋值给常量Hello,常量hello仍然没有类型。

go是一种强类型语言。所有变量都需要有显式类型。那么,下面的代码中,变量name被赋值无类型常量Sam,会发生什么情况?

package main

import (  
    "fmt"
)

func main() {  
    var name = "Sam"
    fmt.Printf("type %T value %v", name, name)

}

答案是无类型常量有一个与之关联的默认类型,当且仅当代码需要它时,才起作用。

var name = "Sam"语句中,name需要一个类型,它从字符串常量"Sam"的默认类型中获得该类型:字符串。

但是也可以创建类型化常量。下面的代码创建一个类型化常量。

const typedhello string = "Hello World"  

上面代码中的typedhellostring类型的常量。

go是一种强类型语言。不允许在赋值期间混合类型。让我们通过一个程序来看看这意味着什么。

package main

func main() {  
        var defaultName = "Sam" //允许
        type myString string
        var customName myString = "Sam" //允许
        customName = defaultName //不允许

}

在上面的代码中,我们首先创建一个变量defaultName,并给其赋值常量Sam

常量Sam的默认类型是string,所以在赋值之后,defaultName的类型是string。

在下一行中,我们创建一个新的类型myString,它是string的别名。

然后我们创建一个myString类型的变量customName,并给其赋值常量Sam。由于常量Sam是无类型的,所以可以将它分配给任何字符串变量。因此这个赋值是允许的,customName获取类型myString

现在我们有一个类型为string的变量defaultName和另一个类型为myString的变量customName。尽管我们知道myStringstring的别名,但Go的强类型策略不允许将一种类型的变量分配给另一种类型。因此,不允许赋值customName = defaultName,否则编译器将报错。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载