#今日実装したい関数は、マップ内のすべての値を合計することです。
func SumInts(m map[string]int64) int64 { var s int64 for _, v := range m { s += v } return s } func SumFloats(m map[string]float64) float64 { var s float64 for _, v := range m { s += v } return s }
func Sum[K comparable, V int64 | float64](m map[K]V "K comparable, V int64 | float64") V { var s V for _, v := range m { s += v } return s } func main() { ints := map[string]int64{ "first": 1, "second": 2, } fmt.Println(Sum[string, int64](ints "string, int64")) floats := map[string]float64{ "first": 35.98, "second": 26.99, } fmt.Println(Sum[string, float64](floats "string, float64")) }
型パラメータ と呼ばれます. K に続くおよび V は 型の制限です。、比較可能なものは Go 言語によって事前に宣言されており、== および != 演算を実行できる任意の型を表します。 V の型制限は int64 または float64 のいずれかです。関数のパラメータは m、型はmap[K]V、戻り値の型は V です。
関数の呼び出しも通常の関数の呼び出しとは少し異なり、関数名と実際のパラメータの間に角括弧 [] があり、型名を示します。たとえば、Sum() 関数を初めて呼び出すときの型名はそれぞれ string と int64 で、その後関数が実行されるとき、対応する K と V の型はそれぞれ string と int64 になります。第二次调用该 Sum() 函数时,K、V 的类型分别是 string 和 float64。
通过泛型编程,我们就可以实现一个函数处理多种数据类型。
执行上面的代码输出:
3 62.97
以上がGo1.18 におけるジェネリックの予備調査の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。