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

noxue · 2019-06-07 02:29:44 · 1899 次点击    
这是一个分享于 2019-06-07 02:29:44 的资源,其中的信息可能已经有所发展或是发生改变。

地址: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

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