分配字符串类型 golang

assign a string type golang

提问人:Rodrigo 提问时间:2/6/2016 更新时间:2/6/2016 访问量:41103

问:

我很难将字符串分配给类型字符串。所以我有这个类型:

type Username string

然后我有一个返回字符串的函数

我试图做的是将用户名设置为返回的字符串:

u := &Username{returnedString}

我也试过了

var u Username
u = returnedString

但我总是得到一个错误。

GO 类型

评论

0赞 william.taylor.09 2/6/2016
用户名是一个字符串,而不是一个结构,所以你不能做你:=&Username{returnedString}。有没有理由你不能做var u字符串?
0赞 Jacques Supcik 2/6/2016
你能提供有关错误的更多细节吗?
0赞 InkyDigits 2/6/2016
@william.taylor.09 用户名不是字符串,而是基于基础类型字符串构建的自定义类型。

答:

1赞 Jacques Supcik 2/6/2016 #1

Go 中的类型转换在教程“Go 教程”中进行了解释

有关使用您的类型的示例,请参阅此处

18赞 GerritS 2/6/2016 #2

正如其他人所指出的,您需要进行显式类型转换:

someString := funcThatReturnsString()
u := Username(someString)

我建议阅读这篇关于隐式类型转换的文章。具体来说,Honnef 引用了 Go 关于可分配性的规范:

在以下任何一种情况下,值 x 可分配给 T 类型的变量(“x 可分配给 T”):

  • x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中至少有一个不是命名类型。

所以在你的示例中,它已经是一个“命名类型”:它有类型如果你做了类似的事情returnedStringstring.

var u Username
u = "some string"

你本来没问题,因为 将隐式转换为类型和两者,并且具有 ."some string"UsernamestringUsernamestring

评论

1赞 InkyDigits 2/6/2016
如果我先看到这个,我就不会发布我的答案。
12赞 InkyDigits 2/6/2016 #3

您已创建用户定义类型“用户名”。如果不进行转换,则无法将一种类型的值分配给另一种类型(在本例中为字符串为 Username)。顺便说一句,您可以为其分配一个字符串文字。

var u Username
u = "test"

会起作用。

var u Username
    var s string

    s = "test"
    u = s

会给你错误:

不能在赋值中使用 s(字符串类型)作为用户名类型

您可以从一种类型转换为另一种类型,因此...:

var u Username
    var s string
    s = "test"
    u = Username(s)

...也会起作用。“u”的类型为用户名,值为“test”。

郑重声明,这些并不是惯用的例子。我只是想清楚地说明这里的类型是怎么回事。