1- 使用 reflect.MakeSlice(reflect.SliceOf(elemType), 0, 10)
和
reflect.Append(elemSlice, reflect.ValueOf(TestStruct{"Testing"}))
,
像这样工作的示例代码:
package main
import "fmt"
import "reflect"
func main() {
elemType := reflect.TypeOf(TestStruct{})
elemSlice := reflect.MakeSlice(reflect.SliceOf(elemType), 0, 10)
elemSlice = reflect.Append(elemSlice, reflect.ValueOf(TestStruct{"Testing"}))
fmt.Println(elemSlice)
}
type TestStruct struct {
TestStr string
}
2- 使用reflect.New(reflect.SliceOf(elemType)).Elem()
和
elemSlice = reflect.Append(elemSlice, reflect.ValueOf(TestStruct{"测试"}))
像这样的工作示例代码:
package main
import "fmt"
import "reflect"
type TestStruct struct {
TestStr string
}
func main() {
elemType := reflect.TypeOf(TestStruct{})
elemSlice := reflect.New(reflect.SliceOf(elemType)).Elem()
elemSlice = reflect.Append(elemSlice, reflect.ValueOf(TestStruct{"Testing"}))
fmt.Printf("%+v\n", elemSlice)
fmt.Println(elemSlice)
}
输出:
[{TestStr:Testing}]
[{Testing}]
如果你需要使用`append`,唯一的方法是使用`s := elemSlice.([]TestStruct)`,像这个可以工作的示例代码:
package main
import "fmt"
import "reflect"
type TestStruct struct {
TestStr string
}
func main() {
elemType := reflect.TypeOf(TestStruct{})
elemSlice := reflect.New(reflect.SliceOf(elemType)).Elem().Interface()
s := elemSlice.([]TestStruct)
s = append(s, TestStruct{"Testing"})
fmt.Printf("%+v\n", elemSlice)
fmt.Println(s)
}