Массив указателей в маршаллинге Go JSON

У меня есть следующий код, где я хочу просто проверить, правильно ли я маршалирую свой JSON или нет:

package main
import (
    "encoding/json"
    "fmt"
)

 
type TestFile struct {

        Download_Seconds        int                `json:"download_seconds"`                                                                             
        Name                    string             `json:"name"`                                                            
}

 
type TestFileList struct {

        File                    *TestFile          `json:"file"`                                                                                                                                                           
}


type TestSpec struct {

        Files                   []*TestFileList    `json:"files"`                                                                                                 

}

 

func main() {
         r := new(TestSpec)
         b, _ := json.Marshal(r)
         fmt.Println(string(b))

         MyJSON := &TestSpec{Files: []&TestFileList{File: &TestFile{Download_Seconds: 600, Name: "filename1"}, File: &TestFile{Download_Seconds: 1200, Name: "filename2"}}}

         b1, _ := json.Marshal(MyJSON)
         fmt.Println(string(b1))

} 

Я получаю эту ошибку:

.\go_json_eg2.go:28:32: syntax error: unexpected &, expecting type.

Line no: 28 для моего кода MyJSON := &TestSpec{Files: []&TestFileList{File: &TestFile{Download_Seconds: 600, Name: "filename1"}, File: &TestFile{Download_Seconds: 1200, Name: "filename2"}}}

Довольно новичок в маршалинге Go. Я подумал, что делаю это неправильно []&TestFileList{File: &TestFile{Download_Seconds: 600, Name: "filename1"}, File: &TestFile{Download_Seconds: 1200, Name: "filename2"}}.

Как это исправить?

@Zombo Нет, это не работает. вы его тестировали?

dig_123 20.03.2022 17:06
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
1
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
&TestSpec{
    Files: []*TestFileList{
        {File: &TestFile{Download_Seconds: 600, Name: "filename1"}},
        {File: &TestFile{Download_Seconds: 1200, Name: "filename2"}},
    },
}

https://go.dev/play/p/I30Mm0CxrUT

Обратите внимание, что кроме ошибки, указанной Зомбо в комментариях, вы еще не указали фигурные скобки, разграничивающие отдельные элементы в слайсе, т.е. у вас есть {File: ..., File: ...}, а должно быть {{File: ...}, {File: ...}}.

Вы можете прочитать больше о Составные литералыздесь.

Я хотел дать еще один голос +1 не только за ответ, но и за то, что поделился некоторыми соответствующими ресурсами для чтения. Это определенно поможет

dig_123 20.03.2022 18:32

Другие вопросы по теме