Mat*_*ner 1 enums constants go iota
我希望创建一个具有以下属性的"类似枚举"的常量列表:
枚举是基于enum fuse_opcode从FUSE.这是我正在尝试完成的一些代码(也是非常错误的):
const Opcode (
_ = iota // skip 0
lookupOp
forgetOp
getattrOp
setattrOp
readlinkOp
symlinkOp // 6
_ // skip 7
mknodOp // 8
// et cetera ad nauseam
)
Run Code Online (Sandbox Code Playgroud)
rog*_*rog 22
你想要这样的东西.您仍然可以将这些常量与文字整数进行比较(没有办法防止这种情况),但是对其他整数值的任何比较或赋值都会产生编译错误.
type opCode int
const (
lookupOp opCode = iota+1
forgetOp
getattrOp
setattrOp
readlinkOp
symlinkOp // 6
_ // skip 7
mknodOp // 8
// et cetera ad nauseam
)
Run Code Online (Sandbox Code Playgroud)
如果你真的想要防止外部软件包看到这些是整数常量的事实,但你仍然希望它具有可比性,你可以考虑做这样的事情,
type OpCode struct {
code opCode
}
Run Code Online (Sandbox Code Playgroud)
并且只在您的API中公开OpCode.我还建议明确记录它是可比较的.
package fuse
type opCode int32
const (
opLookup opCode = 1
opForget opCode = 2
opGetattr opCode = 3
opSetattr opCode = 4
opReadlink opCode = 5
opSymlink opCode = 6
opMknod opCode = 8
opMkdir opCode = 9
opUnlink opCode = 10
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7918 次 |
| 最近记录: |