为了账号安全,请及时绑定邮箱和手机立即绑定

分配一个字符串类型 golang

分配一个字符串类型 golang

Go
一只斗牛犬 2021-12-07 18:47:48
我很难将字符串分配给类型字符串。所以我有这种类型:type Username string然后我有一个返回字符串的函数我想要做的是将用户名设置为返回的字符串:u := &Username{returnedString}我也试过var u Username u = returnedString但我总是得到一个错误。
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

正如其他人指出的那样,您需要进行显式类型转换:


someString := funcThatReturnsString()

u := Username(someString)

我建议阅读这篇关于隐式类型转换的文章。具体来说,Honnef 参考了 Go 对可分配性的规范:


在以下任一情况下,值 x 可分配给 T 类型的变量(“x 可分配给 T”):


x 的类型 V 和 T 具有相同的基础类型,并且 V 或 T 中至少有一个不是命名类型。

所以在你的例子中,returnedString已经是一个“命名类型”:它有类型string.如果你做了类似的事情


var u Username

u = "some string"

你就OK了,因为"some string"会被隐式转换成类型Username两者string并Username具有潜在的类型string。


查看完整回答
反对 回复 2021-12-07
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

您已经创建了一个用户定义的类型“用户名”。您不能在不进行转换的情况下将一种类型的值分配给另一种类型(在本例中为用户名的字符串)。顺便说一句,您可以为它分配一个字符串文字。


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”。


为了记录,这些并不是惯用的例子。我只是想清楚地说明这里的类型发生了什么。


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信