Golang 泛型及代码示例
  0SnbOly3LC5t 2023年12月07日 15 0


以下是一个包含 Golang 泛型代码示例的文件:

package main

import (
    "fmt"
    "sort"
)

// 泛型函数
func Add[T any](x, y T) T {
    return x + y
}

func main() {
    // 将两个整数相加
    fmt.Println(Add(1, 2)) // 3

    // 将两个字符串相加
    fmt.Println(Add("Hello", "World")) // HelloWorld

    // 泛型类型
    type List[T any] []T

    // 创建一个存储整数的列表
    var intList List[int]
    intList = []int{1, 2, 3}

    // 创建一个存储字符串的列表
    var strList List[string]
    strList = []string{"Hello", "World"}

    // 泛型约束
    func Sort[T comparable](xs []T) {
        sort.Slice(xs, func(i, j int) bool {
            return xs[i] < xs[j]
        })
    }

    // 使用泛型约束来排序整数列表
    Sort(intList)
    fmt.Println(intList) // [1 2 3]

    // 使用泛型类型集合来简化泛型约束
    func Sort[T int | string](xs []T) {
        sort.Slice(xs, func(i, j int) bool {
            return xs[i] < xs[j]
        })
    }

    // 使用泛型类型集合来排序整数和字符串列表
    Sort(strList)
    fmt.Println(strList) // [Hello World]
}

该文件包含以下代码示例:

  • Add() 是一个泛型函数,可以将两个任意类型的值相加。
  • List() 是一个泛型类型,可以存储任意类型的值。
  • Sort() 是一个泛型函数,可以对任意类型的列表进行排序。

Golang 泛型是在 Go 1.18 中引入的新功能,允许我们在函数、类型和接口中使用类型参数。泛型可以帮助我们简化代码,提高代码的复用性和可维护性。

以下是一些 Golang 泛型代码示例:

泛型函数

泛型函数可以接受任意类型的参数。例如,以下函数可以将两个值相加,无论它们的类型是什么:

func Add[T any](x, y T) T {
    return x + y
}

例如,我们可以使用该函数来将两个整数相加:

fmt.Println(Add(1, 2)) // 3

或将两个字符串相加:

fmt.Println(Add("Hello", "World")) // HelloWorld

泛型类型

泛型类型可以存储任意类型的值。例如,以下类型定义了一个泛型列表:

type List[T any] []T

我们可以使用该类型来创建一个存储整数的列表:

var intList List[int]
intList = []int{1, 2, 3}

或创建一个存储字符串的列表:

var strList List[string]
strList = []string{"Hello", "World"}

泛型约束

泛型约束可以用于限制类型参数的范围。例如,以下函数接受一个泛型函数,该函数接受两个 Comparable 类型的参数:

func Sort[T comparable](xs []T) {
    sort.Slice(xs, func(i, j int) bool {
        return xs[i] < xs[j]
    })
}

Comparable 是一个接口,它只包含一个方法 Compare()

type Comparable interface {
    Compare(other interface{}) int
}

该接口确保函数接受的泛型函数可以安全地对其参数进行比较。

泛型类型集合

泛型类型集合可以用于简化泛型约束的使用。例如,以下函数接受一个泛型函数,该函数接受两个 intstring 类型的参数:

func Sort[T int | string](xs []T) {
    sort.Slice(xs, func(i, j int) bool {
        return xs[i] < xs[j]
    })
}

我们可以使用 int | string 来表示 intstring 的类型集合。

泛型最佳实践

在使用泛型时,需要注意以下最佳实践:

  • 使用泛型可以简化代码,但也可能会使代码更加复杂。在使用泛型之前,请仔细考虑是否值得使用。
  • 使用泛型约束可以限制类型参数的范围,从而确保代码的安全性。
  • 使用泛型类型集合可以简化泛型约束的使用。

泛型是一种强大的新功能,可以帮助我们编写更简洁、更高效的 Go 代码。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

推荐阅读
0SnbOly3LC5t