我正在使用 Go 處理類型參數(泛型)1.18beta1。問題考慮以下代碼段:package mainimport ( "fmt")func main() { foo := &Foo[string, int]{ valueA: "i am a string", valueB: 123, } fmt.Println(foo)}type Foo[T1 any, T2 any] struct { valueA T1 valueB T2}func (f *Foo[_,_]) String() string { return fmt.Sprintf("%v %v", f.valueA, f.valueB)}此代碼段無法構建,并出現以下錯誤:<autogenerated>:1: cannot use .this (type *Foo[string,int]) as type *Foo[go.shape.string_0,go.shape.string_0] in argument to (*Foo[go.shape.string_0,go.shape.int_1]).String由于Type Parameters Proposal_中的以下語句,我嘗試在方法聲明中使用:方法聲明中列出的類型參數不必與類型聲明中的類型參數具有相同的名稱。特別是,如果方法不使用它們,它們可以是_。問題上面的構建錯誤是錯誤1.18beta1還是我遺漏了什么?成功構建的片段變體使用類型參數名稱String如果我將方法聲明更改為以下內容(替換為_實際類型參數),我可以成功構建代碼:func (f *Foo[T1,T2]) String() string { return fmt.Sprintf("%v %v", f.valueA, f.valueB)}單一類型參數_僅使用單個類型參數時,我設法成功使用:package mainimport ( "fmt")func main() { foo := &Foo[string]{"i am a string"} fmt.Println(foo)}type Foo[T1 any] struct { value T1}func (f *Foo[_]) String() string { return fmt.Sprintf("%v", f.value)}為 T1 和 T2 實例化具有相同類型的 Foo_Foo如果用相同的類型實例化(例如string,對于T1和) ,也適用于方法聲明T2:package mainimport ( "fmt")func main() { foo := &Foo[string, string]{ valueA: "i am a string", valueB: "i am also a string", } fmt.Println(foo)}type Foo[T1 any, T2 any] struct { valueA T1 valueB T2}func (f *Foo[_,_]) String() string { return fmt.Sprintf("%v %v", f.valueA, f.valueB)}
添加回答
舉報
0/150
提交
取消