提问人:Rodrigo 提问时间:2/6/2016 更新时间:2/6/2016 访问量:41103
分配字符串类型 golang
assign a string type golang
问:
我很难将字符串分配给类型字符串。所以我有这个类型:
type Username string
然后我有一个返回字符串的函数
我试图做的是将用户名设置为返回的字符串:
u := &Username{returnedString}
我也试过了
var u Username
u = returnedString
但我总是得到一个错误。
答:
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 中至少有一个不是命名类型。
所以在你的示例中,它已经是一个“命名类型”:它有类型如果你做了类似的事情returnedString
string.
var u Username
u = "some string"
你本来没问题,因为 将隐式转换为类型和两者,并且具有 ."some string"
Username
string
Username
string
评论
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”。
郑重声明,这些并不是惯用的例子。我只是想清楚地说明这里的类型是怎么回事。
评论