Heim > Backend-Entwicklung > Golang > Verstehen Sie die Kernkonzepte von Golang-Generika

Verstehen Sie die Kernkonzepte von Golang-Generika

WBOY
Freigeben: 2024-04-03 12:18:01
Original
555 Leute haben es durchsucht

Go-Generika ermöglichen die Erstellung wiederverwendbarer Typen und Funktionen, ohne den Code selbst zu ändern. Dazu gehören: Generische Typen: Verwenden Sie Typparameter, sodass beim Erstellen des Typs Parametertypen angegeben werden können (z. B. []T, map[K]V). Generische Funktionen: Bei der Verwendung von Typparametern muss eine explizite Typparameterliste angegeben werden. Einschränkungen: Beschränken Sie die Verwendung generischer Typen. Verwenden Sie die Schlüsselwörter „any“, „comparable“ und „type interfaces“, um Typbeschränkungen für Typparameter anzugeben. Mit diesen Konzepten ist es möglich, robusteren und universelleren Code zu erstellen, beispielsweise generische Sortieralgorithmen.

Verstehen Sie die Kernkonzepte von Golang-Generika

Verstehen Sie die Kernkonzepte von Golang-Generika

Vorwort
Generika ist eine wichtige neue Funktion, die in Go 1.18 eingeführt wurde und es uns ermöglicht, wiederverwendbare Typen zu erstellen, ohne den Code selbst und die Funktionen zu ändern. In diesem Tutorial werden die Kernkonzepte von Generika in Go vorgestellt und ihre Verwendung anhand praktischer Beispiele demonstriert.

Generische Typen
Generische Typen parametrisieren Typen, sodass wir beim Erstellen des Typs Parametertypen angeben können. Dies kann durch die Verwendung eines Typerstellers wie []T oder map[K]V erreicht werden, wobei T und V code> sind Werttypen bzw. Schlüsseltypen. <code>[]Tmap[K]V 等类型创建器来实现,其中 TV 分别是值类型和键类型。

// 定义一个泛型 slice 类型
type MySlice[T any] []T

// 创建一个 MySlice[int] 实例
s := MySlice[int]{1, 2, 3}
Nach dem Login kopieren

泛型函数
泛型函数也可以使用类型参数,但它们还必须指定显式的类型参数列表。

// 定义一个将切片元素加倍的泛型函数
func Double[T ~int | ~float64](s []T) []T {
  for i, v := range s {
    s[i] = v * 2
  }
  return s
}
Nach dem Login kopieren

约束
约束允许我们通过指定类型参数的类型限制来限制泛型类型的用法。约束使用关键字 anycomparable

// 定义一个泛型 map 类型,键值为可比较类型
type MyMap[K comparable, V any] map[K]V

// 定义一个泛型函数来查找切片中的最大值
func Max[T any](s []T) T where T: ~int | ~float64 {
  max := s[0]
  for _, v := range s {
    if v > max {
      max = v
    }
  }
  return max
}
Nach dem Login kopieren

Generische FunktionenGenerische Funktionen können auch Typparameter annehmen, müssen aber auch eine explizite Typparameterliste angeben.

// 定义泛型交换函数
func Swap[T any](s []T, i, j int) {
  temp := s[i]
  s[i] = s[j]
  s[j] = temp
}

// 定义泛型排序函数
func Sort[T any](s []T) where T: ~int | ~float64 | ~string {
  for i := 0; i < len(s); i++ {
    for j := i + 1; j < len(s); j++ {
      if s[j] < s[i] {
        Swap(s, i, j)
      }
    }
  }
}
Nach dem Login kopieren

EinschränkungenEinschränkungen ermöglichen es uns, die Verwendung generischer Typen einzuschränken, indem wir Typeinschränkungen für Typparameter festlegen. Einschränkungen werden mithilfe der Schlüsselwörter any, comparable und type interfaces implementiert.

rrreee

Praktisches Beispiel🎜🎜Lassen Sie uns einen einfachen Sortieralgorithmus mit Generika erstellen: 🎜rrreee🎜🎜Fazit🎜🎜🎜Generika in Go bieten leistungsstarke Tools für die Wiederverwendung und Flexibilität von Code. Durch das Verständnis der Typparametrisierung, Einschränkungen und praktischen Beispiele können Entwickler diese Funktion nutzen, um robusteren und vielseitigeren Code zu erstellen. 🎜

Das obige ist der detaillierte Inhalt vonVerstehen Sie die Kernkonzepte von Golang-Generika. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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