我很难将字符串分配给类型字符串。所以我有这种类型:
type Username string
然后我有一个返回字符串
的函数我要做的是将用户名设置为返回的字符串:
u := &Username{returnedString}
我也试过
var u Username
u = returnedString
但我总是收到错误。
答案 0 :(得分:10)
正如其他人所指出的那样,您需要进行显式类型转换:
someString := funcThatReturnsString()
u := Username(someString)
我建议在隐式类型转换时阅读this article。具体而言,Honnef在assignability上引用了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 :(得分:5)
您已制作了用户定义的类型"用户名"。您无法在不转换的情况下将一种类型的值分配给另一种类型(在本例中为用户名的字符串)。顺便说一句,您可以为其指定字符串文字。
dygraph(bmsp1, main = "Black MO SP")%>%
dyAxis("y", label = "Depth", valueRange = c(0, 1.0), independentTicks = TRUE)%>%
dyAxis("y2", label = "Temp ", valueRange = c(0, 25.0), independentTicks = TRUE) %>%
dySeries("Temp", axis=('y2'))
会工作。
var u Username
u = "test"
会给你错误:
不能在作业中使用s(类型字符串)作为用户名
您可以将从一种类型转换为另一种类型,因此......:
var u Username
var s string
s = "test"
u = s
......也会奏效。 " U"将是Username类型,其值为" test"。
对于记录,这些并不是惯用的例子。我只是想清楚地说明这里的类型会发生什么。
答案 2 :(得分:1)
解释了go中的类型转换in the tutorial "A Tour of Go"
使用您的类型查看here for an example。