Go是区分大小写的。

huangapple go评论100阅读模式
英文:

Go is Case Sensitive?

问题

我感到困惑。当我使用以下请求体进行POST请求时:

{"lng":1.23, "lat":4.56,"utc":789}

第一个返回的结果是{0,0,0}(错误的):

func test(rw http.ResponseWriter, req *http.Request) {
  type data struct {
    lng float64
    lat float64
    utc int
  }
  decoder := json.NewDecoder(req.Body)
  var t data
  err := decoder.Decode(&t)
  if err != nil {
      panic("PANIC")
  }
  log.Println(t)
}

第二个返回的结果是{1.23, 4.56, 789}(正确的):

func test(rw http.ResponseWriter, req *http.Request) {
  type data struct {
    Lng float64
    Lat float64
    Utc int
  }
  decoder := json.NewDecoder(req.Body)
  var t data
  err := decoder.Decode(&t)
  if err != nil {
      panic("PANIC")
  }
  log.Println(t)
}

唯一的区别是我在结构体定义中使用了大写字母。我是否漏掉了什么?这是一个错误吗?

英文:

I'm perplexed. When I POST with the following body

{"lng":1.23, "lat":4.56,"utc":789}

This one returns {0,0,0} (incorrect)

func test(rw http.ResponseWriter, req *http.Request) {
  type data struct {
    lng float64
    lat float64
    utc int
  }
  decoder := json.NewDecoder(req.Body)
  var t data
  err := decoder.Decode(&t)
  if err != nil {
      panic("PANIC")
  }
  log.Println(t)
}

This one returns {1.23, 4.56, 789} (correct)

func test(rw http.ResponseWriter, req *http.Request) {
  type data struct {
    Lng float64
    Lat float64
    Utc int
  }
  decoder := json.NewDecoder(req.Body)
  var t data
  err := decoder.Decode(&t)
  if err != nil {
      panic("PANIC")
  }
  log.Println(t)
}

The only difference is that I'm using uppercase letters in my struct definition.
Am I missing something? Is this a bug?

答案1

得分: 15

JSON编码包仅适用于导出字段。解码器对大小写不敏感。

您可以使用字段标签来控制编码时的大小写,如包文档中所述。

Go语言是区分大小写的。

英文:

The JSON encoding package works with exported fields only. The decoder is otherwise case insensitive.

You can control the case when encoding using field tags as described in the package documentation.

The Go Language is case sensitive.

huangapple
  • 本文由 发表于 2014年10月19日 10:23:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/26446649.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定