Golang中的泛型
Golang中的泛型
泛型函数是一种通用函数。它能接受不同类型的参数。
1 |
|
对于函数Foo
的参数m map[K]V
:
- K 接受 comparable 泛型约束。comparable包括所有能进行比较的类型(
int8
,uint16
,float32
,string
…)。 - V 接受
int64 | float64
泛型约束。V可以是两者中的任意一个。
使用接口
为什么使用接口
- 实现对参数类型约束本身的代码复用。
1 |
|
- 使用参数类型提供的方法。
1
2
3
4
5
6
7
8
9
10
11
12// From "github.com/2023-Melting-Backend"
type sth interface {
db.User | db.Template | db.ProposalInfo | db.Tag | db.Question | db.Game
TableName() string
GetKey() (string, int)
}
func UpdateSth[T sth](value T) error {
pk, id := value.GetKey()
result := db.DB.Table(value.TableName()).Updates(value).Where(pk+" = ?", id)
return result.Error
}
如果不在接口中规定方法,编译会报错(即使约束中所有类型都实现了相关方法)。
参考
Golang中的泛型
https://a48zhang.github.io/2023/04/09/generic/