mgo 批量插入--具体类型的切片 转 interface 切片解决办法

通过xml.Unmarshal获得一个[]Province 然后想把它插到mongodb中,使用的是mgo driver。 那么怎样将[]Province切片转为[]interface{}切片呢?

法1.

 c := session.DB(database).C("Provinces")
 var provinces []Province
 var docs []interface{}
  ...
 for _,v := range provinces{
    docs = append(docs,v)
 }
 c.Insert(docs...)

法2.

package main

import (
    "fmt"
    "reflect"
)

type a struct {
    CreateTime int
    Name       string
    Content    string
}

func main() {
    arr1 := []a{
        a{Name: "no1", CreateTime: 1, Content: "hello1"},
        a{Name: "no2", CreateTime: 2, Content: "hello2"},
        a{Name: "no3", CreateTime: 3, Content: "hello3"},
        a{Name: "no4", CreateTime: 4, Content: "hello3"},
    }

    fmt.Println(arr1)

    arr2 := ToInterfaceArr(arr1)

    fmt.Printf("%T\n", arr2)
    fmt.Println(arr2)
}

func ToInterfaceArr(arr interface{}) []interface{} {
    if reflect.TypeOf(arr).Kind() != reflect.Slice {
        return nil
    }

    arrValue := reflect.ValueOf(arr)
    retArr := make([]interface{}, arrValue.Len())
    for k := 0; k < arrValue.Len(); k++ {
        retArr[k] = arrValue.Index(k).Interface()
    }
    return retArr
}

猜你喜欢

转载自blog.csdn.net/chenyulancn/article/details/87650095