golang 1.18泛型

泛型(1.18新特性)

泛型的概念理解

Go语言他是在进化的,不断的迭代,优化功能!

1.0 - 1.19 (1.20)/ 和最开始Go语言比起来发生了很多变化。

1.7 Context

1.11 modules

1.13 error嵌套

1.18 泛型(类型参数)

https://segmentfault.com/a/1190000041634906

泛型的出现,很受期待,但是很少用!场景不多。

打印一个切片(传递不同的参数string 、int)

package main

import (
   "fmt"
)

func main() {
   
   is := []int{
   1, 2}
   //strs := []string{"kuangshen", "xuexiangban"}
   printSlice(is)
   //printSlice(strs)
}

// 如何实现一个方法可以打印上面不同类型的切片呢?  反射
func printSlice(s interface{
   }) {
   
   // 断言 x.(T), 如果x实现了T,那么就将 x转换为T类型
   for _, v := range s.([]string) {
   
      fmt.Println(v)
   }
}

这种情况,传递的参数进来,需要自己做N种判断来进行适配。

泛型

思考:不限定参数的类型,让调用的人自己去定义类型。

// 参数的类型是不确定的,让用户自己指定。
// 泛型也是使用 [],和数组很像!
// 
func printSlice[T any](s []T) {
   
	for _, v := range s {
   
		fmt.Println(v)
	}
}

printSlice , [T any] 泛型的约束!由于我们不确定这个函数的参数类型。我们希望用户给我们传递这个值。

print[T string](name T)
print[T string|int](name T)


func Min[T int|int8|int16|int32|int64](a,b T){

}

泛型的作用:

1、减少重复性的代码,提高安全性

  • 针对不同的类型,写了相同逻辑的代码,我们就可以通过泛型来简化代码!

2、在1.18版本之前 反射 来实现。 泛型并不能完全取代反射!

泛型:多的多个类型(类型可以是不确定的)

var 变量名 数据类型 = 值
var 变量名 T = 值 // 泛型的逻辑

泛型类型

package main

import "fmt"

// s1 是我们自己定义的类型 ,本质 []int
type s1 []int
type s2 []float64
type s3 []float32

// 我们定义的结构都是一样的,只是它的类型不同,就需要重新定义这么多的类型。
// 思考:是否有一种机制,只定义一个类型就可以代表上面的所有类型?
// 泛型:类型 参数化了!   参数:人为传递的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sanyueshui_Go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值