我希望创建一个具有以下属性的“类似枚举”的常量列表:
枚举基于来自enum fuse_opcode的熔断器。以下是我正在努力完成的一些代码(也是非常错误的):
const Opcode (
_ = iota // skip 0
lookupOp
forgetOp
getattrOp
setattrOp
readlinkOp
symlinkOp // 6
_ // skip 7
mknodOp // 8
// et cetera ad nauseam
)发布于 2011-02-18 05:23:49
这是保险丝操作码的去码。它是从操作码创建的。通常,您会编写一个脚本来完成这个任务;我使用了一个文本编辑器。由于常量值与C枚举值匹配,因此使用显式值。
package fuse
type opCode int32
const (
opLookup = 1
opForget = 2
opGetattr = 3
opSetattr = 4
opReadlink = 5
opSymlink = 6
opMknod = 8
opMkdir = 9
opUnlink = 10
opRmdir = 11
opRename = 12
opLink = 13
opOpen = 14
opRead = 15
opWrite = 16
opStatfs = 17
opRelease = 18
opFsync = 20
opSetxattr = 21
opGetxattr = 22
opListxattr = 23
opRemovexattr = 24
opFlush = 25
opInit = 26
opOpendir = 27
opReaddir = 28
opReleasedir = 29
opFsyncdir = 30
opGetlk = 31
opSetlk = 32
opSetlkw = 33
opAccess = 34
opCreate = 35
opInterrupt = 36
opBmap = 37
opDestroy = 38
opIoctl = 39
opPoll = 40
opNotifyReply = 41
)发布于 2011-02-18 12:55:04
你想要这样的东西。您仍然可以将这些常量与文字整数进行比较(没有办法阻止这种情况),但任何对其他整数值的比较或赋值都会导致编译器错误。
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
}并且只在您的API中公开OpCode。我还建议明确地记录它是可比较的。
发布于 2011-02-18 06:29:30
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
)https://stackoverflow.com/questions/5037610
复制相似问题