2022年03月22日 Go生态洞察:泛型介绍


🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁

🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐

🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:

☁️🐳 Go语言开发者必备技术栈☸️:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥


在这里插入图片描述

文章目录

    • 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
  • 2022年03月22日 Go生态洞察:泛型介绍
      • 🐾 摘要
      • 🐾 引言
    • 🐾 正文
      • 🐅 泛型基础
      • 🐅 类型参数
      • 🐅 类型集
      • 🐅 类型推断
      • 🐅 实践中的类型推断
      • 🐅 代码示例
      • 🐅 总结
      • 🐾 下一篇预告
  • 原创声明

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

2022年03月22日 Go生态洞察:泛型介绍

🐾 摘要

作为猫头虎博主,今天来聊聊Go语言的一个重大更新——泛型!在这篇文章里,我将深入探讨Go 1.18中引入的泛型功能。咱们不仅会涉及基础知识,还会深挖一些高级应用。如果你对Go的新特性感兴趣,别错过这次深入洞察!

🐾 引言

Go 1.18的发布带来了对泛型的支持,这是自Go首次开源发布以来的最大变化。泛型让代码能够独立于正在使用的特定类型。本文将介绍这一新特性的关键点,涵盖类型参数、类型集、类型推断等方面。

🐾 正文

🐅 泛型基础

泛型允许函数和类型使用一组类型。它在Go语言中添加了三大新内容:

  1. 函数和类型的类型参数。
  2. 将接口类型定义为类型集,包括没有方法的类型。
  3. 类型推断,允许在许多情况下在调用函数时省略类型参数。

🐅 类型参数

类型参数看起来像普通参数列表,但使用方括号而非圆括号。以下是一个基础的非泛型Min函数示例,用于比较浮点值:

func Min(x, y float64) float64 {if x < y {return x}return y
}

通过添加类型参数列表,我们可以将此函数变为泛型。例如,添加单个类型参数T并用T替换float64

import "golang.org/x/exp/constraints"func GMin[T constraints.Ordered](x, y T) T {if x < y {return x}return y
}

现在,可以通过像x := GMin[int](2, 3)这样的调用来使用此函数。

🐅 类型集

类型参数列表中每个类型参数的类型定义了类型集。例如,泛型GMin中的Ordered约束描述了所有具有可排序值的类型集。在Go中,类型约束必须是接口。例如,interface{ int|string|bool }定义了包含intstringbool类型的类型集。

🐅 类型推断

类型推断是最复杂的语言变化之一。例如,函数参数类型推断允许从函数的参数推断出类型参数。另一种是约束类型推断,它从类型参数约束中推断出类型参数。

🐅 实践中的类型推断

虽然类型推断的细节复杂,但使用起来非常直接:类型推断要么成功,要么失败。如果成功,就可以省略类型参数,调用泛型函数就像调用普通函数一样。

🐅 代码示例

以下是一些实际的代码示例,展示了泛型在Go中的应用:

基础Min函数

func Min(x, y float64) float64 {if x < y {return x}return y
}

泛型GMin函数

import "golang.org/x/exp/constraints"func GMin[T constraints.Ordered](x, y T) T {if x < y {return x}return y
}

类型推断应用

var a, b, m float64
m = GMin(a, b) // 无需类型参数

🐅 总结

泛型是Go 1.18中一个重大的新特性,尽管目前还没有在生产环境中得到大规模测试,

但我们相信这一功能的实现是高质量的。泛型的引入让Go程序员的工作变得更高效。

特性描述
类型参数允许函数和类型具有类型参数
类型集接口定义为类型集,包括无方法的类型
类型推断在许多情况下允许省略类型参数

本文被猫头虎的Go生态洞察专栏收录,详情点击这里

🐾 下一篇预告

下一篇文章将探讨Go如何缓解供应链攻击,敬请期待!How Go Mitigates Supply Chain Attacks�

在这里插入图片描述

原创声明

======= ·

  • 原创作者: 猫头虎

  • 作者wx: Libin9iOak
    在这里插入图片描述

  • 作者公众号: 猫头虎技术团队

在这里插入图片描述

学习复习Go生态

本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。

作者保证信息真实可靠,但不对准确性和完整性承担责任

未经许可,禁止商业用途。

如有疑问或建议,请联系作者。

感谢您的支持与尊重。

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HT71778 实时音频信号跟踪同步升压转换器的特性

HT71778是一款高功率、全集成升压转换器&#xff0c;集成16mΩ功率开关管和18mΩ同步整流管&#xff0c;为便携式系统提供G效的小尺寸处理方案。 HT71778 实时音频信号跟踪同步升压转换器的特性&#xff1a; ・实时音频信号跟踪的电源供电 SN 短接地, VIN 2.7~4.5V, VOUT 5…

Hdoop学习笔记(HDP)-Part.02 核心组件原理

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

二、ZooKeeper集群搭建

目录 1、概述 2、安装 2.1 第一步&#xff1a;下载zookeeeper压缩包 2.2 第二步&#xff1a;解压 ​​​​​​​2.3 第三步&#xff1a;修改配置文件 ​​​​​​​2.4 第四步&#xff1a;添加myid配置 ​​​​​​​2.5 第五步&#xff1a;安装包分发并修改myid的值…

《微信小程序开发从入门到实战》学习三十八

4.2 云开发JSON数据库 4.2.9 条件查询与查询指令 在查询数据时&#xff0c;有时需要对查找的数据添加一些限定条件&#xff0c;只获取满足给定条件的数据&#xff0c;这样的查询称为条件查询。 可以在集合引用上使用where方法指定查询条件&#xff0c;再用get方法&#xff0…

IBL环境贴图原理及着色器实现【基于图像的照明】

