Go最全新提案:Go 泛型玩出花来了,switch type 登场,2024年最新Golang入门

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

case fmt.Stringer:

}

}

复制代码

类型 S 能够支持 string 和 fmt.Stringer 类型,case 配套对应实现。

案例二:近似元素

type Constraint interface {

~int | ~int8 | ~string

}

func ThisSyntax[T Constraint]( “T Constraint”) {

switch type T {

case ~int | ~int8:

case ~string:

}

}

func IsClearerThanThisSyntax[T Constraint]( “T Constraint”) {

switch type T {

case interface{~int | ~int8 }:

case interface{ ~string }:

}

}

复制代码

类型 T 可能有很多类型,程序中用到了近似元素,也就是基础类型是 int、int8、string,这些类型中的任何一种都能够满足这个约束。

为此,switch-type 支持了,case 也要配套支持该特性。

争议点


看到这里可能大家也想到了,这个味道很似曾相识,好像某个语法能够支持。因此,这个提案下最有争议的,就是与原有的类型断言的重复。

原有的类型断言如下:

switch T.(type) {

case string:

default:

}

复制代码

新的类型判别如下:

switch type T {

case A1:

case A2, A3:

}

复制代码

这么咋一看,其实类型断言的完全可以取代新的,那岂不是重复建设,造轮子了?

其实是没有完全取代的。差异点如下:

type ApproxString interface { ~string }

func F[T ApproxString](v T “T ApproxString”) {

switch (interface{})(v).(type) {

case string:

fmt.Println(v)

default:

panic(“脑子没进煎鱼”)

}

}

type MyString string

func main() {

F(MyString(“脑子进煎鱼了”))

}

复制代码

看出来差别在哪了吗,答案是什么?

答案是:会抛出恐慌(panic)。

你可能纠结了,问题出在哪里?这传入的 ”脑子进煎鱼了“ 的类型是 MyString,他的基础类型是 string 类型,也满足 ApproxString 类型的近似类型 ~string 的要求,怎么就不行了…

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

94024)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值