Go 中的命名類型斷言和轉換
在Go 中,命名類型斷言和轉換允許開發人員操作自訂和預定義的資料型態。但是,在處理重新定義預定義類型的自訂類型時,可能會出現誤解。讓我們詳細探討這個問題。
考慮以下程式碼範例:
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Illegal usage acceptMe(ans) // Failed type assertion acceptMe(ans.(string)) // Works (but why?) acceptMe(string(ans)) }</code>
問:為什麼型別斷言 (ans.(string)) 失敗,而轉換(string(ans)) 有效嗎?
A: 類型斷言只適用於介面類型,它表示值可以滿足的契約。由於像 Answer 這樣的自訂類型不是接口,因此嘗試使用類型斷言語法來斷言它們將導致錯誤。
相反,轉換明確地將一種類型轉換為另一種類型。轉換 (string(ans)) 成功,因為 Answer 具有基礎字串類型。 Go 會在將 Ans 傳遞給 AcceptMe 之前將其隱式轉換為其底層字串。
附加說明:
以上是為什麼 Go 中自訂類型類型斷言失敗,但轉換成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!