iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang泛型如何使用
  • 438
分享到

Golang泛型如何使用

2023-07-02 10:07:57 438人浏览 独家记忆
摘要

这篇文章主要介绍了golang泛型如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang泛型如何使用文章都会有所收获,下面我们一起来看看吧。1. 泛型是什么泛型生命周期只在编译期,旨在为程序员生成代

这篇文章主要介绍了golang泛型如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang泛型如何使用文章都会有所收获,下面我们一起来看看吧。

1. 泛型是什么

泛型生命周期只在编译期,旨在为程序员生成代码,减少重复代码的编写

在比较两个数的大小时,没有泛型的时候,仅仅只是传入类型不一样,我们就要再写一份一模一样的函数,如果有了泛型就可以减少这类代码

// intfunc GetMaxNumInt(a, b int) int {if a > b {return a}return b}// int8func GetMaxNumInt8(a, b int8) int8 {if a > b {return a}return b}

2. 泛型的简单使用

2.1. 泛型示例

需要go版本大于等于1.18

我们先改造一下上面的示例,只需要在函数后用中括号声明T可能出现的类型,中间用符号"|" 分隔

// 使用泛型func GetMaxNum[T int | int8](a, b T) T {    if a > b {        return a    }    return b}

2.2. 自定义泛型类型

如果类型太多了怎么办呢?这时候我们就可以自定义泛型类型

// 像声明接口一样声明type MyInt interface {int | int8 | int16 | int32 | int64}// T的类型为声明的MyIntfunc GetMaxNum[T MyInt](a, b T) T {if a > b {return a}return b}

2.3. 调用带泛型的函数

如何调用这个带有泛型的函数呢?

var a int = 10var b int = 20// 方法1,正常调用,编译器会自动推断出传入类型是intGetMaxNum(a, b)// 方法2,显式告诉函数传入的类型是intGetMaxNum[int](a, b)

3. 自定义泛型类型的语法

在2.2小节中我们可以看到一个泛型的简单自定义类型,本节将会详细描述泛型自定义类型的语法

3.1. 内置的泛型类型any和comparable

any: 表示go里面所有的内置基本类型,等价于interface{}

Golang泛型如何使用

comparable: 表示go里面所有内置的可比较类型:int、uint、float、bool、struct、指针等一切可以比较的类型

Golang泛型如何使用

3.2. 声明一个自定义类型

跟声明接口一样,使用type x interface{} 关键字来声明,不过里面的成员不再是方法,而是类型,类型之间用符号 "|" 隔开

type MyInt interface {    int | int8 | int16 | int32 | int64}

成员类型支持go中所有的基本类型

type MyT interface {    int | float32 | bool | chan int | map[int]int | [10]int | []int | struct{} | *Http.Client}

3.3. 泛型中的"~"符号是什么

符号"~"都是与类型一起出现的,用来表示支持该类型的衍生类型

// int8的衍生类型type int8A int8type int8B = int8// 不仅支持int8, 还支持int8的衍生类型int8A和int8Btype MyInt interface {~int8}

4. 泛型的进阶使用

4.1. 泛型与结构体

创建一个带有泛型的结构体User,提供两个获取age和name的方法

注意:只有在结构体上声明了泛型,结构体方法中才可以使用泛型

type AgeT interface {int8 | int16}type NameE interface {string}type User[T AgeT, E NameE] struct {age  Tname E}// 获取agefunc (u *User[T, E]) GetAge() T {return u.age}// 获取namefunc (u *User[T, E]) GetName() E {return u.name}

我们可以通过声明结构体对象时,声明泛型的类型来使用带有泛型的结构体

// 声明要使用的泛型的类型var u User[int8, string]// 赋值u.age = 18u.name = "weiwei"// 调用方法age := u.GetAge()name := u.GetName()// 输出结果 18 weiweifmt.Println(age, name)

5. 泛型的限制或缺陷

5.1 无法直接和switch配合使用

将泛型和switch配合使用时,无法通过编译

func Get[T any]() T {var t Tswitch T {case int:t = 18}return t}

只能先将泛型赋值给interface才可以和switch配合使用

func Get[T any]() T {var t Tvar ti interface{} = &tswitch v := ti.(type) {case *int:*v = 18}return t}

关于“Golang泛型如何使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Golang泛型如何使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网GO频道。

您可能感兴趣的文档:

--结束END--

本文标题: Golang泛型如何使用

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

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

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

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

