Go-Generika ändern die Funktionstypinferenz durch Einführung der Typparametrisierung: Parametertyp: []A, wobei A der tatsächliche Typparameter ist, der die Zahlenschnittstelle erfüllt und zum Zeitpunkt des Aufrufs materialisiert wird. Rückgabewerttyp: Identisch mit Parametertyp, abgeleitet als A.
Wie Go-Generika die Funktionstypinferenz beeinflussen
Generics in der Go-Sprache führen einen neuen Typinferenzmechanismus ein, der sich auf die Art und Weise auswirkt, wie die Funktionstypinferenz durchgeführt wird. Für die korrekte Verwendung von Go-Generika ist es wichtig, diese Änderungen zu verstehen.
Traditionelle Typinferenz
Vor den Go-Generika basierte die Funktionstypinferenz auf Typinformationen im Kontext. Beispielsweise wird die folgende Funktion:
func SumNumbers(numbers []int) int { sum := 0 for _, number := range numbers { sum += number } return sum }
daraus schließen, dass der Parametertyp von SumNumbers
[]int
und der Rückgabewerttyp int
ist . Dies liegt daran, dass die Variable number
in der Anweisung range
den Typ int
hat, während die Variable sum
vom Typ < ist code> int. SumNumbers
的参数类型为 []int
,返回值类型为 int
。这是因为 range
语句中的 number
变量具有类型 int
,而 sum
变量是类型的 int
。
泛型中的类型推断
Go 泛型引入了一层额外的类型参数化,这改变了函数类型推断的方式。考虑以下泛型函数:
func Sum[T number](numbers []T) T { sum := zero[T]() for _, number := range numbers { sum += number } return sum }
现在,Sum
函数具有一个类型参数 T
,指示类型 T
应该是数字类型,也就是说,它必须实现 number
接口。在这种情况下,函数类型推断如下:
[]A
,其中 A
是满足 number
接口的实际类型参数(在调用时具体化)。A
,与函数参数类型相同。实战案例
以下是使用 Sum
泛型函数的示例:
// 求和整型数组 sum := Sum([]int{1, 2, 3}) // 推断 T 为 int // 求和浮点型数组 sumF := Sum([]float64{1.2, 2.3, 3.4}) // 推断 T 为 float64
正如你所看到的,Sum
Sum
einen Typparameter T
, der angibt, dass der Typ T
ein numerischer Typ sein sollte , d. h. es muss die Schnittstelle number
implementieren. In diesem Fall wird der Funktionstyp wie folgt abgeleitet: 🎜[]A
, wobei A
Nummer erfüllt Code> Code> Die tatsächlichen Typparameter der Schnittstelle (zur Aufrufzeit verifiziert).
A
, der mit dem Funktionsparametertyp identisch ist. Sum
: 🎜rrreee🎜Wie Sie sehen können, Sum
Generische Funktionen können beim Aufruf eine Typinferenz basierend auf den tatsächlichen Typparametern durchführen. 🎜Das obige ist der detaillierte Inhalt vonWie wirken sich Golang-Generika auf die Funktionstypinferenz aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!