Closed rustnnes closed 11 months ago
Então, realmente o Go não tem suporte a enum mas você pode usar uma redefinição de tipo
type OrderType string
const (
Buy OrderType = "Buy"
Sell OrderType = "Sell"
)
func (s OrderType) String() string {
switch s {
case Buy:
return "Buy"
case Sell:
return "Sell"
}
return "unknown"
}
usando a redefinição voce usa as constantes Buy e Sell por exemplo e no caso do Status a estratégia é parecida e da até pra fazer algo mais parecido ainda, usando um mapeamento de inteiro pra string (uint8)
type OrderStatus uint8
const (
open OrderStatus = iota
closed
)
func (s OrderStatus) String() string {
switch s {
case open:
return "open"
case closed:
return "close"
}
return "unknown"
}
E esse método String do tipo pode ser mapeado pro json, o iota define o primeiro como 0 e os próximos vão em ordem crescente de 1 em 1
Após o código estabelecido, tentei refatorar e esbarrei numa questão que não consigo pensar numa solução: limitar os valores que um campo pode receber, como no caso do campo
Order
.Status
, que recebeOPEN
eCLOSED
, eOrder
.OrderType
, que pode receberBUY
eSELL
.Fiz algumas pesquisas, mas nenhum resultado deu uma ideia de como reforçar em tempo de desenvolvimento o valor que esses campos podem assumir.
Como vocês tem resolvido esse caso no dia-a-dia?