泛型
泛型 vs interface
package atomic
func AddInt32(addr *int32, delta int32) (new int32)
func AddUint32(addr *uint32, delta uint32) (new uint32)
func AddInt64(addr *int64, delta int64) (new int64)
func AddUint64(addr *uint64, delta uint64) (new uint64)使用interface中规定的方法和类型来双重约束泛型的参数
package main
import (
"fmt"
"strconv"
)
type Price int
type ShowPrice interface {
String() string
~int | ~string // 如果不加~,编译是不通过的。~int表示底层类型为int的都满足约束条件
}
func (i Price) String() string {
return strconv.Itoa(int(i))
}
func ShowPriceList[T ShowPrice](s []T) (ret []string) {
for _, v := range s {
ret = append(ret, v.String())
}
return
}
func main() {
fmt.Println(ShowPriceList([]Price{1, 2}))
}map,slice,channel,struct的泛型支持
Last updated