我很难将字符串分配给类型字符串。所以,我有这种类型的:指定字符串类型golang
type Username string
然后我有一个返回一个字符串
我试图做的是设置的用户名对返回函数的字符串:
u := &Username{returnedString}
我也试过
var u Username
u = returnedString
但我总是得到一个错误。
我很难将字符串分配给类型字符串。所以,我有这种类型的:指定字符串类型golang
type Username string
然后我有一个返回一个字符串
我试图做的是设置的用户名对返回函数的字符串:
u := &Username{returnedString}
我也试过
var u Username
u = returnedString
但我总是得到一个错误。
中去铸造型解释in the tutorial "A Tour of Go"
使用类型见here for an example。
正如其他人所指出的那样,你需要做一个显式类型转换:
someString := funcThatReturnsString()
u := Username(someString)
我建议你上隐式类型转换读this article。具体来说,Honnef的引用上assignability Go的规格:
A value x is assignable to a variable of type T ("x is assignable to T") in any of these cases:
- x's type V and T have identical underlying types and at least one of V or T is not a named type.
所以,在你的榜样,在returnedString
已经是一个“命名类型”:它具有类型string.
如果你已经不是做了什么样
var u Username
u = "some string"
你因为"some string"
将被隐含地转换为Username
类型,并且string
和Username
都具有基本类型string
。
如果我第一次看到这个,我不会发布我的答案。 – Snowman
您已经创建了一个用户定义的类型“用户名”。您无法将一种类型的值分配给另一种类型(在本例中为字符串到用户名)而无需转换。顺便说一句,你可以给它分配一个字符串文字。
var u Username
u = "test"
会工作。
var u Username
var s string
s = "test"
u = s
会给你的错误:
cannot use s (type string) as type Username in assignment
可以从一种类型转换为另一种,所以...:
var u Username
var s string
s = "test"
u = Username(s)
...也可以工作。 “u”将具有值“test”的用户名类型。
为了记录这些不是作为惯用的例子。我只是试图清楚地说明这里的类型是怎么回事。
用户名是一个字符串,而不是一个结构,所以你不能做u:=&Username {returnedString}。有没有理由你不能做var u字符串? –
你能给出关于错误的更多细节吗? –
@ william.taylor.09用户名不是一个字符串,而是一个构建在基础类型字符串上的自定义类型。 – Snowman