Преобразование типа 2D-фрагмента в go

#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) операций в синтаксическом сахаре.