分配字符串类型golang

时间:2016-02-05 18:16:37

标签: go types

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

type Username string

然后我有一个返回字符串

的函数

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

u := &Username{returnedString}

我也试过

var u Username
u = returnedString

但我总是收到错误。

3 个答案:

答案 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类型,stringUsername的基础类型都会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