+
Skip to content

wolfogre/gtag

Repository files navigation

gtag

gtag logo

Go Reference Actions Codecov Go Report Card GitHub go.mod Go version GitHub tag (latest by date)

Help you to get golang struct's tags elegantly.

Quick start

1. Define your struct

A source file user.go:

package tutorial

type User struct {
	Id    int    `bson:"_id"`
	Name  string `bson:"name"`
	Email string `bson:"email"`
}

2. Run gtag

Run

go run github.com/wolfogre/gtag/cmd/gtag -types User -tags bson .

and you will get file user_tag.go:

// Code generated by gtag. DO NOT EDIT.
// See: https://github.com/wolfogre/gtag

//go:generate go run github.com/wolfogre/gtag/cmd/gtag -types User -tags bson .
package tutorial

import (
	"reflect"
	"strings"
)

var (
	// ...
)

// UserTags indicate tags of type User
type UserTags struct {
	Id    string // `bson:"_id"`
	Name  string // `bson:"name"`
	Email string // `bson:"email"`
}

// Tags return specified tags of User
func (*User) Tags(tag string, convert ...func(string) string) UserTags {
	conv := func(in string) string { return strings.TrimSpace(strings.Split(in, ",")[0]) }
	if len(convert) > 0 {
		conv = convert[0]
	}
	if conv == nil {
		conv = func(in string) string { return in }
	}
	return UserTags{
		Id:    conv(tagOfUserId.Get(tag)),
		Name:  conv(tagOfUserName.Get(tag)),
		Email: conv(tagOfUserEmail.Get(tag)),
	}
}

// TagsBson is alias of Tags("bson")
func (*User) TagsBson() UserTags {
	var v *User
	return v.Tags("bson")
}

3. Use it

Now you can use the generated code to get tags elegantly:

// update mongo document
obj := User{}
tags := obj.TagsBson()

_, err := collection.UpdateOne(
    ctx,
    bson.M{tags.Id: id},
    bson.M{
        "$set", bson.M{
            tags.Name: name,
            tags.Email: email,
        },
    },
)

Project status

Gtag is beta and is considered feature complete.

About

Help you to get golang struct's tags elegantly.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载