Я не считаю это хорошим решением, но вы можете найти выход из моего предложения.
Вы можете использовать теги в своей структуре, а затем проверить их с помощью отражения.
type Invoice struct {
ID *int64 `required`
Number *int64
Date *time.Time
}
и затем
package main
import (
"fmt"
"reflect"
)
type Invoice struct {
ID *int64 `required`
Number *int64
Date *time.Time
}
...
t := reflect.TypeOf(myInvoice)
id, _ := t.FieldByName("ID")
if id.Tag == "required" && ...
Однако я бы старался избегать использования отражения в подобных случаях, поскольку это не очень хороший вариант использования.
Обзор тегов можно найти здесь:
https://medium.com/golangspec/tags-in-golang-3e5db0b8ef3e