在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ struct變量成員小寫無法轉(zhuǎn)換成JSON。

struct變量成員小寫無法轉(zhuǎn)換成JSON。

package main

import (
    "encoding/json"
    "fmt"
    "reflect"
)

type Computer struct {
    Cpu string `json:"cup"`
    Ram int    `json:"ram"`
    Rom int    `json:"rom"`
}

func main() {
    hp := &Computer{"i7", 2, 250}

    res, err := json.Marshal(hp)
    if err == nil {
        fmt.Println(reflect.TypeOf(res))
        fmt.Println(string(res))
    }
}

以上代碼正常運行,運行結(jié)果是:
[]uint8
{"cup":"i7","ram":2,"rom":250}
Cpu: i7, Ram: 2, Rom: 250

但是如果結(jié)構(gòu)體寫成:

type Computer struct {
    cpu string `json:"cup"`
    ram int    `json:"ram"`
    rom int    `json:"rom"`
}

就是首字母小寫,發(fā)現(xiàn)就無法轉(zhuǎn)換成 json了
運行結(jié)果就變成:
[]unit8
{}

回答
編輯回答
耍太極

clipboard.png

2018年2月13日 09:38
編輯回答
眼雜

golang首字母大小寫意味著改變了成員的訪問權(quán)限,小寫就變成私有的了,不同package是無法訪問其他package的私有成員的,所以json就沒辦法導(dǎo)出了。。。

2017年4月17日 23:01
編輯回答
柒喵

struct變量成員名小寫時不符合golang的導(dǎo)出規(guī)則, 導(dǎo)致json.Marshal(其使用了reflect)無法反射到內(nèi)容.

2017年3月17日 14:25
編輯回答
妖妖

可以使用小寫的。給你看一個

//Response 響應(yīng)前端的結(jié)構(gòu)體
type Response struct {
    Message string `json:"message"`
    Code    uint   `json:"code"`
}

你像上面去做,當json格式化為字符串的時候,就會變?yōu)樾懥?/p>

2018年6月11日 12:15
編輯回答
避風港

很簡單個比方,你如果把json.Marshal(hp) 這個方法的重新實現(xiàn)在main方法下面,struct中的成員變量就可以小寫了

一個道理,struct內(nèi)的成員變量小寫就只有當前包內(nèi)可以訪問。

2017年9月21日 11:47