代码如下:
node, _ := html.Parse(response.Body)
nodeString,err := json.Marshal(node)
fmt.Println(err)
报异常如下:
json: unsupported value: encountered a cycle via *html.Node
是因为 Node 包含了*Node 类型的字段?对于这种循环嵌套的对象有办法做到序列化吗?
附 Node 的代码
type Node struct {
Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node
Type NodeType
DataAtom atom.Atom
Data string
Namespace string
Attr []Attribute
}
1
boboliu 2020-06-07 23:07:14 +08:00
一般来讲,受限于 go 的强权限控制和弱鸡反射,正常的 go 用户不会选择直接序列化一个内部使用的结构体,你可以选择定义一个用于数据交换的结构体进行序列化和反序列化
|
2
noobCoderZzz OP @boboliu 我主要是想打印出来看看这个实体的结构和内容 goland debug 下显示的结构看的我很难受。。。 另外问一下 goland 的调试是不可逆的吗?别的语言都支持拖拽调试的游标,goland 怎么才能回到前几步?
|
3
reus 2020-06-08 00:19:08 +08:00
@boboliu https://pkg.go.dev/golang.org/x/net/html?tab=doc#Node 看定义,字段全都是公有的,何来“内部使用的结构体”?
报错都告诉你原因了,有环,也就是有 *html.Node 类型的成员指向了自身。这种带环的结构,换成任何语言,都很难序列化。 |
4
joesonw 2020-06-08 09:56:12 +08:00 1
试试 litter
|
5
neoblackcap 2020-06-08 10:58:15 +08:00
@noobCoderZzz 退回前几步?应该都是可以的,不就是倒回去之前几个栈嘛,如果你觉得还不够,要不上 mozilla 的 rr debugger
|
8
noobCoderZzz OP @neoblackcap 没找到。。 比如 idea 和 rider,debug 的时候游标是可以随便拖的,goland 根本不能拖
|
9
noobCoderZzz OP @joesonw 感谢 非常有用 就是我想找到功能!
|