Я не нашел пакет BitSet в Движении, таким образом, я пытался реализовать его. Я хотел бы использовать массив uint64 для хранения битов.
Мне нужно число битов для выделения массива uint64. С Java я могу определить конструктора, который берет целое число. В то время как Идут, не предоставляет конструктору, как я могу правильно инициализировать BitSet 'объект' когда новый вызов пользователя ()?
Объявить 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: совместное использование интерфейса, а не реализации.
Короткий ответ: вы не можете правильно инициализировать объект BitSet
, когда клиент вызывает new
().
Лучшее, что вы можете сделать, это сделать так, чтобы нулевое значение вашего BitSet
было действительным. Это делают такие типы, как list.List
, sync.Mutex
и big.Int
. Таким образом, вы будете уверены, что клиент не сможет получить недопустимое значение.
Следующее лучшее, что вы можете сделать, это создать констуктор-подобную функцию (названную NewBitSet
в данном случае) и ожидать, что клиенты будут вызывать ее.