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()