(un) marshalling json golang не работает

Я играю с Go и не понимаю, почему json кодирует и декодирует, не работает для меня

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

может кто-нибудь намекнуть, где я иду не так?

мой пример кода: Перейти на площадку

package main

import "fmt"
import  "encoding/json"

type testStruct struct {
    clip string `json:"clip"`
}

func main() {
//unmarshal test
    var testJson = "{\"clip\":\"test\"}"
    var t testStruct
    var jsonData = []byte(testJson)
    err := json.Unmarshal(jsonData, &t)
    if err != nil {
        fmt.Printf("There was an error decoding the json. err = %s", err)
        return
    }
    fmt.Printf("contents of decoded json is: %#v\r\n", t)

//marshal test
    t.clip = "test2"
    data, err := json.Marshal(&t)
    if err != nil {
         fmt.Printf("There was an error encoding the json. err = %s", err)
         return
    }
    fmt.Printf("encoded json = %s\r\n", string(data))
}

выход:

 contents of decoded json is: main.testStruct{clip:""}
 encoded json = {}

на обоих выходах я бы ожидал увидеть декодированный или закодированный json

Ответ 1

Например,

package main

import "fmt"
import "encoding/json"

type testStruct struct {
    Clip string `json:"clip"`
}

func main() {
    //unmarshal test
    var testJson = "{\"clip\":\"test\"}"
    var t testStruct
    var jsonData = []byte(testJson)
    err := json.Unmarshal(jsonData, &t)
    if err != nil {
        fmt.Printf("There was an error decoding the json. err = %s", err)
        return
    }
    fmt.Printf("contents of decoded json is: %#v\r\n", t)

    //marshal test
    t.Clip = "test2"
    data, err := json.Marshal(&t)
    if err != nil {
        fmt.Printf("There was an error encoding the json. err = %s", err)
        return
    }
    fmt.Printf("encoded json = %s\r\n", string(data))
}

Вывод:

contents of decoded json is: main.testStruct{Clip:"test"}
encoded json = {"clip":"test2"}

Экспозиция:

http://play.golang.org/p/3XaVougMTE

Экспортировать поля структуры.

type testStruct struct {
    Clip string `json:"clip"`
}

Экспортированные идентификаторы

Идентификатор может быть экспортирован, чтобы разрешить доступ к нему из другого пакет. Идентификатор экспортируется, если оба:

  • первый символ имени идентификатора - это буква верхнего регистра Юникода (класс Юникода "Лу" ); и
  • идентификатор объявляется в блоке пакета или это имя поля или имя метода.

Все остальные идентификаторы не экспортируются.