Go 1.17泛型语法样例集 | Gopher Daily (2021.04.22) ʕ◔ϖ◔ʔ

每日一谚:"The hardware folks will not put more cores into their hardware if the software isn’t going to use them, so, it is this balancing act of each other staring at each other, and we are hoping that Go is going to break through on the software side.” - Rick Hudson (2015)

Go技术生态

  1. Go标准库http与fasthttp服务端性能比较 - https://t.zsxq.com/Rv7Y7Mj

  2. 使用webrtc实现的命令行语音通讯 - https://github.com/smf8/kenny

  3. Go 1.17泛型语法样例集 - https://github.com/mattn/go-generics-example

  4. Go并发API模式 - https://marksalpeter.com/concurrent-api-patterns-in-go-52fcb5a9c681

  5. kubernetes node网络管理器 - https://github.com/kakao/network-node-manager

  6. 与Kubernetes共存:API生命周期 - https://thenewstack.io/living-with-kubernetes-api-lifecycles-and-you/

  7. 与Kubernetes共存:集群升级 - https://thenewstack.io/living-with-kubernetes-cluster-upgrades/

  8. ROS与docker指南 - https://roboticseabass.wordpress.com/2021/04/21/docker-and-ros/

  9. 实时性能数据监控 - https://github.com/netdata/netdata

  10. 从头学git - https://jwiegley.github.io/git-from-the-bottom-up/

  11. 谷歌实现24/7无碳能源目标的新进展 - https://blog.google/outreach-initiatives/sustainability/new-progress-toward-our-247-carbon-free-energy-goal/

  12. 新兴边缘云和计算基础设施 - https://thenewstack.io/emerging-edge-cloud-and-computing-infrastructure/

  13. 油管视频:运行于windows subsystem for linux(WSL)的linux gui程序 - https://www.youtube.com/watch?v=f8_nvJzuaSU

Go技术进阶专栏导读

“没有数据支撑的过早决策是万恶之源”! 我们可以通过为被测对象建立性能基准的方式去获得决策是否优化的支撑数据,同时我们也可以判断出对代码所做的任何更改是否对代码性能有所影响。而性能基准测试在 Go 语言中是“一等公民”,在Go中可以很方便的实施这一策略。Go进阶专栏“改善Go语⾔编程质量的50个有效实践”的第36篇文章《为被测对象建立性能基准》https://www.imooc.com/read/87/article/2439  将为你详解说明在Go中建立性能基准测试的最佳实践。

资料下载

关注公众号iamtonybai,发送特定关键字获取对应精品资料!

  • Go语言学习技术路线图2021版 - 发送go2021

  • GopherChina 2020技术大会ppt资料 - 发送gopherchina2020

  • GopherCon 2020大会技术ppt资料 - 发送gophercon2020

  • 《设计数据密集型应用程序》作者Martin Kleppmann新课“分布式系统”的讲义资料 - 发送distsys

  • O'Reilly的《分布式跟踪实战(Distributed Tracing in Practice)》 - 发送distrace

  • 加州伯克利的47页的“机器学习的数学基础”资料 - 发送math4ml

“Gopher部落”,新年新气象

“Gopher部落”正式转正(从试运营星球变成了正式星球)!“gopher部落”旨在打造一个精品Go学习和进阶社群,目前虽小,但持续力很强。在2021年上半年,部落将策划两个专题系列分享,并且是部落独享哦:

  • Go技术书籍的书摘和读书体会系列

  • Go与eBPF系列

感谢大家对本星球的支持!

