有沒有辦法自動執行此操作?package mainimport "fmt"func main() { var a []string a = append(a, "this", "this2", "this3") increaseArguments(a) a = append(a, "this4") increaseArguments(a)}func increaseArguments(b []string) { // I want, when i add new element to slice i want this function act as this // fmt.Println(b[0],b[1], b[2], b[3]) fmt.Println(b[0], b[1], b[2])}除了將 b[3] 作為參數添加到 fmt.Println 之外,有沒有辦法自動添加它?
1 回答

拉風的咖菲貓
TA貢獻1995條經驗 獲得超2個贊
請注意,如果b
是 type []any
,您可以將其作為 的可變參數的值傳遞fmt.Println()
:
fmt.Println(b...)
但由于b
是 type []string
,你不能。
但是如果你變成b
一個[]any
切片,你可以。您可以使用此輔助函數來執行此操作:
func convert[T any](x []T) []any {
r := make([]any, len(x))
for i, v := range x {
r[i] = v
}
return r
}
進而:
func increaseArguments(b []string) {
fmt.Println(convert(b)...)
}
這將輸出(在Go Playground上嘗試):
this this2 this3
this this2 this3 this4
注意:在中創建新切片convert()不會使此解決方案變慢,因為顯式傳遞值(如fmt.Println(b[0], b[1], b[2]))也會隱式創建切片。
- 1 回答
- 0 關注
- 186 瀏覽
添加回答
舉報
0/150
提交
取消