从空的Payload结构中获取字段

时间:2018-06-14 08:50:15

标签: json go

我是Golang的新手,并使用Go library处理来自Github的一些webhook事件。

我可以访问此处定义的部署Payload结构:

https://github.com/go-playground/webhooks/blob/v3/github/payload.go#L384

该库解析webhook JSON有效负载并构造它。这是一个自定义字段,即它是一个hashmap / dictionary,其字段可以由客户端自定义。

所以我认为它被库定义为一个空结构。如何从此结构中提取名为“foo”的特定字段?

1 个答案:

答案 0 :(得分:0)

现在对于您可以实现的目标存在某些限制,但通过使用反射包,您可以轻松检查您的对象是否为空:

package main

import (
"fmt"
"reflect"
"strconv"
)

type emptiness struct {}

type thing struct {
    stuff string
}

func main() {
    e := emptiness{}

    t := thing{
        stuff: "present",
        }
    fmt.Println(t.stuff)
    v := reflect.ValueOf(t)
    fmt.Println(strconv.Itoa(v.NumField()))
    v = reflect.ValueOf(e)
    fmt.Println(strconv.Itoa(v.NumField()))

    if v.NumField() == 0 {
        // handle your empty object accordingly
    }
}

修改:忘记添加runnable example's link。你可以玩它并使用反射获得更多信息,但如果你只是想检查它是否为空,这将有效。