Golang 中的類型斷言:從介面切片中刪除元素
在Golang 中,類型斷言允許我們提取介面值的底層類型。但是,在類型斷言之後,我們如何操作底層值?
考慮以下範例,它嘗試從類型斷言的介面切片中刪除元素:
value := []interface{}{0, "one", "two", 3, 4} i := 2 value.([]interface{}) = append(value.([]interface{})[:i], value.([]interface{})[i+1:]...)
上面的程式碼會導致錯誤“無法指派給值([]interface{})” 。此錯誤源自於以下事實:介面儲存基礎值的副本,且類型斷言不會修改介面內的值。
解決方案
修改底層值,我們必須在介面中儲存一個指向切片的指標。例如:
var value interface{} = &[]interface{}{0, "one", "two", 3, 4}
現在,我們可以取消引用指標並修改切片,如下所示:
sp := value.(*[]interface{}) i := 2 *sp = append((*sp)[:i], (*sp)[i+1:]...)
輸出:
fmt.Println(value) // &[0 one 3 4]
如您所見,索引2(“二”)處的元素已從切片中刪除。這種方法成功地修改了底層值,因為介面儲存了指向切片的指針,而不是切片本身的副本。
以上是如何從 Go 中類型斷言的介面切片中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!