#go #casting
#Вперед #Кастинг
Вопрос:
Я был вынужден определить конкретный тип для []string
, потому что я реализовал пользовательский анализатор yaml для типа strSlice.
Теперь мне нужно привести []strSlice
обратно в [][]string
, но компилятор go 1.7.1 отклоняет это как ошибку.
type strSlice []string
var x1 []strSlice
var x2 [][]string
...
x2 = [][]string(x1)
Как я могу выполнить операцию приведения?
Ответ №1:
Вы используете именованный тип фрагмента строки. Вам нужно преобразовать каждую запись в x1
обратно в []string
первую:
type strSlice []string
var x1 []strSlice
var x2 [][]string
...
for _, s := range x1 {
x2 = append(x2, []string(s))
}
https://play.golang.org/p/5iJT2Hsv1R
К сожалению, нет способа сделать это за один раз, потому что каждый из индексов в x1
является strSlice
типом и должен быть преобразован в []string
тип, в котором будет сохранен x2
. Go не позволяет выполнить это за одну операцию, потому что разработчики не хотели скрывать O (n) операций в синтаксическом сахаре.