iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >go语言中泛型是什么
  • 667
分享到

go语言中泛型是什么

泛型GoGolanggo语言 2023-05-14 19:05:32 667人浏览 八月长安
摘要

在Go语言中,泛型就是编写模板适应所有类型,只有在具体使用时才定义具体变量类型;通过引入类型形参和类型实参的概念,让一个函数能够处理多种不同类型数据的能力,这种编程方式被称为泛型编程。本教程操作环境:windows7系统、GO 1.18版本

Go语言中,泛型就是编写模板适应所有类型,只有在具体使用时才定义具体变量类型;通过引入类型形参和类型实参的概念,让一个函数能够处理多种不同类型数据的能力,这种编程方式被称为泛型编程。

go语言中泛型是什么

教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

Go 1.18 版本新增了一个功能:支持泛型编程。

如果是其他语言转 Go 语言的开发者,那么能够理解什么是泛型,以及如何使用?

但只是 Go 语言的初学者,并没有接触过泛型编程的人来说,这个功能可能一头雾水。

本文希望能让为接触泛型编程的人也能很好的理解和使用 Go 的泛型

A general guideline for programming Go: write Go programs by writing code, not by defining types
Go 编程的通用准则:通过编写代码,而不是定义类型来写 Go 程序

什么是泛型?


泛型就是编写模板适应所有类型,只有在具体使用时才定义具体变量类型

函数的形参和实参

函数定义时的参数是形参 (parameter),在实际使用函数传入的参数为实参 (argument)

假设有一个加法函数,这个函数有两个参数都是 int 类型,返回值也是 int;定义如下:

func Test(a,b int) int {
    return a + b
}

如果传入的两个实参都是 int 类型,那么函数自然能够正常执行。但是这个函数只能用来做 int 类型的加法运算,假设还需要进行 float64 类型的加法运算,我们就需要再写一个函数。【相关推荐:Go视频教程、编程教学】

两三个类型加法计算写出来也不麻烦,复制粘贴而已。但是如果所有可计算类型都要进行加法运行,那么代码就会不够精简,阅读起来很不友好。

这时,我们就会思考,如果一个函数能够接收所有的计算类型,这样就两三行代码写完一个计算函数了。只需要在定义函数形参时,不指定具体类型,只是定义一个类型组合或者一个占位符,就能够实现这个功能。

这个类型组合或占位符就是类型参数,在定义时使用类型形参 (type parameter),实际调用时使用类型实参 (type argument)。

一开始的计算函数转为类型形参函数如下:

// T 是一个类型形参,在定义函数时类型是不确定的,这里的 any 是 go 泛型定义好的一组类型组合
func Test[T any](a,b T) T {
    return a + b
}
// 调用时传入类型实参,伪代码Test[int](1,2)
Test(1,2)

通过引入类型形参类型实参的概念,让一个函数能够处理多种不同类型数据的能力,这种编程方式被称为泛型编程

为什么是泛型?

前面的加法示例,除了使用泛型,还可以通过 Go 的接口+反射实现动态数据类型处理。泛型能实现的功能通过接口+反射也基本能够实现,但是如果你使用过反射,那么就会明白反射机制有很多问题:

  • 使用麻烦,需要有很强的逻辑思维
  • 失去编译时类型检查,容易出现 bug
  • 性能不好

但也并不能说所有场景都使用泛型,泛型并不是万金油,泛型有对应的适用场景,可以阅读一下 Go 泛型设计者 Ian Lance Taylor 在官方博客网站上发表了一篇文章 when to use generics

一句话总结泛型使用场景:当你分别为不同类型写逻辑完全相同的代码时,那么使用泛型是最合适的选择

Go 泛型的示例


泛型函数

// Add sums the values of T. It supports string, int, int64 and float64
//
// @Description A simple additive generic function
// @Description 一个简单的加法泛型函数
// @parameter	a, b	T string | int | int64 | float64	"generics parameter"
// @return		c		T string | int | int64 | float64	"generics return"
func Add[T string | int | int64 | float64](a, b T) T {
	return a + b
}

// 使用
Add(1, 2)
Add(1.0,2.0)

泛型类型

// MyChan Custom generics chan type
// 一个泛型通道,可用类型实参 int 或 string 实例化
type MyChan[T int | string] chan T

声明类型限制 (type constraint)

在 Go 的类型限制是通过接口实现

// CustomizationGenerics custom generics
//
// @Description custom generics, which are type restrictions
// @Description ~is a new symbol added to Go 1.18, and the ~ indicates that the underlying type is all types of T. ~ is pronounced astilde in English
// @Description 自定义泛型,即类型限制
// @Desciption ~ 是 Go 1.18 新增的符号,~ 表示底层类型是T的所有类型。~ 的英文读作 tilde
//
// @Example With the addition of ~, MyInt can be used, otherwise there will be type mismatch
// @Example 加上 ~,那么 MyInt 自定义的类型能够被使用,否则会类型不匹配
type CustomizationGenerics interface {
	~int | ~int64
}

以上就是go语言中泛型是什么的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: go语言中泛型是什么

