將切片作為帶有原始切片修改的參數傳遞
Go 中按值傳遞變數限制了函數修改對函數作用域的影響。如果需要在函數外部修改切片,則直接將切片作為參數傳遞是不夠的。
切片追加函數行為
追加函數分配一個新切片並複製現有切片中的元素,包括函數內進行的任何附加。但是,原始切片不受影響。
範例:累積切片上的遞歸
提供的程式碼片段最初嘗試在作為參數傳遞的切片中累積驗證訊息到一個遞歸函數。但是,函數的修改不會反映在原始切片中。
解
此問題的解法主要有兩種:
func myAppend(list *[]string, value string) { *list = append(*list, value) }
func validate(obj Validatable, messages []ValidationMessage) []ValidationMessage { //...Processing return messages }
慣用的Go方法
當函數需要修改原始切片時,將指標傳遞給切片是一種慣用的 Go 方法。如返回切片方法所示,也可以透過返回修改後的切片來避免對累加器的需求。性能注意事項
傳遞 a 的性能影響在大多數情況下,指針與返回切片的關係可以忽略不計。但是,具體行為可能會有所不同,具體取決於編譯器最佳化和特定程式碼使用情況。以上是如何修改 Go 函數中作為參數傳遞的切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!