Golang-Generika schließen Slice- oder Array-Typen aus

WBOY
Freigeben: 2024-02-13 11:00:19
nach vorne
684 Leute haben es durchsucht

Golang 泛型排除切片或数组类型

PHP-Redakteur Xiaoxin bringt Ihnen heute einen Artikel über Golang-Generika. Generics sind eine mit Spannung erwartete Funktion in Golang, aber der neueste Vorschlag schließt die Unterstützung für Slice- oder Array-Typen aus. In diesem Artikel werden die Gründe für diese Entscheidung erläutert und die Auswirkungen auf Entwickler erörtert. Lass uns genauer hinschauen!

Frageninhalt

Ich habe eine Funktion in Go mit Generika, die nicht auf Slices oder Arrays angewendet werden sollte. Aber ich weiß nicht, wie ich es machen soll. Ich habe Beispiele dafür gefunden, allerdings nur in Typescript, was mich nicht weitergebracht hat. Ich möchte zum Beispiel etwas. Wie:

func sth[T everything_but_slices_or_arrays](arg T) { ...doSth... } func sth[T everything_but_slices_or_arrays](arg T) { ...doSth... }

解决方法

您可以使用 comparable

Workaround

Sie können die comparable-Einschränkung verwenden, um zur Hälfte zu gelangen wegen der Slices Implementiert diese Schnittstelle nicht:

func foo[t comparable](arg t) {
    fmt.printf("%#v\n", arg) // for example
}


func main() {
    i := []int{42}
    foo(i) // <- compiler error: []int does not satisfy comparable
}
Nach dem Login kopieren

Allerdings sind

Arrays

(ähnliche Typen):

func foo[t comparable](arg t) {
    fmt.printf("%#v\n", arg) // for example
}


func main() {
    i := [1]int{42}
    foo(i)
Nach dem Login kopieren

wird kompiliert und ausgeführt, um die Ausgabe zu erzeugen:

[1]int{42}
Nach dem Login kopieren
comparable 约束有意义,但如果函数不需要任何特定功能,则让它接受 anyEs könnte also davon abhängen, wie wichtig es ist, Slices und Arrays in Ihrer Funktion auszuschließen, was wiederum davon abhängt, was Ihre generische Funktion tut.

Ein häufigerer Ansatz könnte darin bestehen, eine generische Funktion nur auf den Umfang zu beschränken, der erforderlich ist, um sicherzustellen, dass die Funktion tun kann, was sie will. Das heißt, wenn die Funktion Argumente erfordert, die mit einem generischen Typ verglichen werden können, dann

.

Wenn Sie eine Funktion mit Werten eines bestimmten Typs (oder bestimmter Typen) einfach nicht willkürlich verwenden möchten, auch wenn daran im Hinblick auf die Funktionsweise der Funktion nichts Falsches ist, können Sie dies auf andere Weise tun (Codeüberprüfung, Pull-Request usw.) sind besser geregelt und reguliert. 🎜 🎜Es ist schwer, sicher zu sein, ohne genau zu wissen, was Ihre generische Funktion bewirken wird. :)🎜

Das obige ist der detaillierte Inhalt vonGolang-Generika schließen Slice- oder Array-Typen aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!