立即检查golang中的所有数据键

时间:2015-11-17 16:07:05

标签: go

我有以下代码:

type DisplayObject struct {
    ID      string `json:"id,omitempty" bson:"id"`
    URI     string `json:"uri,omitempty" bson:"uri"`
    Display string `json:"display,omitempty" bson:"display"`
}

if DisplayObject.ID != "" {
    // do something
}

if DisplayObject.URI != "" {
    // do something
}

if DisplayObject.Display != "" {
    // do something
}

在javascript中我会做

for (var key in DisplayObject) {
  if (DisplayObject.hasOwnProperty(key)) {
    // do something
  }
}

如何通过go中的对象循环完成此操作?

2 个答案:

答案 0 :(得分:1)

你正在尝试比较无法比较。 Javascript对象类似于map [string] interface {}。在您的情况下也可以是map [string]字符串,对于地图,您可以使用len(m)== 0。

Struct容器要快得多,但容器灵活性较差。您无法更改成员的数量或类型。

答案 1 :(得分:1)

您可以使用反射来完成类似的事情:

package main

import (
    "fmt"
    "reflect"
)

type DisplayObject struct {
    ID      string `json:"id,omitempty" bson:"id"`
    URI     string `json:"uri,omitempty" bson:"uri"`
    Display string `json:"display,omitempty" bson:"display"`
}

func main() {
    displayObj := &DisplayObject{ID: "foo"}
    s := reflect.ValueOf(displayObj).Elem()
    for i := 0; i < s.NumField(); i++ {
        fieldName := s.Type().Field(i).Name
        fieldValue := s.Field(i).String()
        fmt.Printf("%s: %s\n", fieldName, fieldValue)
        // do something with the field data
    }
}