第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確處理通過curl通過docker傳遞的go中的json數(shù)據(jù)

如何正確處理通過curl通過docker傳遞的go中的json數(shù)據(jù)

Go
慕碼人8056858 2023-03-21 15:42:45
我有碼頭集裝箱。有一個服務(wù)器(在 Go 上)處理 8000 端口上的發(fā)布請求。該代碼:package mainimport (    "database/sql"    _ "github.com/lib/pq"    "fmt"    "net/http"    "encoding/json")type tv_type struct {     brand string `json:"brand"`    manufacturer string `json:"manufacturer"`    model string `json:"model"`    year int16 `json:"year"`} func handler(w http.ResponseWriter, r *http.Request) {        if r.Method == http.MethodGet {           //blahblah        }    fmt.Fprintln(w, "Hello WORLD")       if r.Method == http.MethodPost {        connStr := "user=www password=qwerty dbname=products sslmode=disable"        db, err := sql.Open("postgres", connStr)        defer db.Close()        if err != nil {            panic(err)        }         decoder := json.NewDecoder(r.Body)        var t tv_type        err = decoder.Decode(&t)        if err != nil {            panic(err)        }        _, err = db.Exec("insert into TV (brand, manufacturer, model, year) values ($1, $2, $3, $4)",            t.brand, t.manufacturer, t.model, t.year)        if err != nil {            panic(err)        } else {                        fmt.Println(t.brand, t.manufacturer, t.model, t.year)            fmt.Fprintln(w, "Inserting has been succesfully")        }    }}func main() {    http.HandleFunc("/", handler)    http.ListenAndServe(":8000", nil)}運行 Docker 容器,在 8000 端口的 docker 容器上請求 80 自己的端口代理。運行這個之后:curl -X POST -H "Content-Type:application/json" -d '{"brand":"samsung", "manufacturer":"samsung", "model":"x1", "year":2015 }' http://localhost:80Hello WORLDInserting has been succesfully但是得到的數(shù)據(jù)是錯誤的(nil,nil,nil,0):go run /home/go/hello.go    0
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

您的代碼的主要問題是當(dāng)您嘗試解碼服務(wù)器在響應(yīng)中提供的 json 時,您的結(jié)構(gòu)無法解組數(shù)據(jù)。由于結(jié)構(gòu)字段未導(dǎo)出。將結(jié)構(gòu)字段更改為大寫,如下所示:

type Tv_type struct { 
    Brand string `json:"brand"`
    Manufacturer string `json:"manufacturer"`
    Model string `json:"model"`
    Year int16 `json:"year"`}

檢查Playground 示例以獲取工作代碼。

在 Golang 規(guī)范中也提到了Unmarshal為:

為了將 JSON 解組為結(jié)構(gòu),Unmarshal 將傳入的對象鍵與 Marshal 使用的鍵(結(jié)構(gòu)字段名稱或其標(biāo)記)進行匹配,首選完全匹配但也接受不區(qū)分大小寫的匹配。默認情況下,沒有相應(yīng)結(jié)構(gòu)字段的對象鍵將被忽略(參見 Decoder.DisallowUnknownFields 的替代方法)。


查看完整回答
反對 回復(fù) 2023-03-21
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號