go随笔
go
泛型
Go语言中的泛型(Generics)是一个在编程中广泛应用的概念,它允许你在编写代码时定义类型参数化的数据结构、接口和函数。这意味着你可以创建一个函数或数据结构,它不绑定到特定的类型,而是在使用时可以被实例化为多种类型。泛型的引入提高了代码的复用性、灵活性和类型安全性。
package main
import "fmt"
// k comparable 对泛型参数进行约束
// comparable 使用comparable约束的
// 要可以它限制K只能代表那些支持相等性比较(==)和不等性比较(!=)操作的类型
// go 中的泛型符号是[] 与java的有一定的区别
//v any 类型不限相当于interface{}空接口
/*
同样的 对于泛型约束,go支持自定义
type Addable interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr |
~float32 | ~float64
// 注意:这里的"~"符号表示类型相等,而不是类型兼容
}
func Sum[T Addable](a, b T) T {
return a + b
}
*/
func MapKeys[k comparable, v any](m map[k]v) []k{
r := make([]k,0, len(m))
for k := range m {
r = append(r, k)
}
return r
}
// list数组
type List[t any] struct{
head,tail *element[t]
}
// node
type element[t any] struct {
next *element[t]
val t
}
// 向中间push元素
func (l *List[t])Push(v t){
if l.tail == nil {
l.head = &element[t]{val:v}
l.tail = l.head
}else {
l.tail.next = &element[t]{val:v}
l.tail = l.tail.next
}
}
// 获得所有元素
func (l *List[t]) GetAll() []t{
var elems []t
for element := l.head; element != nil; element = element.next {
elems = append(elems, element.val)
}
return elems
}
func main(){
var m = map[int]string{1:"2",2:"4",3:"6"}
fmt.Println("keys:",MapKeys(m))
_ = MapKeys[int,string](m)
list := List[int]{}
list.Push(1)
list.Push(12)
list.Push(14)
fmt.Println("list:",list.GetAll())
}

浙公网安备 33010602011771号