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系列文章
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
                
            
苏公网安备
                32050902101537号