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)
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}))
}
type Number interface {
int | int32 | int64 | float64 | float32
}
type KvMap[K comparable, V Number] map[K]V
func (kv KvMap[K, V]) Set(k K, v V) KvMap[K, V] {
kv[k] = v
return kv
}
type Slice[V Number] []V
func (s Slice[V]) Append(v V) Slice[V] {
s = append(s, v)
return s
}
type CH[V any] chan V
type Kv[Vt Number] struct {
K string
V Vt
}
func main() {
var kvm1 = make(KvMap[int, float32])
kvm1[10] = 20.0
fmt.Printf("kvm1=%v \n", kvm1)
var s1 = make(Slice[float64], 2)
kvm1[1] = 30.0
fmt.Printf("s1=%v \n", s1)
var s2 = make(Slice[int64], 1)
s2 = s2.Append(2)
fmt.Printf("s2=%v \n", s2)
ch1 := make(CH[int], 10)
ch1 <- 66
cc := <-ch1
fmt.Println(cc)
var kv1 = Kv[int]{K: "kv1", V: 1}
fmt.Printf("kv1=%v \n", kv1)
}