我有這兩個函式,我想在上面實作泛型。只知道我想interface{}和[t any]和(t any)和所有領域。這是代碼。如果您知道如何使用泛型將這兩個功能合二為一。只寫代碼
func concat(args ...[]directory_account_price_discount_tax) []directory_account_price_discount_tax {
concated := []directory_account_price_discount_tax{}
for _, i := range args {
concated = append(concated, i...)
}
return concated
}
func concat_strings_slice(args ...[]string) []string {
concated := []string{}
for _, i := range args {
concated = append(concated, i...)
}
return concated
}
和結構directory_account_price_discount_tax是
type directory_account_price_discount_tax struct {
directory_no []int
Account string
Price, Discount, Tax float64
}
uj5u.com熱心網友回復:
使用reflect包撰寫一個連接任意型別切片的函式。
func concat(args ...interface{}) interface{} {
n := 0
for _, arg := range args {
n = reflect.ValueOf(arg).Len()
}
v := reflect.MakeSlice(reflect.TypeOf(args[0]), 0, n)
for _, arg := range args {
v = reflect.AppendSlice(v, reflect.ValueOf(arg))
}
return v.Interface()
}
當沒有引數或引數型別不同時,函式會發生恐慌。
concat像這樣使用函式:
s := concat([]string{"a", "b"}, []string{"c", "d"}).([]string)
請注意使用型別斷言來獲取所需型別的結果。
使用 Go 的型別引數功能有一個更好的解決方案,但在我撰寫此答案時,該功能尚未發布。
uj5u.com熱心網友回復:
這就是您可以接受任何型別的值并將它們附加到陣列的方式。
func concat(args ...interface{}) []interface{} {
concated := make([]interface{}, 0)
for _, i := range args {
concated = append(concated, i)
}
return concated
}
但是當你需要訪問欄位時,directory_account_price_discount_tax你需要這樣的型別斷言
arr := concat(/* some directory_account_price_discount_tax type values */)
v := arr[0].(directory_account_price_discount_tax)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343537.html
標籤:走
