Skip to content

Instantly share code, notes, and snippets.

@polynomialspace
Created June 16, 2020 06:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save polynomialspace/e90e59cc533779dbf561761554040f28 to your computer and use it in GitHub Desktop.
Save polynomialspace/e90e59cc533779dbf561761554040f28 to your computer and use it in GitHub Desktop.
go reverse
package main
import (
"fmt"
"reflect"
)
func reverse(slice interface{}) interface{} {
/* Completely inefficient but syntactically "convenient" */
s := reflect.ValueOf(slice)
switch s.Kind() {
case reflect.String:
/* Support proper rune stuff, but terribly */
ret := ""
for _, v := range slice.(string) {
ret = string(v) + ret
}
return ret
case reflect.Slice, reflect.Array:
ret := reflect.MakeSlice(reflect.TypeOf(slice), s.Len(), s.Len())
for i := 0; i < s.Len(); i++ {
ret.Index(s.Len()-1-i).Set(s.Index(i))
}
return ret.Interface()
}
panic("Invalid type for reverse()")
}
func main() {
str := "test"
cyr := "котя"
num := []int{1, 2, 3, 4}
for _, v := range reverse(num).([]int) {
fmt.Printf("%d", v)
}
fmt.Println()
for _, v := range reverse(str).(string) {
fmt.Printf("%c", v)
}
fmt.Println()
fmt.Println(reverse(cyr))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment