Golang Go语言中 struct 问题

发布于 1周前 作者 nodeper 来自 Go语言

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

15 回复

要定制化结构体的输出,实现 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 的常见问题和解答:

  1. 定义 struct: 使用 type 关键字和 struct 标签来定义一个结构体。例如:

    type Person struct {
        Name string
        Age  int
    }
    
  2. 创建和初始化 struct 实例: 可以直接声明或使用复合字面量进行初始化。例如:

    p1 := Person{} // 零值初始化
    p2 := Person{Name: "Alice", Age: 30} // 字段赋值初始化
    
  3. 访问和修改 struct 字段: 通过点操作符(.)访问和修改结构体字段。例如:

    fmt.Println(p2.Name) // 访问字段
    p2.Age = 31          // 修改字段
    
  4. 嵌套 struct: 一个结构体可以包含其他结构体作为字段,实现更复杂的数据结构。例如:

    type Address struct {
        City, State string
    }
    
    type Employee struct {
        Person
        Address
        JobTitle string
    }
    
  5. 方法接收者: 可以为结构体定义方法,方法是带有接收者的函数。接收者可以是值接收者或指针接收者。

这些是Go语言中 struct 的一些基本概念和用法。希望这些信息对你有所帮助!如果有更具体的问题或需要进一步的解释,请随时提问。

回到顶部