1. ホーム
  2. go

[解決済み] スライスを格納する interface{} 上の範囲

2022-09-11 02:19:18

質問

を受け付ける関数があるとする。 t interface{} . と判断された場合 t がスライスであると判断された場合、どのようにすれば range をそのスライスの上に置くのですか?

func main() {
    data := []string{"one","two","three"}
    test(data)
    moredata := []int{1,2,3}
    test(data)
}

func test(t interface{}) {
    switch reflect.TypeOf(t).Kind() {
    case reflect.Slice:
        // how do I iterate here?
        for _,value := range t {
            fmt.Println(value)
        }
    }
}

Go Playgroundの例です。 http://play.golang.org/p/DNldAlNShB

どのように解決するのですか?

私は reflect.ValueOf で、スライスであれば Len() そして Index() を取得するための値で len を、あるインデックスにあるスライスや要素の これを行うには、範囲演算を使用することはできないと思います。

package main

import "fmt"
import "reflect"

func main() {
    data := []string{"one","two","three"}
    test(data)
    moredata := []int{1,2,3}
    test(moredata)
} 

func test(t interface{}) {
    switch reflect.TypeOf(t).Kind() {
    case reflect.Slice:
        s := reflect.ValueOf(t)

        for i := 0; i < s.Len(); i++ {
            fmt.Println(s.Index(i))
        }
    }
}

Go Playgroundの例です。 http://play.golang.org/p/gQhCTiwPAq