Как реализовать BitSet с Движением?

Я не нашел пакет BitSet в Движении, таким образом, я пытался реализовать его. Я хотел бы использовать массив uint64 для хранения битов.

Мне нужно число битов для выделения массива uint64. С Java я могу определить конструктора, который берет целое число. В то время как Идут, не предоставляет конструктору, как я могу правильно инициализировать BitSet 'объект' когда новый вызов пользователя ()?

11
задан hannson 4 March 2010 в 21:49
поделиться

2 ответа

Объявить bitSet как частную структуру:

type bitSet struct {
  len int
  array []uint64
}

Открыть интерфейс BitSet:

type BitSet interface {
  Has(pos int) bool
  Add(pos int) bool
  Len() int
}

Также предоставить функцию NewBitSet:

func NewBitSet(len int) BitSet {
  return &bitSet{len, make(uint64, (len+7) / 8) }
}

Это способ инкапсуляции Go: совместное использование интерфейса, а не реализации.

3
ответ дан 3 December 2019 в 10:44
поделиться

Короткий ответ: вы не можете правильно инициализировать объект BitSet, когда клиент вызывает new().

Лучшее, что вы можете сделать, это сделать так, чтобы нулевое значение вашего BitSet было действительным. Это делают такие типы, как list.List, sync.Mutex и big.Int. Таким образом, вы будете уверены, что клиент не сможет получить недопустимое значение.

Следующее лучшее, что вы можете сделать, это создать констуктор-подобную функцию (названную NewBitSet в данном случае) и ожидать, что клиенты будут вызывать ее.

1
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: