Golang Generics
#编程 #教程 #go #generics

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 GenericsFind the blog on Google