Как сделать одну структуру для разных источников json?

Для того чтобы создать одну структуру, которая может использоваться для разных источников JSON, вам следует использовать возможности маршалинга и анмаршалинга данных в формате JSON в Go.

Go предоставляет пакет encoding/json, который позволяет работать с JSON данными. Этот пакет имеет функции Marshal и Unmarshal, которые позволяют преобразовывать данные в формат JSON и наоборот.

Прежде всего, вы должны определить структуру, которая будет соответствовать вашим JSON данным из разных источников. Для каждого поля в JSON вы должны добавить аннотацию в виде тэга в определении поля. Теги позволяют настраивать способ преобразования JSON данных в Go и наоборот.

Ниже приведен пример структуры, которая может использоваться для разных источников JSON:

type MyData struct {
    Field1 string `json:"field1"`
    Field2 int    `json:"field2"`
    Field3 bool   `json:"field3"`
}

В этом примере структура MyData имеет три поля: Field1, Field2 и Field3. Каждое поле имеет аннотацию json, которая указывает, как это поле должно быть преобразовано в JSON и обратно. В данном случае, значение field1 будет соответствовать полю Field1 в структуре, значение field2 будет соответствовать полю Field2, и так далее.

Теперь вы можете использовать функции Marshal и Unmarshal из пакета encoding/json для работы с данными. Например, для преобразования структуры MyData в JSON можно использовать следующий код:

data := MyData{
    Field1: "value1",
    Field2: 123,
    Field3: true,
}

jsonData, err := json.Marshal(data)
if err != nil {
    log.Fatal(err)
}

fmt.Println(string(jsonData))

А для преобразования JSON обратно в структуру MyData можно использовать следующий код:

jsonString := `{"field1":"value1","field2":123,"field3":true}`

var data MyData
err := json.Unmarshal([]byte(jsonString), &data)
if err != nil {
    log.Fatal(err)
}

fmt.Println(data.Field1)
fmt.Println(data.Field2)
fmt.Println(data.Field3)

Таким образом, вы можете использовать функции Marshal и Unmarshal из пакета encoding/json, а также аннотации json в структуре, чтобы создать универсальную структуру для разных источников JSON в Go.