Edit field tags for golang struct fields, based on gomodifytags.
This package is inspired by GoAddTags of vim-go and go-add-tags.
gomodifytags makes it easy to update, add or delete the tags in a struct field.
It can be installed with
go install github.com/fatih/gomodifytags@latestAvailable on all major package.el community maintained repos -
MELPA Stable and MELPA repos.
MELPA Stable is recommended as it has the latest stable version. MELPA has a development snapshot for users who don’t mind breakage but don’t want to run from a git checkout.
You can install go-tag using the following command:
M-x package-install [RET] go-tag [RET]
or if you’d rather keep it in your dotfiles:
(unless (package-installed-p 'go-tag)
(package-refresh-contents)
(package-install 'go-tag))If the installation doesn’t work try refreshing the package list:
M-x package-refresh-contents
GoAddTags AND GoRemoveTags of vim-go , go-tag you will get started quickly.
go-tag-add:[range]go-tag-add [key],[option] [key1],[option] …
Adds field tags for the fields of a struct. If called inside a struct it automatically add field tags with the
jsonkey and the value automatically generated based on the field name. An error message is given if it’s called outside a struct definition or if the file is not correctly formatted.If [range] is given, only the selected fields will be changed.
The default
jsoncan be changed by providing one or more [key] arguments. An example of addingxmlanddbwould be::go-tag-add xml db
If [option] is passed it’ll either add a new tag with an option or will modify existing tags. An example of adding
omitemptyto alljsonfields would be::go-tag-add json,omitempty
You can define a constant value instead of the default field based value. For example the following command will add
`valid:"1"`to all fields.:go-tag-add valid=1
go-tag-remove:[range]go-tag-remove [key],[option] [key1],[option1] …
Rmove field tags for the fields of a struct. If called inside a struct it automatically remove all field tags. An error message is given if it’s called outside a struct definition or if the file is not correctly formatted
If [range] is given, only the selected fields will be changed.
If [key] is given, it will only remove those keys. Example:
:go-tag-remove json
If [option] is passed with a [key], it will only remove the options. Example, this will only remove
omitemptyoptions from fields containingjson::go-tag-remove json,omitempty
go-tag-refresh(Useful when designing structures):[range]go-tag-refresh [key],[option] [key1],[option] …
Equal to:
:[range]go-tag-remove [key] [key1] …
:[range]go-tag-add [key],[option] [key1],[option] …
support the following transformations:
snakecase:BaseDomain->base_domaincamelcase:BaseDomain->baseDomainlispcase:BaseDomain->base-domain
(setq go-tag-args (list "-transform" "camelcase"))(with-eval-after-load 'go-mode
(define-key go-mode-map (kbd "C-c t") #'go-tag-add)
(define-key go-mode-map (kbd "C-c T") #'go-tag-remove))
