Go介绍了备受期待的功能Golang Generics,并发布了版本1.18版本,等待终于结束了。我们很高兴能深入研究该语言的这种有趣的补充,并探索GO如何实施仿制药。当我们揭开Golang Generics的内部运作时,请加入我们的旅程,并见证它对您的代码的影响。因此,事不宜迟,让我们一起开始这次冒险!
了解问题
正确理解Golang Generics的概念,必须了解他们旨在解决的问题。让我们通过考虑一个简单的例子来探讨这一点。
想象我们有一个简单的add()函数,该函数需要两个整数并返回其总和:
func Add(a, b int) int {
return a + b
}
func main() {
fmt.Println(Add(1, 2)) // Output: 3
}
此功能对于整数来说非常好,但是如果我们希望它也接受浮点值怎么办?如果我们尝试在add()函数中使用float值,我们会遇到错误:
func main() {
fmt.Println(Add(1.1, 2)) // Error: cannot use 1.1 (untyped float constant) as int value in argument to Add
}
现在,您可能建议使用接口解决此问题,但是有一个问题。我们只希望add()函数接受整数和浮点值,而不是其他任何类型。不幸的是,仅靠接口就无法实现这种特异性。
这是Golang Generics开始发挥作用的地方。
Go 1.18的新功能是什么?
在GO版本1.18的备受期待的发行版中,该版本是在先前版本1.17之后七个月之后的,该语言引入了改变游戏规则的功能:generics。履行其兼容性承诺,GO 1.18确保与GO 1的向后兼容性,确保开发人员平稳过渡。
那么,这些仿制药到底是什么?让我们深入研究此版本随附的三个主要进步:
将接口类型定义为类型集
函数和类型的类型参数
类型推理
令人兴奋,不是吗?因此,固定安全带,准备见证Go 1.18中的仿制药的力量!
什么是通用类型?
在编程中,通用类型是一种可以与其他类型一起使用的类型,允许代码可重复使用和灵活性。
它用作模板,使您能够编写功能和数据结构,这些功能和数据结构与各种数据类型无缝合作而无需复制代码。
通用概述
为了更有效地掌握仿制药的概念,让我们花点时间概述其他编程语言(例如C ++和Java)如何实现通用。通过比较和对比这些实现,我们可以更好地理解Golang带来的独特方法。
在C ++中,通过模板实现仿制药,这些模板允许创建通用功能和类。模板启用了可以与多种类型一起使用的算法和数据结构的定义,而无需牺牲类型的安全性。
template <typename T>
void swap(T& a, T& b) {
T temp = a;
a = b;
b = temp;
}
在这里,t代表通用类型参数,它允许我们编写一个适用于各种数据类型的交换函数。
另一方面, java通过Java 5的发布引入了仿制药。Java中的仿制药是使用Type Erasure实现的,该技术在运行时删除了类型信息,使仿制药成为编译时时间功能。
public class Box<T> {
private T value;
public void setValue(T value) {
this.value = value;
}
public T getValue() {
return value;
}
}
在此示例中,t是允许框类与不同类型的值一起工作的类型参数。
现在,让我们将重点转移回去探索其对仿制药的看法。
先决条件
要开始本教程,您需要:
GO版本1.18或更大的安装:确保您已安装在系统上,最好是版本1.18或更新的版本。
对GO基础知识的扎实理解:确保您对GO的基本概念有很好的了解,包括结构类型,用于循环,切片和接口。
有了这些先决条件,我们都将深入研究迷人的Golang Generics世界。让我们一起开始我们的编码旅程!
Golang Generics语法
在GO的世界中,仿制药从1.18版本开始,从1.18版开始,为语言增加了全新的灵活性和力量。现在,让我们深入研究Golang Generics的语法,探索如何与功能和类型一起使用。
golang通用函数语法
要定义GO中的通用函数,我们使用以下语法:
func FunctionName[T Constraint](a, b T) T {
// Function Body
}
在上面的语法中,functionName表示我们的通用函数的名称。方括号[t约束]表示使用类型参数t,它可以是任何类型的约束。
在函数括号内(A,B T),我们定义了T型T型的输入参数A和B。函数的返回类型也是t,以括号为括号。您可以用适合您需求的任何有效标识符替换T。
从原始帖子中阅读完整:Golang Generics。 Find the blog on Google。