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。

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”。
為了記錄,這些并不是慣用的例子。我只是想清楚地說明這里的類型發生了什么。
- 2 回答
- 0 關注
- 191 瀏覽
添加回答
舉報