GO语言反射机制

genispan · · 2099 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

反射机制基本和Java等类似,可获取struct或变量的类型 值等信息。获取或修改对象的值时,一定要判断该属性是否为可操作状态,否则会导致错误。

示例代码如下:

package main

import (
	"fmt"
	"reflect"
)

///首字母大写表示该字段可导出,并可修改值
type User struct {
	ID   int
	name string //未导出
	Age  int
}

func (u User) Info() {
	fmt.Println(u)
}

func GetInfo(o interface{}) {
	t := reflect.TypeOf(o)
	fmt.Println(t.Name())

	v := reflect.ValueOf(o)
	for i := 0; i < t.NumField(); i++ {
		f := t.Field(i)
		fmt.Printf("%s\n", f.Name)
		if v.Field(i).CanInterface() { //此处name未导出,所以获取Interface的时候会提示错误
			val := v.Field(i).Interface()
			fmt.Printf("%s:%v=%v\n", f.Name, f.Type, val)
		}

	}

}

func main() {
	user1 := User{222, "Charles", 100}
	GetInfo(user1)
}



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:genispan

查看原文:GO语言反射机制

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2099 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传