Вы хотите что-то вроде этого.Вы по-прежнему можете сравнивать эти константы с литеральными целыми числами (это невозможно предотвратить), но любое сравнение или присвоение других целочисленных значений приведет к ошибке компилятора.
type opCode int
const (
lookupOp opCode = iota+1
forgetOp
getattrOp
setattrOp
readlinkOp
symlinkOp // 6
_ // skip 7
mknodOp // 8
// et cetera ad nauseam
)
Если вы действительно хотите запретить внешние пакетыУчитывая тот факт, что это целочисленные константы, но вы все равно хотите, чтобы они были сопоставимы, вы можете подумать о том, чтобы сделать что-то вроде этого,
type OpCode struct {
code opCode
}
и только выставить OpCode в своем API.Я также предложил бы явно документировать, что это сопоставимо.