Я работаю над реализацией одновременного чтения string
и byte
в Go.Цель этого - разрешить синтаксический анализ newline
и других подобных байтов в строках чтения.
При исследовании этой проблемы я нашел различные способы обработки нескольких значений в контексте одного значения 1, однако ни один из них не имеет отношения к появлению смешанных типов.Идея использования интерфейса для решения этой проблемы была предложена 2 , и была предпринята попытка, но меня не устраивает длинное многословие существующих предложений 3 и 4.
Интересно, существует ли идиоматический способ эффективной сортировки множества типизированных значений аккуратно.
РЕДАКТИРОВАНИЕ: Сначала я установил интерфейс, как было предложено.Это кажется хорошей идеей, и, если я помню, это часто используемый трюк из Си.
func Use(vals ...interface{}) {
i := 0
p := []uint8{} //I've replaced the alias "byte" with the native "uint8"
var val uint8 //I've changed this declaration to a non-assigned declaration
for i, val := range vals {
if i < 1 {
_ = val
i++
} else {
p[i] = val.(uint8)
return fmt.Print(p[i]) //please excuse the earlier typo
//interestingly, this call to p[i] returns more than one value
}
}
}
Остальная часть основного кода следует:
func other() (string, []byte) {
a := "declared and not used"
b := []byte("stuff")
return a,b
}
func main() {
Use(other())
}
Для меня это остается неизвестным, почемуэтот код должен иметь несколько значений внутри p [i].Разве blank identifier
, используемый в контуре управления, не делает такую возможность маловероятной?
Новая ошибка отредактированного кода сообщается как: invalid type assertion: x.(uint8) (non-interface type func(...interface {}) []interface {} on left)
Исходный код может бытьнаходится по адресу: https://play.golang.org/p/BEhOT7R0vvr
Отредактированный код можно найти по адресу: https://goplay.space/#SF7X7dx8yL9