我很難將字符串分配給類型字符串。所以,我有這種類型的:指定字符串類型golang
type Username string
然後我有一個返回一個字符串
我試圖做的是設置的用戶名對返回函數的字符串:
u := &Username{returnedString}
我也試過
var u Username
u = returnedString
但我總是得到一個錯誤。
我很難將字符串分配給類型字符串。所以,我有這種類型的:指定字符串類型golang
type Username string
然後我有一個返回一個字符串
我試圖做的是設置的用戶名對返回函數的字符串:
u := &Username{returnedString}
我也試過
var u Username
u = returnedString
但我總是得到一個錯誤。
中去鑄造型解釋in the tutorial "A Tour of Go"
使用類型見here for an example。
正如其他人所指出的那樣,你需要做一個顯式類型轉換:
someString := funcThatReturnsString()
u := Username(someString)
我建議你上隱式類型轉換讀this article。具體來說,Honnef的引用上assignability Go的規格:
A value x is assignable to a variable of type T ("x is assignable to T") in any of these cases:
- x's type V and T have identical underlying types and at least one of V or T is not a named type.
所以,在你的榜樣,在returnedString
已經是一個「命名類型」:它具有類型string.
如果你已經不是做了什麼樣
var u Username
u = "some string"
你因爲"some string"
將被隱含地轉換爲Username
類型,並且string
和Username
都具有基本類型string
。
如果我第一次看到這個,我不會發布我的答案。 – Snowman
您已經創建了一個用戶定義的類型「用戶名」。您無法將一種類型的值分配給另一種類型(在本例中爲字符串到用戶名)而無需轉換。順便說一句,你可以給它分配一個字符串文字。
var u Username
u = "test"
會工作。
var u Username
var s string
s = "test"
u = s
會給你的錯誤:
cannot use s (type string) as type Username in assignment
可以從一種類型轉換爲另一種,所以...:
var u Username
var s string
s = "test"
u = Username(s)
...也可以工作。 「u」將具有值「test」的用戶名類型。
爲了記錄這些不是作爲慣用的例子。我只是試圖清楚地說明這裏的類型是怎麼回事。
用戶名是一個字符串,而不是一個結構,所以你不能做u:=&Username {returnedString}。有沒有理由你不能做var u字符串? –
你能給出關於錯誤的更多細節嗎? –
@ william.taylor.09用戶名不是一個字符串,而是一個構建在基礎類型字符串上的自定義類型。 – Snowman