我很难将字符串分配给字符串类型。所以我有这个类型:
type Username string
我有一个函数返回一个字符串。
我想做的是将用户名设置为该返回字符串:
u := &Username{returnedString}
我也尝试了
var u Username
u = returnedString
但我总是遇到错误。
我很难将字符串分配给字符串类型。所以我有这个类型:
type Username string
我有一个函数返回一个字符串。
我想做的是将用户名设置为该返回字符串:
u := &Username{returnedString}
我也尝试了
var u Username
u = returnedString
但我总是遇到错误。
正如其他人指出的那样,您需要进行显式类型转换:
someString := funcThatReturnsString()
u := Username(someString)
因此,在您的示例中,在以下情况下,值x可以被赋给类型为T的变量(“x可以被赋给T”):
- x的类型V和T具有相同的基础类型,并且V或T中至少有一个不是命名类型。
returnedString
已经是一个“命名类型”:它的类型为string
。如果您改为执行以下操作,则会发生另一种情况:var u Username
u = "some string"
如果你使用了"some string"
,它会被隐式转换成Username
类型,因为string
和Username
都有string
作为底层类型,所以你应该没问题。
您已经创建了一个名为“Username”的用户定义类型。如果没有进行转换,就不能将一种类型的值分配给另一种类型(在此情况下是字符串分配给Username)。顺便说一下,您可以将字符串文字分配给它。
var u Username
u = "test"
会工作。
var u Username
var s string
s = "test"
u = s
会给您一个错误:
无法将类型为字符串的 s 用作分配中的类型 Username
您可以进行转换,因此...:
var u Username
var s string
s = "test"
u = Username(s)
...也会起作用。"u" 的类型将是用户名,其值为"test"。
仅供参考,这些不是用作成语示例。我只是想清楚地说明这里类型的情况。