联系方式

  • 有意想学习容器或Kubernets的童鞋可以了解一下我的慕课网实战课:k8s实战 - https://coding.imooc.com/class/284.html

  • gopherdaily归档:https://github.com/bigwhite/gopherdaily

  • 编辑:Tony Bai (https://tonybai.com)

  • 邮件订阅:https://gopher-daily.com/

  • 知乎Go进阶专栏:https://www.zhihu.com/column/c_1352639051791454208

  • “Gopher部落”知识星球:https://public.zsxq.com/groups/51284458844544

  • 微信公众号:iamtonybai

往期推荐

使用reflect包在反射世界里读写各类型变量

Go标准库flag包的“小陷阱”

Go语言“十诫”[译]

Go泛型语法又出“幺蛾子”:引入type set概念和移除type list中的type关键字

http.Client的连接行为控制详解

Go语言中常见的几种反模式[译]

究竟是什么让Go语言成为恶意软件作者的最爱

<think>嗯,用户想了解在类上定义的使用方法,特别是语法部分。他们提到对不太理解,需要多些子和解释。首先,我得确认用户的基础,可能他们已经有Java或其他语言的经验,但概念比较模糊。 首先,我应该从基本概念入手,解释的作用,比如类安全,避免强制类转换,提高代码复用。然后,具体到在类上定义语法:class 类名<1,2...>{},这部分需要详细展开,说明参数的位置和使用方法。 接下来,需要举几个子,由浅入深。第一个子可能是一个简单的容器类,比如Box<T>,展示如何用存储不同类的数据。这用户能直观看到同一个类如何适应不同数据类。 然后,可能需要展示多个参数的子,比如Pair<K,V>,说明如何处理多个类。这里可以结合不同数据类的组合,比如String和Integer,或者Integer和Double,让子更生动。 还要注意边界情况,比如如果用户没有指定,会发生什么,这时候应该提到默认是Object,但可能引发类安全问题,强调使用的好处。 另外,用户可能需要了解在方法中的使用,但问题中在类上,所以应该专注于类的子,不过可以稍微提一下方法中的作为扩展。 可能用户在实际使用中会遇到如何限制的问题,比如使用extends关键字,但根据用户的问题描述,可能暂时不需要深入,但可以简单提及,作为进一步学习的点。 需要检查子是否足够清晰,避免太过复杂的场景,确保每个步骤都有解释,比如类定义时的位置,实化时如何指定具体类,以及如何在这些类中使用作为字段、方法参数或返回类。 还要注意术语的一致性,比如“类参数”和“参数”是否使用正确,避免混淆。同时,确保代码示正确,没有语法错误,比如正确使用尖括号,避免中文符号。 最后,总结的优点,帮助用户巩固理解,并鼓励他们尝试自己编写代码,加深印象。可能还需要提醒常见的错误,比如忘记指定导致的类转换异常,或者误用原始类的情况。</think>在类上的使用是Java中非常重要的类安全机制,下面我用通俗易懂的方式配合多个示为你讲解: --- ### 一、类基本概念 **作用**:让类可以处理多种数据类,同时保持类安全(避免强制类转换) **语法**: ```java class 类名<T1, T2...> { // T1, T2是类参数(标识符) // 类成员可以使用这些类 } ``` --- ### 二、基础示 #### 示1:最简单的类 ```java // 定义类 class Box<T> { private T content; public void set(T content) { this.content = content; } public T get() { return content; } } // 使用示 Box<String> stringBox = new Box<>(); stringBox.set("Hello"); String str = stringBox.get(); // 直接获取String类,无需强制转换 Box<Integer> intBox = new Box<>(); intBox.set(100); int num = intBox.get(); // 直接获取Integer自动拆箱为int ``` **关键点**: - `T` 是类占位符 - 创建实时指定具体类 - 编译器会进行类检查 --- #### 示2:多个类参数的类 ```java class Pair<K, V> { private K key; private V value; public Pair(K key, V value) { this.key = key; this.value = value; } public K getKey() { return key; } public V getValue() { return value; } } // 使用示 Pair<String, Integer> student = new Pair<>("Alice", 95); Pair<Integer, Double> coordinate = new Pair<>(10, 20.5); ``` --- ### 三、进阶使用示 #### 示3:类与合结合 ```java class DataProcessor<T> { private List<T> dataList = new ArrayList<>(); public void addData(T data) { dataList.add(data); } public void processAll() { for(T item : dataList) { System.out.println("Processing: " + item); } } } // 使用示 DataProcessor<LocalDate> dateProcessor = new DataProcessor<>(); dateProcessor.addData(LocalDate.now()); dateProcessor.addData(LocalDate.of(2023, 12, 25)); ``` --- #### 示4:带有限制的(边界限定) ```java class NumberBox<T extends Number> { // 限定T必须是Number的子类 private T number; public double getSquare() { return number.doubleValue() * number.doubleValue(); } } // 正确使用 NumberBox<Integer> intBox = new NumberBox<>(); NumberBox<Double> doubleBox = new NumberBox<>(); // 错误使用(编译时报错) // NumberBox<String> stringBox = new NumberBox<>(); ``` --- ### 四、类的重要特性 1. **类安全**:编译时检查类错误 2. **消除强制转换**:获取数据时自动处理类 3. **代码复用**:同一套逻辑处理不同数据类 4. **类擦除**:运行时信息会被擦除(重要底层特性) --- ### 五、使用场景建议 1. 容器类(如自定义合) 2. 数据包装类(如结果包装器) 3. 工具类(处理不同类数据的工具) 4. 需要类安全的回调机制 试着写一个简单的类,比如`Storage<T>`类,包含存储和获取数据的方法,这会帮助你更好地理解这个概念。如果遇到具体问题,可以随时问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值