• golang1.8之泛型


    1. 泛型函数的声明
      func printlne[T any](s []T) {
      for _, v := range s {
      fmt.Println(v)
      }
      }
      func main() {
      printlne[int]([]int{45, 43, 2, 32, 32, 1, 21, 90})
      printlne[float64]([]float64{1.1, 2.2})
      printlne[string]([]string{"geng", "ze", "shi"})

      // 省略显示类型, 简单写法(泛型函数的简单使用)
      printlne([]int{3, 4, 65, 78, 6})
      }

    2.泛型定义切片声明
    type vector[T any] []T

    func printslice[T any](s []T) {
    for _, v := range s {
    fmt.Println(v)
    }
    }

    func main() {
    v1 := vector[int]{23, 454, 54645, 65}
    printslice(v1)
    v2 := vector[string]{"geng", "ze", "shi"}
    printslice(v2)
    }

    3.泛型定义map
    type M[k string, v int] map[k]v
    type MA[k string, v any] map[k]v

    func main() {
    m1 := M[string, int]{"geng": 23}
    fmt.Println(m1)
    m1["geng"] = 100
    fmt.Println(m1)

    m2 := MA[string, int]{"geng": 23433}
    fmt.Println(m2)
    

    }

    4.泛型定义之通道
    type C[T any] chan T

    func main() {
    c1 := make(C[int], 10)
    c1 <- 2
    c1 <- 1
    c2 := make(C[string], 10)
    c2 <- "geng"
    c2 <- "ze"
    fmt.Println(<-c1, <-c2)
    }

    5.泛型之定义限制传入类型
    type NumStr interface {
    Num | Str
    }

    type Num interface {
    ~int | ~int32
    }
    type Str interface {
    string
    }

    func add[T NumStr](a, b T) T {
    return a + b
    }

    func main() {
    fmt.Println(add(2, 4))
    fmt.Println(add("hello", "world"))
    }

    6.泛型之约束
    type Price int
    type ShowPrice interface {
    String() string
    }

    func (show Price) String() string {
    return strconv.Itoa(int(show))

    }

    func ShowPriceList[T ShowPrice](s []T) (ret []string) {
    for _, v := range s {
    ret = append(ret, v.String())
    }
    return
    }

    func main() {
    fmt.Println(ShowPriceList([]Price{1, 2}))
    }

    7.使用泛型判断两个值是否相等
    func FindIndex[T comparable](a []T, v T) int {
    for i, e := range a {
    if e == v {
    return i
    }
    }
    return -1
    }

    func main() {

    fmt.Println(FindIndex([]int{3223, 32, 3423, 23}, 23))
    

    }

  • 相关阅读:
    第一次使用博客,有点小激动
    oracle中的分区表基本介绍
    【转】Apache Common HttpClient使用之七种武器
    利用Iterator删除List里相近或相同的对象
    [转]给开发维护大型项目的Java开发者的建议
    JavaScript中String对象的一些方法
    [转] ORA00913: 值过多
    [转]HTTP协议详解
    DOM解析xml
    C# 中的 == 和 .Equals()
  • 原文地址:https://www.cnblogs.com/happyyou123/p/16188056.html
Copyright © 2020-2023  润新知