Golang Go语言中 struct 问题
Golang Go语言中 struct 问题
` package main
import ( "fmt" )
type A struct { B string }
type B struct { C string A } func main(){ var a B a.C = "a" a.B = "b" fmt.Println(a) }`
上面这段代码返回 {a {b}}
, 如何才能定义一个嵌套的结构体并且返回 {a b}
先谢谢大佬们了
更多关于Golang Go语言中 struct 问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
要定制化结构体的输出,实现 String 函数即可,可以搜索关键字 Stringer
更多关于Golang Go语言中 struct 问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
<br>package main<br><br>import ( "fmt" )<br><br>type A struct {<br> B string<br>}<br>func (this A)String() string {<br> return "{a b}"<br>}<br><br><br>type B struct {<br> C string<br> A<br>}<br><br>func main(){<br> var a B<br> a.C = "a"<br> a.B = "b"<br> fmt.Println(a)<br>}<br>
package main
import ( “fmt” )
type A struct {
B string
}
type B struct {
C string
A
}
func (this B)String() string {
return fmt.Sprintf("{%s,%s}",this.C,this.A.B)
}
func main(){
var a B
a.C = “a”
a.B = “b”
fmt.Println(a)
}
type InternalWorkOrderItem struct {
ItemID string json:"item_id" bson:"item_id"
ItemNum string json:"item_num" bson:"item_num"
Unit string json:"unit" bson:"unit"
Qty int json:"qty" bson:"qty"
UnitPrice float64 json:"unit_price" bson:"unit_price"
TotalPrice float64 json:"total_price" bson:"total_price"
CadDir string json:"cad_dir" bson:"cad_dir"
State string json:"state" bson:"state" binding:"required"
InternalWorkOrder json:"internal_work_order" bson:"internal_work_order"
}
其实是这样的,从数据库里面取出来的数据,然后返回到前端是 json,如果要重现 string 函数的话,那就是要在返回前运行一次重写的 string 函数?好像怪怪的
建议把你现在返回去的 json 格式和你想要变成的 json 格式发一下,
{
“item_id”:“A022-59451-1”,
“item_num”:“30928-32938-392”,
“unit”:“pc”,
“qty”:2,
“unit_price”:20,
“total_price”:40,
“cad_dir”:“30928-32938-392”,
“state”:“业务下单”,
“internal_work_order”:{
“id”:"",
“internal_work_num”:"",
“customer”:"",
“customer_po”:"",
“po_submit_date”:“0001-01-01T00:00:00Z”,
“customer_dateline”:“0001-01-01T00:00:00Z”,
“internal_dateline”:“0001-01-01T00:00:00Z”,
“delivery_dateline”:“0001-01-01T00:00:00Z”
}
}
这是现在返回的
{
“item_id”:“A022-59451-1”,
“item_num”:“30928-32938-392”,
“unit”:“pc”,
“qty”:2,
“unit_price”:20,
“total_price”:40,
“cad_dir”:“30928-32938-392”,
“state”:“业务下单”,
“id”:"",
“internal_work_num”:"",
“customer”:"",
“customer_po”:"",
“po_submit_date”:“0001-01-01T00:00:00Z”,
“customer_dateline”:“0001-01-01T00:00:00Z”,
“internal_dateline”:“0001-01-01T00:00:00Z”,
“delivery_dateline”:“0001-01-01T00:00:00Z”
}
这是想要返回的,就是把里面嵌套的去掉
其实可以在前端处理,就是担心如果数据量很大的话 浏览器会卡住
你在 type B 定义里 写 A 的时候不要给 A 加 json 的 tag 应该就是你要的效果。。
如果给 A 加了 json="xx"的话,输出 json 是这样的:
{
“C” : “…”,
“xx” : {
“B” : “…”
}
}
不加 tag 的话是这样
{
“C” : “…”,
“B” : “…”
}
InternalWorkOrder 这个后面的json:"internal_work_order" bson:"internal_work_order"
去掉,应该可以
还真是… 这什么原理 谢谢
我刚开始学 go 。。
你把他对应理解成如果 struct Father 中套 struct Son, 如果 Son 不写 tag 的话相当于 js 的 “…Son” 展开了 Son 的属性。
如果写了 json 的 tag 的话会被你写的 tag 包裹、嵌套起来。。写法看着不是特别舒服。。
原理的话我猜想是 go 去查找你写了 tag 的属性,如果有的话,定义一个 json 的 key,然后将它的属性展开成一个 json 对象对应这个 key 。。。不知道对不对
理解了,谢谢 看来还是要去啃源码
json 的 tag 有 inline 选项
在Go语言中,struct
是一种用于定义自定义数据类型的复合数据类型,它允许你将多个不同类型的变量组合在一起。以下是一些关于 struct
的常见问题和解答:
-
定义
struct
: 使用type
关键字和struct
标签来定义一个结构体。例如:type Person struct { Name string Age int }
-
创建和初始化
struct
实例: 可以直接声明或使用复合字面量进行初始化。例如:p1 := Person{} // 零值初始化 p2 := Person{Name: "Alice", Age: 30} // 字段赋值初始化
-
访问和修改
struct
字段: 通过点操作符(.
)访问和修改结构体字段。例如:fmt.Println(p2.Name) // 访问字段 p2.Age = 31 // 修改字段
-
嵌套
struct
: 一个结构体可以包含其他结构体作为字段,实现更复杂的数据结构。例如:type Address struct { City, State string } type Employee struct { Person Address JobTitle string }
-
方法接收者: 可以为结构体定义方法,方法是带有接收者的函数。接收者可以是值接收者或指针接收者。
这些是Go语言中 struct
的一些基本概念和用法。希望这些信息对你有所帮助!如果有更具体的问题或需要进一步的解释,请随时提问。