2016-04-08 9 views
2

Echo (https://github.com/labstack/echo) adlı hafif bir çerçeve web çerçevesi kullanıyorum ve onunla çok basit bir API oluşturmaya çalışıyorum.golang API

bu benim yollarından biridir

e.Get("/v1/:channel/:username", getData) 

bu bir MySQL veritabanı

func getData(c echo.Context) error { 
    quote := new(Quote) 
    for rows.Next() { 
     var username string 
     var message string 
     err = rows.Scan(&username, &message) 
     checkErr(err) 
     quote.username = username 
     quote.message = message 
    } 
    log.Println(quote) 

    defer rows.Close() 
    return c.JSON(http.StatusOK, quote) 
} 

itibaren SEÇ çok basit ben de dönüş değeri

için bu temel yapı var getData işlevi
type Quote struct { 
    username string 
    message string 
} 

Maalesef şimdi bir JSON'u nasıl iade edeceğimi anlayamıyorum. Bu kodu denediğimde, sunucudan yanıt her zaman yalnızca {} Geri dönüşü denedim c.String iyi çalışıyor ve yanıt veriyor ancak bir JSON döndürmek istiyorum.

Bu örneği takip ettim ve sorunu burada göremiyorum. https://github.com/labstack/echox/blob/master/recipe/crud/main.go

Neyi yanlış yaptığım hakkında bir fikriniz var mı?

cevap

8

Yapınız küçük harfli olduğundan, yapınızın ihraç değerleri yoktur.

type Quote struct { 
    Username string `json:"username"` 
    Password string `json:"password"` 
} 

ben kod parçacığının gönderdiniz gibi yapabilirsiniz harici temsil dahili adını değiştirmek isterseniz, böylece de, sıralıyor anahtarının adını açıklama ekleyebilirsiniz.

+0

bu mantıklı ve kusursuz çalışıyor! teşekkür ederim! – gempir

+0

Yapı kullanmadan keyfi bir json üretmenin bir yolu var mı? – Homan

+1

JSON'la marshal yapmak için herhangi bir 'map [string] ara yüzünü {}' kullanabilirsiniz. Örneğin için. : t: = harita [dize] arabirimi {} {"field1:" value1 ",}' 'str, err: = json.Marshal (t)' 'fmt.Println (string (str))' @ Homan –