在图像所示的示例中,我希望方法 Put 应用于 MappingStringInt,因为它是由 Mapping 组成的。然而,这种情况并非如此。 如果 Mapping 由类型 struct 组成,则 Put 方法将应用于 MappingStringInt。 有没有办法解决这个问题并使图像上的第 20 行正常工作? 谢谢
package main
import "fmt"
type (
Mapping[K comparable, V any] map[K]V
MappingStringInt Mapping[string, int]
)
func (self Mapping[K, V]) Put(key K, value V) Mapping[K, V] {
self[key] = value
return self
}
func main() {
m1 := Mapping[string, int]{"two": 2}
m1.Put("four", 4) // Works
fmt.Printf("Mapping(four = %v) %+v \n", m1["four"], m1)
m2 := MappingStringInt{"two": 2}
m2.Put("four", 4) // Fails: m2.Put undefined (type MappingStringInt has no field or method Put)
fmt.Printf("Mapping(four = %v) %+v \n", m2["four"], m2)
}
我尝试使用该方法的参考文献,但没有成功。
正如评论中提到的Burak Serdar,它不会从类型派生,但您可以将其嵌入到结构中,如下所示:
package main
import (
"fmt"
)
type (
Mapping[K comparable, V any] map[K]V
MappingStringInt struct {
Mapping[string, int]
}
)
func (item Mapping[K, V]) Put(key K, value V) {
item[key] = value
}
func main() {
m1 := Mapping[string, int]{"two": 2}
m1.Put("four", 4) // Works
fmt.Printf("Mapping(four = %v) %+v \n", m1["four"], m1)
m2 := MappingStringInt{Mapping: Mapping[string, int]{"two": 2}}
m2.Put("three", 3)
fmt.Printf("Mapping(four = %v) %+v \n", m2.Mapping["four"], m2)
}