таблица функций и переключатель в Голанге
Я пишу простой эмулятор на ходу (я должен или я должен вернуться к с?). в любом случае, я беру инструкцию и декодирую ее. на данный момент у меня есть байт, как 0x81, и я должен выполнить правильную функцию.
Должен ли я иметь что-то вроде этого
func (sys *cpu) eval() {
switch opcode {
case 0x80:
sys.add(sys.b)
case 0x81:
sys.add(sys.c)
etc
}
}
или что-то вроде этого
var fnTable = []func(*cpu) {
0x80: func(sys *cpu) {
sys.add(sys.b)
},
0x81: func(sys *cpu) {
sys.add(sys.c)
}
}
func (sys *cpu) eval() {
return fnTable[opcode](sys)
}
1. какой из них лучше?
2. какой из них быстрее?
также
3. Могу ли я объявить встроенную функцию?
4. у меня естьcpu
struct
в котором у меня есть регистры и т. д. было бы быстрее, если бы у меня были регистры и все как глобальные переменные? (безstruct
)
большое Вам спасибо.