Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah parameter pembolehubah golang digunakan dalam fungsi generik?

Bolehkah parameter pembolehubah golang digunakan dalam fungsi generik?

PHPz
PHPzasal
2024-04-29 14:06:01393semak imbas

Dalam Go, parameter pembolehubah boleh digunakan untuk fungsi generik, membenarkan penciptaan fungsi generik yang menerima nombor pembolehubah parameter dan sesuai untuk pelbagai jenis. Sebagai contoh, anda boleh mencipta Mod fungsi generik yang mencari elemen yang paling kerap berlaku dalam senarai tertentu: Mod menerima bilangan pembolehubah unsur jenis T. Ia mengira elemen dengan membuat kiraan untuk setiap elemen. Kemudian ia mencari elemen yang paling banyak muncul dan mengembalikannya sebagai mod. Dalam fungsi utama, anda boleh memanggil fungsi Mod untuk senarai rentetan dan senarai integer, yang masing-masing akan mengembalikan rentetan dan nombor yang paling kerap.

Bolehkah parameter pembolehubah golang digunakan dalam fungsi generik?

Fungsi generik dengan parameter variadik dalam Go

Prakata

Generik telah diperkenalkan dalam Go 1.18, membenarkan kami mencipta fungsi dan jenis parameter yang tidak jenis semula tertentu Catatan blog ini akan meneroka sama ada parameter pembolehubah dalam Go sesuai untuk fungsi generik dan menyediakan kes praktikal.

Varameters

Fungsi variadik ialah fungsi yang menerima nombor pembolehubah parameter. Dalam Go, parameter pembolehubah biasanya dinyatakan menggunakan sintaks ..., contohnya: ... 语法表示,例如:

func Sum(nums ...int) int {
  sum := 0
  for _, num := range nums {
    sum += num
  }
  return sum
}

泛型函数

泛型函数是参数类型可指定的函数。在 Go 中,泛型函数使用 [] 语法表示,例如:

func Max[T comparable](values ...T) T {
  max := values[0]
  for _, value := range values {
    if value > max {
      max = value
    }
  }
  return max
}

变参和泛型

变参和泛型在 Go 中可以一起使用,允许我们创建可接受可变数量参数且适用于多种类型的泛型函数。

实战案例

任务目标:创建泛型函数来查找给定列表中出现次数最多的元素。

代码:

import "fmt"

func Mode[T comparable](values ...T) T {
  counts := map[T]int{}
  var mode T
  var maxCount int

  // 统计元素计数
  for _, value := range values {
    counts[value]++
  }

  // 找出出现次数最多的元素
  for value, count := range counts {
    if count > maxCount {
      maxCount = count
      mode = value
    }
  }

  return mode
}

func main() {
  // 字符串列表
  strs := []string{"apple", "orange", "apple", "pear", "banana"}
  fmt.Println("最常见的字符串:", Mode(strs...)) // apple

  // 整数列表
  nums := []int{1, 2, 3, 2, 4, 2, 5}
  fmt.Println("最常见的数字:", Mode(nums...)) // 2
}

说明:

  • Mode 函数是一个泛型函数,接受可变数量的 T 类型元素。
  • 它返回出现次数最多的元素,并在 counts 中统计每个元素的出现次数。
  • main 函数中,我们创建了两个列表:一个字符串列表和一个整数列表,并为每个列表调用了 Moderrreee
  • Fungsi generik
🎜Fungsi generik ialah fungsi yang jenis parameternya boleh ditentukan. Dalam Go, fungsi generik dinyatakan menggunakan sintaks [], contohnya: 🎜rrreee🎜🎜Parameter pembolehubah dan generik🎜🎜🎜Parameter pembolehubah dan generik boleh digunakan bersama dalam Go, membolehkan kami mencipta Generik fungsi yang menerima bilangan argumen yang berubah-ubah dan berfungsi dengan banyak jenis. 🎜🎜🎜Kes Praktikal🎜🎜🎜🎜Objektif Tugasan: 🎜Mencipta fungsi generik untuk mencari elemen yang paling banyak kejadian dalam senarai yang diberikan. 🎜🎜🎜Kod: 🎜🎜rrreee🎜🎜Penerangan: 🎜🎜
    🎜 Fungsi Mod ialah fungsi generik yang menerima nombor pembolehubah bagi elemen jenis T. 🎜🎜Ia mengembalikan elemen dengan kejadian terbanyak dan mengira kejadian setiap elemen dalam kiraan. 🎜🎜Dalam fungsi utama, kami mencipta dua senarai: senarai rentetan dan senarai integer dan memanggil fungsi Mod untuk setiap senarai. 🎜🎜Output menunjukkan bahawa unsur yang paling kerap ialah "epal" (untuk senarai rentetan) dan 2 (untuk senarai integer). 🎜🎜

Atas ialah kandungan terperinci Bolehkah parameter pembolehubah golang digunakan dalam fungsi generik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn