go语言利用反射实现reverse函数
2023-12-15 20:45:08
在go 1.18之前,go语言无泛型,若要实现比较通用的reverse函数,可以使用反射(reflect)
,假定reverse()函数
允许接收的参数是数组,切片,字符串类型
package main
import (
"fmt"
"reflect"
)
func reverse(input interface{}) {
value := reflect.ValueOf(input)
// 检查输入是否为切片或数组
if value.Kind() != reflect.Array && value.Kind() != reflect.Slice && value.Kind() != reflect.String {
fmt.Println("Input is not a slice, array, or string")
return
}
// 获取长度
length := value.Len()
// 使用反射交换元素的位置
for i, j := 0, length-1; i < j; i, j = i+1, j-1 {
// 获取第i个和第j个元素的值
valI := value.Index(i).Interface()
valJ := value.Index(j).Interface()
// 交换元素的值
value.Index(i).Set(reflect.ValueOf(valJ))
value.Index(j).Set(reflect.ValueOf(valI))
}
}
func main() {
// 测试reverse函数
intSlice := []int{1, 2, 3, 4, 5}
fmt.Println("Original:", intSlice)
reverse(intSlice)
fmt.Println("Reversed:", intSlice)
stringSlice := []string{"apple", "banana", "cherry"}
fmt.Println("Original:", stringSlice)
reverse(stringSlice)
fmt.Println("Reversed:", stringSlice)
charArray := [5]rune{'a', 'b', 'c', 'd', 'e'}
fmt.Println("Original:", charArray)
reverse(&charArray)
fmt.Println("Reversed:", charArray)
str := "Hello, World!"
fmt.Println("Original:", str)
reverse(&str)
fmt.Println("Reversed:", str)
}
运行结果:
Original: [1 2 3 4 5]
Reversed: [5 4 3 2 1]
Original: [apple banana cherry]
Reversed: [cherry banana apple]
Original: [97 98 99 100 101]
Input is not a slice, array, or string
Reversed: [97 98 99 100 101]
Original: Hello, World!
Input is not a slice, array, or string
Reversed: Hello, World!
文章来源:https://blog.csdn.net/weixin_46529397/article/details/134918290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!