Go reflect包中Type接口函数全解析

Align / FieldAlign

函数描述:

  • Align:获取变量在内存中的对的字节齐值(通用)
  • FieldAlign:获取Struct在内存中的字节对齐值(针对结构体)

关于Go的内存对齐可以参考:https://studygolang.com/articles/19663

使用示例:

func HelloWorld() string {
   
	return "hello world"
}

type St struct {
   
	a int64
	b int8
	c string
	d float64
	e func()
}

func main() {
   
	a := St{
   }
	b := int8(10)
	c := "hello world"
	fmt.Println(reflect.TypeOf(a).Align()) // 8
    fmt.Println(reflect.TypeOf(a).FieldAlign()) // 8
	fmt.Println(reflect.TypeOf(b).Align()) // 1
	fmt.Println(reflect.TypeOf(c).Align()) // 8
	fmt.Println(reflect.TypeOf(HelloWorld).Align()) // 8
}

哈哈, 问个问题,以下输出结果是什么?

fmt.Println(unsafe.Sizeof(a))

NumMethod / Method / MethodByName

函数描述:

  • NumMethod:返回可导出的方法数量
  • Method:通过index获取方法信息,此处方法是按字典顺序顺序排序,与方法位置先后无关
  • MethodByName:通过方法名获取方法信息

使用示例:

type Student struct {
   
	Id int64
	Name string
	Agent int8
}

func (s Student) Run() {
   
	fmt.Println("run....")
}

func (s Student) Learn() {
   
	fmt.Println("learns....")
}

func(s Student) cray() {
   
	fmt.Println("cry...")
}

func (s *Student) Jump() {
   
	fmt.Println("jump....")
}

func(s *Student) Speak() {
   
	fmt.Println("speak....")
}
func(s *Student) sad () {
   
	fmt.Println("sad...")
}

func main() {
   
	a := Student{
   }
	b := &Student{
   }

	aType := reflect.TypeOf(a)
	bType := reflect.TypeOf(b)

	fmt.Println(aType.NumMethod())
	fmt.Println(bType.NumMethod())
	for i :=0; i < aType.NumMethod(); i++ {
   
		name := aType.Method(i).Name
		fmt.Println(name)
		fmt.Println(aType.MethodByName(name))
	}

	for i :=0; i < bType.NumMethod()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值