php是最好的语言

golang 泛型demo

go 1.18版本新出的泛型

package main

import "fmt"

// ~代表衍生 如果不加~ 使用MyInt 作为int传入就会报错
type MyInt int
type AA interface {
   ~int | float64
}

// 定义一个泛型函数
func AddNum[T AA](a T, b T) T {
   return a + b
}

// 定义一个泛型切片
type S[T int | float64] []T

// 定义一个泛型map
type M[K string, V any] map[K]V

// 定义一个泛型结构体
type St[T int | string, A int | bool] struct {
   Name string
   Data T
   Sec  A
}

// 定义一个泛型chan
type C[T int | string] chan T

func main() {

   // 测试泛型函数
   var t MyInt = 2

   c1 := AddNum(4, t)
   fmt.Println(c1)

   c := AddNum(4, 5)
   fmt.Println(c)

   d := AddNum(4.0, 5.9)
   fmt.Println(d)

   // 测试泛型切片
   v1 := S[int]{1, 2, 3, 4}
   fmt.Println(v1)

   v2 := S[float64]{1.0, 2.2, 3.3, 4.4}
   fmt.Println(v2)

   // 测试泛型map
   m1 := M[string, int]{"key": 1}
   fmt.Println(m1)

   m2 := M[string, string]{"key": "valye"}
   fmt.Println(m2)

   // 测试泛型结构体
   st1 := St[int, int]{
      "xutao",
      1,
      1,
   }
   fmt.Println(st1)

   st2 := St[string, bool]{
      "zq",
      "2022",
      false,
   }
   fmt.Println(st2)

   // 测试泛型chan
   ch1 := make(C[int], 1)
   ch1 <- 1
   fmt.Println(<-ch1)

   ch2 := make(C[string], 1)
   ch2 <- "test"
   fmt.Println(<-ch2)
}


作者:xTao 分类:LNMP 浏览:2244 评论:0