Golang Go语言初学,请教一个问题

发布于 1周前 作者 phonegap100 来自 Go语言
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 后是空啊


Golang Go语言初学,请教一个问题

更多关于Golang Go语言初学,请教一个问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

17 回复

为什么你们都喜欢把 error 忽略了,然后问为什么会出问题?

更多关于Golang Go语言初学,请教一个问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个问题是因为 struct 里要 json 化的变量需要大写

导出变量才会被序列化

首字母大写的变量是导出变量

记住了,不大写是无法外部使用的。

1 楼才是正解

谢谢各位大大,首字母大写。记住了。

不是首字母大写 是要序列化的结构体要是能导出的

话说相对于可导出这个问题来说,check error 才是关键吧

就像大家说的,首字母没大写这个问题还好,你能发现,忽略 error 的话,跑着跑着莫名 panic 了,估计你就蒙了

还是先把官网的教程认真看一遍吧

非常感谢各位!

请教一下代码怎么贴出来的?我用 gist 法无法做到,只能显示一个按钮。

用 markdown 啊,发主题时右下角有选择

1 楼是正解

你们好好看看代码, 人家怎么没有 check error 了? 小写不导出会报错么? … 真的是服气 说 1L 正解的人…

你好,很高兴你对Go语言(Golang)产生了兴趣!作为初学者,你可能会遇到很多有趣且富有挑战性的内容。以下是一些针对初学者常见问题的建议,希望对你有所帮助:

  1. 基础语法:首先,确保你掌握了Go语言的基础语法,包括变量声明、数据类型、控制结构(如循环和条件语句)以及函数定义。你可以通过Go语言的官方文档或一些在线教程来学习这些内容。

  2. 并发编程:Go语言以其强大的并发处理能力而闻名。了解goroutines和channel是掌握Go语言并发编程的关键。试着编写一些简单的并发程序,以加深对这部分内容的理解。

  3. 标准库:Go语言的标准库非常丰富,涵盖了网络编程、文件操作、文本处理等多个方面。熟悉这些标准库将大大提高你的编程效率。

  4. 实践项目:理论知识的学习需要与实践相结合。你可以尝试编写一些简单的项目,如Web服务器、文件管理器等,以检验你的学习成果。

  5. 社区资源:加入Go语言的社区,如GitHub上的Go项目、Stack Overflow上的Go板块以及线下的技术交流会等,将为你提供更多的学习资源和交流机会。

最后,记得保持耐心和好奇心,不断挑战自己。随着你对Go语言的深入理解,你会发现越来越多的乐趣和可能性。祝你学习顺利!

回到顶部