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())
}
posted @ 2024-06-14 16:18  jysli  阅读(15)  评论(0)    收藏  举报