本文链接: https://www.lsjlt.com/news/203420.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • go语言中泛型是什么
    在go语言中,泛型就是编写模板适应所有类型,只有在具体使用时才定义具体变量类型;通过引入类型形参和类型实参的概念,让一个函数能够处理多种不同类型数据的能力,这种编程方式被称为泛型编程。本教程操作环境:windows7系统、GO 1.18版本...
    99+
    2023-05-14
    泛型 Go Golang go语言
  • go语言中泛型是的是什么
    今天小编给大家分享的是go语言中泛型是的是什么,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。在go语言中,泛型就是编写模板适应所有类型,只有在具体使用时才定义具体变量类型;通过引入类...
    99+
    2023-07-04
  • Go语言的泛型是真泛型吗
    Go语言的泛型在设计上并不是真正的泛型。在其他编程语言中,泛型通常指的是可以在函数或数据结构中使用不特定类型的能力。然而,Go语言的...
    99+
    2023-10-12
    Go语言
  • Go语言泛型探究:真的那么泛型吗?
    Go语言是一种由Google开发的开源编程语言,自问世以来便备受开发者们的青睐。然而,长期以来,Go语言一直被诟病缺乏泛型的支持。泛型是一种编程技术,允许在编写代码时使用参数化类型,使...
    99+
    2024-03-15
    语言 探究 泛型 go语言
  • Go语言泛型实践:探讨其真实泛型性
    Go语言自诞生以来,一直以来都被人诟病没有泛型。泛型在编程中被广泛应用,能够使代码更加灵活、可复用,因此一直有很多开发者期待Go语言能够引入泛型。直到Go 1.18版本发布,泛型功能才...
    99+
    2024-03-15
    实践 go语言 泛型
  • Go语言泛型评析:究竟算不算真泛型?
    Go语言泛型评析:究竟算不算真泛型? 随着Go语言在软件开发领域的不断普及和应用,一直以来困扰着Go开发者的一个问题便是泛型。泛型在编程中是一个非常重要的概念,能够使代码更加灵活、可复...
    99+
    2024-04-02
  • Go语言泛型实现多类型支持
    go 语言泛型提供了多类型支持,允许开发者创建可用于多种类型的代码。泛型语法通过在类型名称中指定类型参数声明泛型类型,并在函数调用中自动推断类型参数。泛型支持可比较类型,并可用于创建通用...
    99+
    2024-04-03
    go语言 泛型 golang
  • 如何在Go语言中使用泛型编程
    在Go语言中使用泛型编程是很多开发者所期待的功能,因为泛型编程可以使代码更加灵活、可复用性更高。目前,Go语言中并不原生支持泛型编程,但是在Go 1.18版本中引入了泛型的实验性功能,...
    99+
    2024-03-10
    使用 go语言 泛型
  • Go语言泛型分析:其泛型的实质究竟何在?
    Go语言泛型分析:其泛型的实质究竟何在? 近年来,Go语言一直被诟病缺乏泛型支持,这成为了许多开发者探讨的焦点。随着Go语言社区的不断发展和对泛型的需求日益增长,Go语言团队在1.18...
    99+
    2024-03-15
    分析 go语言 泛型
  • Go语言泛型解读:它的泛型特性到底如何?
    Go语言是一种快速、简单、安全的编程语言,被广泛应用于各种领域。在过去的版本中,Go语言一直以“没有泛型”而著称,但是随着Go 1.18版本的发布,引入了长期期待的泛型特性,这是Go语...
    99+
    2024-03-15
    go语言 泛型 解读
  • go语言数据类型是什么
    Go语言中的数据类型是指变量或表达式的值的属性,用于描述数据的种类和限制,分为”基本类型“、”复合类型“和”其他类型“三种:1、基本类型,包括整型、浮点型、复数型、布尔型和字符串型;2、复合类型,包括数组类型、切片类型、结构体类型、接口类型...
    99+
    2023-12-18
    go语言 Golang Go语言数据类型
  • golang中什么是泛型
    在golang中,泛型是程序设计语言的一种风格或范式,是指编写模板适应所有类型,只有在具体使用时才定义具体变量类型。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。本教程操作环境:wi...
    99+
    2023-05-14
    go语言 Golang 泛型
  • C语言的模板与泛型编程是什么
    本篇内容主要讲解“C语言的模板与泛型编程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言的模板与泛型编程是什么”吧!模板与泛型编程浅谈摘要(Effective C++):C++temp...
    99+
    2023-06-29
  • Go语言中的泛型函数是否可以相互嵌套?
    嵌套泛型函数go 1.18 中的泛型函数允许创建适用于多种类型的函数,而嵌套泛型函数可以创建可重用的代码层级结构:泛型函数可以相互嵌套,创建一个嵌套的代码重用结构。通过将过滤器和映射函数...
    99+
    2024-04-16
    go语言 嵌套 泛型函数
  • java中什么是泛型
    本篇文章给大家分享的是有关java中什么是泛型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程...
    99+
    2023-06-14
  • Go语言之嵌入类型是什么
    今天小编给大家分享一下Go语言之嵌入类型是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、什么是嵌入类型先看如下代码:...
    99+
    2023-07-02
  • Go语言的典型编程语言特性是什么?
    IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天编程网给大家整理了《Go语言的典型编程语言特性是...
    99+
    2024-04-04
  • Go语言是什么
    Go语言(又称 Golang)是一种静态强类型、编译型的编程语言,可以轻松构建简单、可靠以及高效的软件。Go语言语法与C语言相近,但功能更加丰富。Go语言的作者有三个,他们分别是:罗伯特·格利茨默(Robert Griesemer)、罗伯·...
    99+
    2024-04-02
  • 深入探讨Go语言泛型不同类型特性
    go 语言泛型引入不同类型特性,包括:类型参数:允许函数或类型表示任意类型,并用具体类型实例化。类型约束:限制类型参数必须满足的条件。类型推断:编译器可从上下文中推断类型参数。泛型结构体...
    99+
    2024-04-03
    go语言 泛型 键值对
  • 什么是go语言
    Go语言(又称Golang)是由Google开发的一种静态类型、编译型的开源编程语言。Go语言的设计目标是简洁、高效、安全和并发,旨在提供一种易于编写和维护的系统级编程语言。它结合了静态类型语言的安全性和高效性,以及动态类型语言的灵活性和开...
    99+
    2023-10-26
    go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作