V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
clker

初学 golang, 请教一个问题

  •  
  •   clker ·
    clker · Oct 10, 2017 · 2463 views
    This topic created in 3122 days ago, the information mentioned may be changed or developed.
    package main
    
    import (
    	"encoding/json"
    	"fmt"
    )
    
    type A struct {
    	a int `json:"a"`
    }
    
    type B struct {
    	b int `json:"b"`
    	a []A `json:"a"`
    }
    
    func main() {
    	var a A
    	var b B
    	a.a = 1
    	b.b = 2
    	//b.a = make([]A, 2)
    	b.a = append(b.a, A{2})
    	b.a = append(b.a, A{3})
    
    	s1, err := json.Marshal(&a)
    	if err != nil {
    		fmt.Println(err)
    	} else {
    		fmt.Println("1", a)
    		fmt.Println("1", string(s1))
    	}
    
    	s2, _ := json.Marshal(b)
    	fmt.Println("2", b)
    	fmt.Println("2", string(s2))
    
    }
    

    得到的结果是:
    1 {1}
    1 {}
    2 {2 [{2} {3}]}
    2 {}

    为何 json.Marshal 后是空啊

    16 replies    2017-10-24 17:28:59 +08:00
    ikw
        1
    ikw  
       Oct 10, 2017 via iPhone   ❤️ 1
    为什么你们都喜欢把 error 忽略了,然后问为什么会出问题?
    ikw
        2
    ikw  
       Oct 10, 2017 via iPhone   ❤️ 1
    这个问题是因为 struct 里要 json 化的变量需要大写
    x8
        3
    x8  
       Oct 10, 2017   ❤️ 1
    导出变量才会被序列化

    首字母大写的变量是导出变量
    Sapp
        4
    Sapp  
       Oct 10, 2017 via Android   ❤️ 1
    记住了,不大写是无法外部使用的。
    trys1
        5
    trys1  
       Oct 11, 2017 via Android
    @zwpaper 1 楼才是正解
    clker
        6
    clker  
    OP
       Oct 11, 2017
    谢谢各位大大,首字母大写。记住了。
    Immortal
        7
    Immortal  
       Oct 11, 2017   ❤️ 1
    @clker 不是首字母大写 是要序列化的结构体要是能导出的
    zdt3476
        8
    zdt3476  
       Oct 11, 2017   ❤️ 1
    话说相对于可导出这个问题来说,check error 才是关键吧
    ikw
        9
    ikw  
       Oct 11, 2017 via iPhone   ❤️ 1
    @clker 就像大家说的,首字母没大写这个问题还好,你能发现,忽略 error 的话,跑着跑着莫名 panic 了,估计你就蒙了
    HarrisonZ
        10
    HarrisonZ  
       Oct 11, 2017
    还是先把官网的教程认真看一遍吧
    clker
        11
    clker  
    OP
       Oct 11, 2017
    非常感谢各位!
    HMSQQbA
        12
    HMSQQbA  
       Oct 11, 2017
    请教一下代码怎么贴出来的?我用 gist 法无法做到,只能显示一个按钮。
    clker
        13
    clker  
    OP
       Oct 12, 2017 via Android
    @HMSQQbA 用 markdown 啊,发主题时右下角有选择
    HMSQQbA
        14
    HMSQQbA  
       Oct 12, 2017
    @clker 谢谢啊
    jpuyy
        15
    jpuyy  
       Oct 24, 2017
    1 楼是正解
    YakuMioto
        16
    YakuMioto  
       Oct 24, 2017
    你们好好看看代码, 人家怎么没有 check error 了? 小写不导出会报错么? ... 真的是服气 说 1L 正解的人....
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5907 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 02:53 · PVG 10:53 · LAX 19:53 · JFK 22:53
    ♥ Do have faith in what you're doing.