在Go 中使用自訂類型時,了解命名類型斷言和轉換之間的細微差別至關重要。讓我們透過一個範例來探討這個概念。
考慮下面的程式碼片段,其中我們定義了一個自訂類型Answer,它重新定義了預先定義的字串類型:
<code class="go">type Answer string</code>
然後我們嘗試在需要字串類型的函數:
<code class="go">func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Assertion fails: cannot use ans (type Answer) as type string in function argument acceptMe(ans) // Type assertion fails as well: invalid type assertion: ans.(string) (non-interface type Answer on left) acceptMe(ans.(string)) // Conversion succeeds. acceptMe(string(ans)) }</code>
型別斷言僅適用於介面。介面允許底層類型發生變化。為了確定實際類型,Go 使用類型斷言 (x.(T)) 或類型開關 (switch x := x.(type))。斷言傳回布林值,指示斷言是否成功。
在我們的例子中,Answer 是一個具有固定基礎類型(字串)的命名類型。由於底層類型是已知的,因此不需要斷言。使用 string(ans) 將 Answer 類型轉換為字串就足夠了。
以上是Go 中自訂類型的型別斷言和轉換有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!