Таблица функций и переключателей в golang

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

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

6
задан pvinis 29 March 2012 в 15:10
поделиться