go泛型出来前怎么写通用的方法

go没有泛型一直以来都为人诟病,好在go的泛型已经接近完成了 最快在1.18版本就要正式出来了(有点小激动),那么在泛型没出来前要怎么写通用的方法呢,相信大家都经常碰到过明明需要的功能都差不多 就是因为里面的类型是string 和 int不同,硬是要写两个方法,感觉这样非常不优雅且方便,于是研究了下通过反射可以实现类似泛型的功能(当然指常见的) 话不多说上代码

// 数组转字符串 (泛型出来前准备)  ps:[1,2,3,4] => 1,2,3,4
func ArrayToString(arr interface{}) string {
	// 反射获取数据
	array := reflect.ValueOf(arr)
	str := ""
	for i:=0;i<array.Len();i++  {
		if str == "" {
			str += array.Index(i).String()
		} else {
			str += ","+array.Index(i).String()
		}
	}
	return str
}

上面的方法只是简单的实现了一下  实际上还需要加很多断言判断的,不过也可以给我们添加一种思路,最后希望泛型早日出来,不过不得不吐槽下go的泛型符号,太没辨识度了

golang中,是一种通用的编程方式,可以在代码中使用不特定具体类来实现通用性。然而,目golang版本(截至2021年)并不直接支持。 虽然golang没有原生的支持,但可以通过接口方法来实现类似的效果。在接口的定义中,可以使用空接口类(interface{})作为参数或返回类。空接口类可以接收任意类的值。 在使用空接口类作为接口方法的参数时,可以将任意类值传递给该方法。在方法内部,可以使用类断言将空接口类转换成具体的类,从而实现对不同类的值的处理。这样可以实现一种类似于的效果,通过接口方法来处理不同类的值。 示例代码如下: ```go package main import "fmt" type Generic interface { Process(interface{}) interface{} } type StringContainer struct{} func (sc StringContainer) Process(item interface{}) interface{} { str, ok := item.(string) if !ok { return "error: not a string" } return "string: " + str } type IntContainer struct{} func (ic IntContainer) Process(item interface{}) interface{} { num, ok := item.(int) if !ok { return "error: not an int" } return "int: " + fmt.Sprintf("%d", num) } func main() { strContainer := StringContainer{} intContainer := IntContainer{} strResult := strContainer.Process("hello") intResult := intContainer.Process(123) fmt.Println(strResult) // output: string: hello fmt.Println(intResult) // output: int: 123 } ``` 在上述示例中,我们定义了一个`Generic`接口,该接口包含了一个`Process`方法,该方法接收一个空接口类参数并返回一个空接口类结果。然后我们定义了`StringContainer`和`IntContainer`两个结构体,并为它们实现了`Process`方法。在`Process`方法中,我们使用类断言将参数转换为具体的类,然后进行相应的处理。最后在`main`函数中,我们创建了`StringContainer`和`IntContainer`的实例,并调用其`Process`方法来处理不同类的值。 通过接口方法的利用,我们可以实现类似于的效果。当然,这种方式并不是完全等同于原生的特性,而是一种在golang中模拟实现方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值