Go语言教程之边写边学:Golang中的反射:Reflect包的Make相关函数
MakeSlice函数为指定的切片类型、长度和容量创建一个新的零初始化切片值。
示例代码:
package main
import (
"fmt"
"reflect"
)
func main() {
var str []string
var strType reflect.Value = reflect.ValueOf(&str)
newSlice := reflect.MakeSlice(reflect.Indirect(strType).Type(), 10, 15)
fmt.Println("Kind :", newSlice.Kind())
fmt.Println("Length :", newSlice.Len())
fmt.Println("Capacity :", newSlice.Cap())
}
输出:
Kind : slice
Length : 10
Capacity : 15
MakeMap将创建一个具有指定类型的新映射。
示例代码:
package main
import (
"fmt"
"reflect"
)
func main() {
var str map[string]string
var strType reflect.Value = reflect.ValueOf(&str)
newMap := reflect.MakeMap(reflect.Indirect(strType).Type())
fmt.Println("Kind :", newMap.Kind())
}
输出:
Kind : map
MakeChan创建一个具有指定类型和缓冲区大小的新通道。
示例代码:
package main
import (
"fmt"
"reflect"
)
func main() {
var str chan string
var strType reflect.Value = reflect.ValueOf(&str)
newChannel := reflect.MakeChan(reflect.Indirect(strType).Type(), 512)
fmt.Println("Kind :", newChannel.Kind())
fmt.Println("Capacity :", newChannel.Cap())
}
输出:
Kind : chan
Capacity : 512
MakeFunc函数用于获取包装函数fn的给定Type的新函数。
示例代码:
package main
import (
"fmt"
"reflect"
)
type Sum func(int64, int64) int64
func main() {
t := reflect.TypeOf(Sum(nil))
mul := reflect.MakeFunc(t, func(args []reflect.Value) []reflect.Value {
a := args[0].Int()
b := args[1].Int()
return []reflect.Value{reflect.ValueOf(a + b)}
})
fn, ok := mul.Interface().(Sum)
if !ok {
return
}
fmt.Println(fn(5, 6))
}
输出:
11
系列文章