厦门网站推广¥做下拉去118cr,济南网站优化哪里做的好,网站模板可以自己做吗,厦门公司网站建设泛型
对于强类型语言#xff0c;在编写代码时不事先指定类型#xff0c;在实例化的时候作为参数指明类型
参考#xff1a;https://www.liwenzhou.com/posts/Go/generics/
什么时候使用泛型#xff1f;
方法中的代码实现与类型T无关参考#xff1a;https://juejin.cn/p…泛型
对于强类型语言在编写代码时不事先指定类型在实例化的时候作为参数指明类型
参考https://www.liwenzhou.com/posts/Go/generics/
什么时候使用泛型
方法中的代码实现与类型T无关参考https://juejin.cn/post/7089321525781725214interface与泛型 操作没有方法的类型interface类型不适用每个类型的操作逻辑不一样泛型不适用
泛型与继承的区别
参考https://www.cnblogs.com/wdmx/p/9922371.html泛型是指广泛的类型是横向的 用在与类型无关的函数中 比如函数将相同的算法作用到不同的类型上类型在使用的时候再确定 继承是垂直的 不同的类型之间有了共同的方法会抽象出来一个父类。多态相同的方法不同的实现 我的理解 继承不同的对象有相同的方法名但是实现不同属于同一个类泛型不同的对象作用在他们身上的逻辑相同与他们的类型无关可用泛型。
方法与函数
参考https://juejin.cn/post/6894899185221697550方法是包含了接受者的函数 方法属于类函数就是代码集合
泛型与interface
interface可以认为是基类走继承的那条道interface也可以实现泛型参考https://golang3.eddycjy.com/posts/generics-history/ interface在类型上太随意 比如add(a,b)ab应该是同一类型但是调用的时候我可以传入不同类型为了不出问题还得在函数里面做类型判断 泛型在编译时有类型校验泛型相较于接口的优点 更安全编译早期发现错误更高效静态类型
代码示例
package mainimport log//继承type StructBase interface {GetName() string
}type StructA struct {Name stringColumnA string
}func (a StructA) GetName() string {return a.Name
}type StructB struct {Name stringColumnB string
}func (b StructB) GetName() string {return b.Name
}func PrintName(s StructBase) {log.Println(s.GetName())
}// 泛型
func reverse(arr []int) []int {res : make([]int, len(arr))for i : len(arr) - 1; i 0; i-- {res[len(arr)-1-i] arr[i]}return res
}func reverseGeneric[T any](arr []T) []T {res : make([]T, len(arr))for i : len(arr) - 1; i 0; i-- {res[len(arr)-1-i] arr[i]}return res
}func main() {//泛型测试arr : []int{1, 2, 3, 4, 5}log.Println(reverse(arr))log.Println(reverseGeneric(arr))log.Println(reverseGeneric(arr))log.Println(reverseGeneric([]int{1, 2, 3, 4, 5}))arr2 : []string{a, b, c, d, e}log.Println(reverseGeneric(arr2))//继承测试log.Println()PrintName(StructA{Name: structA, ColumnA: columnA})PrintName(StructB{Name: structB, ColumnB: columnB})}