таблица функций и переключатель в Голанге

Я пишу простой эмулятор на ходу (я должен или я должен вернуться к с?). в любом случае, я беру инструкцию и декодирую ее. на данный момент у меня есть байт, как 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)

большое Вам спасибо.

Ответы на вопрос(3)

Ваш ответ на вопрос