切片指针的 Golang 类型断言

有更好的方法吗?


var collection []string

anyFunc(&collection) // valid

anyFunc(collection) // invalid

anyFunc(nil) // invalid

anyFunc("test") // invalid


func anyFunc(collection interface{}) error {

    rv := reflect.ValueOf(collection)

    if rv.Kind() != reflect.Ptr || rv.IsNil() || reflect.Indirect(reflect.ValueOf(collection)).Kind() != reflect.Slice {

        return errors.New("Invalid collection type, need pointer to slice.")

    }

    return nil

}

play.golang.org上的完整示例


牛魔王的故事
浏览 113回答 1
1回答

MM们

func loadData(collection interface{}) error {    rv := reflect.ValueOf(collection)    if rv.Kind() == reflect.Ptr && rv.Elem().Kind() == reflect.Slice {        return nil      }    return errors.New("Invalid collection type, need pointer to slice.")}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go