IBL - Image Based Lighting - 也就是基于图像的照明&#xff0c;是一组照亮物体的技术&#xff0c;不是像上一章那样通过直接分析光&#xff0c;而是将周围环境视为一个大光源。 这通常是通过操作立方体贴图环境贴图&#xff08;取自现实世界或从 3D 场景生成&#xff09;来完…

基于hadoop下的hbase安装

简介 HBase是一个分布式的、面向列的开源数据库&#xff0c;该技术来源于Fay Chang所撰写的Google论文“Bigtable&#xff1a;一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统&#xff08;File System&#xff09;所提供的分布式数据存储一样&#xff0c;…

YOLOv8创新魔改教程(一)如何进行模块创新

YOLOv8创新魔改教程&#xff08;一&#xff09;如何进行模块创新 YOLOv8创新魔改教程 本人研一&#xff0c;最近好多朋友问我要如何修改模型创新模块&#xff0c;就想着不如直接开个专栏歇一歇文章&#xff0c;也算是对自己学习的总结&#xff0c;本专栏以YOLOv8为例&#xf…

「C++」类和对象2

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;C启航 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 文章目录 &#x1f349;前言&#x1f349;构造函数&#x1f34c;参数&#x1f34c;默认构造函数&#x1f95d;两种类型&#x1f95d;编译…

优化问题,详解静态优化

优化问题&#xff0c;尤其静态优化问题&#xff0c;在控制系统设计中随处可见&#xff0c;例如基于燃油经济性和驾驶体验的多目标优化的汽车发动机 MAP 标定&#xff0c;基于性能指标优化的飞行器结构设计参数优化&#xff0c;以实验数据与模型输出匹配为目标的电池 RC 等效电路…

Python基础学习快速入门

文章目录 Number变量String字符串Def函数Class类List列表Tuple元组Dictionary字典Set集合值与引用类型if条件控制Loop循环 Number变量 python直接赋值&#xff0c;不需要定义变量类型。不需要**,逗号结尾符 使用print**直接进行输出 #赋值 a 1.0 print(a)a 7 print(a)p…

带删除的并查集

Almost Union-Find 支持三种操作 合并 x x x和 y y y所在的集合把 x x x移到 y y y所在的集合求 x x x所在的集合的元素个数和元素之和 操作1和3是基本的并查集的操作. 关键在于操作 2 2 2: 若使用朴素的并查集&#xff0c;把节点 1 1 1合并到 3 3 3所在的集合&#xff0c;会…

ES-ELSER 如何在内网中离线导入ES官方的稀疏向量模型(国内网络环境下操作方法)

ES官方训练了稀疏向量模型&#xff0c;用来支持语义检索。&#xff08;目前该模型只支持英文&#xff09; 最好是以离线的方式安装。在线的方式&#xff0c;在国内下载也麻烦&#xff0c;下载速度也慢。还不如用离线的方式。对于一般的生产环境&#xff0c;基本上也是网络隔离的…

SQL注入漏洞的检测及防御方法

SQL注入&#xff08;SQL Injection&#xff09;是一种广泛存在于Web应用程序中的严重安全漏洞&#xff0c;它允许攻击者在不得到授权的情况下访问、修改或删除数据库中的数据。这是一种常见的攻击方式&#xff0c;因此数据库开发者、Web开发者和安全专业人员需要了解它&#xf…

盘点68个Android游戏Game源码安卓爱好者不容错过

盘点68个Android游戏Game源码安卓爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 Game下载链接&#xff1a;https://pan.baidu.com/s/1hWnuttrqTfwDKYvuVMuSwQ?pwd8888 提取码&#xff1a;8888 项目名称 2048…

混合使用Windows和Linux子系统的工具和命令

文章目录 在Windows中运行Linux命令使用PowerShell混合使用Linux和Windows命令通过power shell在Windows混合使用Linux工具在Linux中混合使用Windows 工具 推荐阅读 Windows和Linux的工具和命令可以通过WSL互换使用。 可以在Linux子系统中运行Windows命令&#xff0c;也可以在W…

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃 出现下列问题&#xff0c;如何解决&#xff1f; 1. LabVIEW 程序因image.cpp或drawmgr.cpp中的错误而崩溃 2. 正在通过cRIO-9034运行独立的LabVIEW应用程序&#xff0c;但它因drawmgr.cpp中的错误而崩溃 …

SSM项目实战-POJO设计

1、schedule_db.sql CREATE DATABASE schedule_db CHARACTER SET utf8 ;USE schedule_db;CREATE TABLE sys_schedule (sid int NOT NULL AUTO_INCREMENT COMMENT 日程id,uid int DEFAULT NULL COMMENT 用户id,title varchar(50) DEFAULT NULL COMMENT 标题,completed int DEFAU…

Python 中的 FileSystem Connector:打通文件系统的便捷通道

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python 中的 FileSystem Connector&#xff1a;打通文件系统的便捷通道&#xff0c;全文4100字&#xff0c;阅读大约11分钟。 在现代软件开发中&#xff0c;文件系统是不可或…

1+x网络系统建设与运维(中级)-练习题

一.给设备重命名 同理可得&#xff0c;所有交换机和路由器都用一下命令配置 <Huawei>sys [Huawei]sysn LSW1 二.配置VLAN LSW1&#xff1a; [LSW1]vlan batch 10 20 [LSW1]int e0/0/1 [LSW1-Ethernet0/0/1]port link-type access [LSW1-Ethernet0/0/1]port default vlan…

Leetcode 剑指 Offer II 055. 二叉搜索树迭代器

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 实现一个二叉搜索树迭代器类 BSTIterator &#xff0c;表示一个按…