一个十分方便用于go语言不定参数传参和获取的工具函数argsUtil

noxue · · 1759 次点击    
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
地址:https://github.com/noxue/utils ## 功能 方便不定参数的传出和取出的。 前提是要确定传入的参数个数和类型。 ### 使用这个工具之前的代码 ``` func test(args ...interface{}) { var room Room var uid int var times int var ok bool room, ok = args[0].(Room) if !ok { glog.Fatalln("获取参数出错") } uid, ok = args[1].(int) if !ok { glog.Fatalln("获取参数出错") } times, ok = args[2].(int) if !ok { glog.Fatalln("获取参数出错") } // 这里使用room uid times 等变量值 } ``` ### 使用后 ``` func test(args ...interface{}) { var room Room var uid int var times int e := argsUtil.NewArgsUtil(args...).To(&room, &uid, &times) if e != nil { glog.Fatalln(e) } // 这里使用room uid times 等变量值 } ``` ## 例子 ``` package main import ( "encoding/json" "fmt" "github.com/noxue/utils/argsUtil" ) type Data struct { Id int `json:"id"` Name string `json:"name"` User User `json:"user"` Articles map[string]string `json:"articles"` Admin bool `json:"admin"` } type User struct { Age int `json:"age"` Address string `json:"address"` } // 实现Stringer接口,格式化输出,方便展示 func (me *Data) String() string { bs, e := json.MarshalIndent(me,"","\t") if e != nil { panic(e) } return string(bs) } func main() { sd := Data{ Id: 100, Name: "不学网", Admin: true, User: User{ Age: 20, Address: "中国哈哈哈", }, Articles: map[string]string{ "第一篇文章": "第一篇文章内容第一篇文章内容第一篇文章内容第一篇文章内容", "第二篇文章": "第二篇文章内容第二篇文章内容第二篇文章内容第二篇文章内容", }, } var d Data var i int var b bool var nums []int e := argsUtil.NewArgsUtil(sd, 1,true,[]int{1,2,3,4}).To(&d, &i,&b,&nums) if e != nil { panic(e) return } fmt.Println("int:",i) fmt.Println("bool:",b) fmt.Print("array:") for _,v:=range nums{ fmt.Print(v,",") } fmt.Println() fmt.Println("data:","\n",&d) } ```

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

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