首頁 >後端開發 >Golang >如何在 Go 中安全地將字串切片轉換為自訂類型切片?

如何在 Go 中安全地將字串切片轉換為自訂類型切片?

Linda Hamilton
Linda Hamilton原創
2024-12-10 07:33:10880瀏覽

How to Safely Convert a Slice of Strings to a Slice of a Custom Type in Go?

將字串切片轉換為自訂類型切片

這個問題是由於嘗試轉換字串切片([ ]string)到自在定義類型(Hand)的切片中,兩個切片都具有具有相同基礎類型(Card)的元素。編譯器將此標記為錯誤,引發了對類型相容性的擔憂以及需要解決方法。

根本問題源自於 Go 規範決定禁止不同類型切片之間的直接轉換,即使它們的元素共享相同類型。這是為了防止恰好具有相似結構的不相關類型之間發生無意的轉換。

為了解決這個問題,最安全的方法是複製切片的元素。但是,如果由於潛在的資料修改而無法複製,則可以使用不安全的套件進行替代:

unsafe.Pointer(&value)
*(*[]Card)(x)

其中:

  • value 是要轉換的原始切片。
  • *unsafe.Pointer(&value) 將切片的引用(指標)從*[]string 轉換為unsafe.Pointer.
  • *(*[]Card)(x) 取消引用unsafe .Pointer 並將結果指標強制轉換為*[]Card。

這允許切片直接轉換,無需複製。但是,必須謹慎使用此方法,並認識到與繞過類型檢查相關的固有風險。

Go 社群內一直在討論允許遞歸等效類型之間進行轉換。但目前這樣的提議尚未實施。

以上是如何在 Go 中安全地將字串切片轉換為自訂類型切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn