Как уменьшить многословие при определении ограниченных значений структур, которые должны быть постоянными в golang? - PullRequest
0 голосов
/ 01 октября 2018

Предположим, у меня есть следующий фрагмент кода:

package fruits

type fruitType uint8

const(
    banana fruitType = iota
    apple fruitType = iota
    strawberry fruitType = iota
)

type allFruitTypes struct {
       Banana fruitType
       Apple fruitType
       Strawberry fruitType
}

var allFruitTypesImpl = allFruitTypes {
    Banana: banana,
    Apple: apple,
    Strawberry: strawberry,
}

//GetAllFruitTypes returns a list with all the possible fruit types
func GetAllFruitTypes() *allFruitTypes {
 return &allFruitTypesImpl 
}

Таким образом, я могу избежать того, что вне моей упаковки создаются новые виды фруктов.И все же это позволяет прочитать мой список возможных типов фруктов.Это правильно?

Так что моя главная проблема здесь в том, что я нахожу действительно раздражающим определять 3 вещи, которые означают одно и то же:

  1. константы, использующие йоту
  2. объявление типа структуры
  3. , определяющее реализацию структуры и вводящее значения для каждого члена.

Для меня семантически три из них означают одно и то же.Однако из-за того, как работает go (или из-за отсутствия у меня знаний о том, как лучше набрать этот код на go), мне приходится повторять одно и то же 3 раза.

Есть ли способ вызвать тот же эффект безнабирать одну и ту же семантику 3 раза?

1 Ответ

0 голосов
/ 01 октября 2018

Это самое короткое:

//FruitTypes has a field for every fruit type
type FruitTypes struct {
    Banana, Apple, Strawberry uint8
}

//Fruits returns a list with all the possible fruit types
func Fruits() *FruitTypes {
    return &FruitTypes{0, 1, 2}
}

Если вам нужны константы

const (
    banana uint8 = iota
    apple
    strawberry
)

//FruitTypes has a field for every fruit type
type FruitTypes struct {
    Banana, Apple, Strawberry uint8
}

//Fruits returns a list with all the possible fruit types
func Fruits() *FruitTypes {
    return &FruitTypes{banana, apple, strawberry}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...