func makeStructField()

in cmd/generate-fastjson/main.go [440:476]


func makeStructField(structType *types.Struct, i int) (structField, bool) {
	fieldVar := structType.Field(i)
	if !fieldVar.Exported() {
		return structField{}, false
	}
	var omitempty bool
	fieldName := fieldVar.Name()
	jsonName := fieldName
	fieldTag := reflect.StructTag(structType.Tag(i))
	jsonTag, ok := fieldTag.Lookup("json")
	if ok {
		if jsonTag == "-" {
			return structField{}, false
		}
		name := jsonTag
		comma := strings.IndexRune(jsonTag, ',')
		if comma >= 0 {
			name = jsonTag[:comma]
			switch jsonTag[comma+1:] {
			case "": // special case for `json:"-,"`
			case "omitempty":
				omitempty = true
			default:
				panic("unhandled json tag: " + jsonTag)
			}
		}
		if name != "" {
			jsonName = name
		}
	}
	return structField{
		fieldName: fieldName,
		jsonName:  jsonName,
		fieldType: fieldVar.Type(),
		omitempty: omitempty,
	}, true
}