下载Word文档
猜你喜欢
  • Golang泛型如何使用
    这篇文章主要介绍了Golang泛型如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang泛型如何使用文章都会有所收获,下面我们一起来看看吧。1. 泛型是什么泛型生命周期只在编译期,旨在为程序员生成代...
    99+
    2023-07-02
  • golang泛型是什么及如何使用
    本篇内容介绍了“golang泛型是什么及如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在golang中,泛型是程序设计语言的一种风格...
    99+
    2023-07-04
  • golang泛型的使用方法
    golang泛型的使用可以用以下方法替代:1、使用接口,通过定义接口并在函数或方法中使用接口类型作为参数或返回类型,可以实现对不同类型的抽象操作;2、代码生成工具,生成特定类型的代码,以实现泛型行为,但是需要事先定义好模板代码,并通过生成工...
    99+
    2023-12-13
    golang泛型 go语言 Golang
  • 如何使用泛型为golang添加新特性
    go 中泛型允许创建适用于多种数据类型的代码。语法为 type name[t any] struct { ... },其中 t 为泛型参数。使用 func copyslice[t any...
    99+
    2024-05-02
    golang 泛型
  • golang中如何有效运用泛型
    如何在Golang中高效地使用泛型? 概述:Golang自身并不直接支持泛型,这是它与其他一些编程语言的主要区别之一。然而,在实际编码过程中,我们经常会遇到需要泛型的情况,因为泛型可以提高代码的可复用性和灵活...
    99+
    2024-01-20
  • 如何使用泛型解决golang中常见问题?
    go 中泛型可解决常见痛点:类型转换:使用泛型函数简化不同类型的转换。数据结构创建:使用泛型类型简化通用数据结构的创建。函数传递:使用泛型函数声明允许传递各种类型的参数。实战案例:通过类...
    99+
    2024-05-04
    golang 泛型 编译错误 键值对
  • 如何使用泛型编写更通用的golang代码
    泛型特性允许 go 语言编写可应用于多种数据类型的通用代码。它通过使用泛型类型变量实现,例如 type mytype[t any],其中 t 指定元素类型。泛型提供了以下优势:代码可重用...
    99+
    2024-05-03
    golang 泛型
  • 如何使用泛型编写高性能的golang代码
    泛型在 go 语言中引入灵活性、复用性并提升性能,通过使用类型约束确保类型参数具有所需的行为。泛型函数、类型和数据结构的实战案例包括缓存数据结构和基准测试,这可以显著提高代码性能,从而优...
    99+
    2024-05-03
    golang 泛型
  • Golang泛型的使用方法详解
    目录1. 泛型是什么2. 泛型的简单使用2.1. 泛型示例2.2. 自定义泛型类型2.3. 调用带泛型的函数3. 自定义泛型类型的语法3.1. 内置的泛型类型any和comparab...
    99+
    2024-04-02
  • 如何使用泛型解决golang中数据处理问题
    go 中的泛型允许创建处理各种类型数据的函数和类型,从而简化数据处理。它通过类型参数实现,这些参数可以在函数和类型中使用,强制执行类型安全并提高代码重用性、可读性和可维护性。 如何使用...
    99+
    2024-05-04
    golang 泛型 代码可读性
  • 如何使用泛型解决golang中并发编程问题
    使用泛型解决 golang 中的并发问题。泛型允许在不指定类型的情况下定义函数和结构,从而创建线程安全的数据结构。例如:定义一个泛型队列 queue[t],其中 t 表示元素类型。使用 ...
    99+
    2024-05-03
    golang 泛型 并发访问
  • 使用泛型优化golang代码性能
    通过使用泛型,可以在不编写特定类型函数的情况下对各种数据类型进行操作,从而减少代码重复。泛型通过消除对类型检查和转换的开销来提高性能,因为编译器可以生成针对任何类型高效工作的单个通用函数...
    99+
    2024-05-03
    java php golang
  • golang泛型的使用方法是什么
    Golang目前还不支持泛型,不过Go团队正在开发一种新的泛型系统,以提供更灵活的类型系统。该泛型系统将被称为Type Parame...
    99+
    2023-10-21
    golang
  • Golang泛型如何影响函数类型推断?
    go泛型通过引入类型参数化改变了函数类型推断:参数类型:[]a,其中a是满足number接口的实际类型参数,在调用时具体化。返回值类型:与参数类型相同,推断为a。 Go 泛型如何影响函...
    99+
    2024-04-16
    golang 泛型
  • 如何在java中使用泛型类
    如何在java中使用泛型类?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系...
    99+
    2023-06-15
  • golang泛型的函数应用
    go 1.18 引入了泛型函数,支持类型参数化,增强了代码可重用性。泛型函数语法为 func 函数名[类型参数] (输入参数 类型参数) 类型参数,可使用类型参数化类型作为输入和返回类型...
    99+
    2024-04-29
    函数 泛型 golang
  • golang函数的泛型
    Go 语言中的函数泛型 泛型函数允许您为各种类型定义通用函数,从而提高代码的可重用性和灵活性。 语法 泛型函数的语法如下:func <函数名>[T any](<参数列...
    99+
    2024-04-21
    golang 泛型
  • golang支持泛型吗
    golang支持泛型,Go在最新的版本中添加了对泛型的原生支持,为开发者提供了更好的编程体验和灵活性。该版本引入了一种新的语法和语义,可以让开发者以一种更简洁、更优雅的方式编写泛型代码。开发者现在可以使用类型参数来定义泛型函数和泛型结构体,...
    99+
    2023-07-25
  • Golang泛型如何扩展函数的可重用性?
    go 泛型是一种特性,通过参数化类型,使代码可重用,包括:类型安全的集合:可创建存储不同类型元素的集合。通用的比较函数:可比较任何实现了 comparable 接口的类型。 Go 泛型...
    99+
    2024-04-16
    golang 泛型
  • Go泛型实战教程之如何在结构体中使用泛型
    目录01 目标02 实现01 目标 假设我们要实现一个blog系统,在该系统中有以下两个结构体: type Category struct { ID int32 Na...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作