GoLang之类型约束

GoLang之类型约束

注:本文已Go SDK v1.18进行讲解

1.语法“|”

type Addable interface {
  int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | uintptr | float32 | float64 | complex64 | complex128 | string
}

2.语法“,”

新的方式还还有额外的用途,也就是不用每次都定义一个接口约束,不过,这种方式建议只在少数类型约束时才适合,否则可读性太差。

package main

import (
"fmt"
)

func add[T int,float64](a, b T) T {
              return a + b
}

func main() {
	fmt.Println(add(1, 2))
	fmt.Println(add(1.2, 2.3))
}
//输出:
// 3
// 3.5

注意[T int,float64]不能写成[T int|float64],否则会编译报错

在这里插入图片描述

3.语法“~”

在 Go 语言中,基于某类型定义新类型,有时可能希望泛型约束是某类型的所有衍生类型

约束 ~string 表示支持 string 类型以及底层是 string 类型的类型,因此 MyString 类型值也可以传递给 add。

package main

import (
	"fmt"
)
// 约束允许底层类型是 string 的类型(包括 string 类型)
type a interface {
	~string
}

func add[T a](x, y T) T {
	return x + y
}

type MyString string

func main() {
	var x string = "ab"
	var y MyString = "cd"
	fmt.Println(add(x, x))
	fmt.Println(add(y, y))
	//输出:
	//abab
	//cdcd

}

4.没有任何约束

// 没有任何约束
func add[T any](x, y T) T {
	return y
}

func main() {
	fmt.Println(add(1, 2))
	//输出:2
}

5.单独定义约束

package main

import (
	"fmt"
)

type Addble int

// 约束 Addble (需要单独定义)
func add[T Addble](x, y T) T {
	return y
}

func main() {
	fmt.Println(add(1, 2))
	//输出:2
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值