type Instrument struct {
Symbol string `json:"symbol"`
MarkPrice float64 `json:"mark_price"`
IndexPrice float64 `json:"index_price"`
}
func handleInstrument(symbol string, data []*ws.Instrument) {
log.Printf("handleInstrument %v / %+v", symbol, data)
}
打印出来是:2019/10/23 16:12:56 handleInstrument BTCUSD / [0xc0000fd3c0]
最后似乎是内存地址,而不是结构体的数据,我该怎么做?
1
ClericPy 2019-10-23 16:32:12 +08:00
struct 如果没记错默认是个引用的, 和 py 里的很多可变对象一样
https://stackoverflow.com/questions/24512112/how-to-print-struct-variables-in-console Google 搜的 Print struct golang %v 改成 %+v p = Project{...} fmt.Printf("%+v", p) fmt.Printf("%#v", p) //with type |
2
Hanggi 2019-10-23 16:32:43 +08:00
直接 log.Println 不就行了吗
|
3
zhs227 2019-10-23 16:36:05 +08:00
data 用*解引用试一试,*data)
|
6
momox OP @zhs227
改成 log.Printf("handleInstrument %v / %+v", symbol, *data) 报错 # command-line-arguments .\main.go:79:50: invalid indirect of data (type []*ws.Instrument) |
8
zhs227 2019-10-23 16:41:57 +08:00
o, 看错了,你这个是个切片,只能用循环一个一个处理了
|
10
TypeErrorNone 2019-10-23 16:43:52 +08:00
```
package main import ( "log" ) type user struct { Name string `json:"name"` } func main() { u := user{Name:"v2ex"} log.Printf("output %+v",u) } 2019/10/23 16:41:47 output {Name:v2ex} ``` |
11
xfriday 2019-10-23 16:48:48 +08:00 3
实现 Stringer 接口就行
|
12
baiyi 2019-10-23 16:50:09 +08:00
data 是 slice,如果对格式要求不高,%s 应该可以。格式要求高的话就转 json 或者循环打印了
|
13
ClericPy 2019-10-23 16:53:17 +08:00 1
@xfriday
@momox package main import ( "fmt" ) type Instrument struct { A string } func (inst *Instrument) String() string { return fmt.Sprintf("*Instrument{A:%s}", inst.A) } func handleInstrument(symbol string, data []*Instrument) { fmt.Printf("handleInstrument %v / %s", symbol, data) } // handleInstrument test / [*Instrument{A:a}] func main() { var ps []*Instrument ps = append(ps, &Instrument{A: "a"}) handleInstrument("test", ps) } 加接口好使... |
15
gamexg 2019-10-23 20:36:20 +08:00
%#v 可以直接打印结构信息
不过不看看结构化日志? zap、zerolog、logrus |
16
Pythondr 2019-10-23 21:19:28 +08:00
zap 可以
|
17
hawken 2019-10-23 21:41:34 +08:00 via Android
如果仅仅是调试的话,可以看看这个包 https://github.com/davecgh/go-spew
|
18
not4jerk 2019-10-24 10:09:34 +08:00
使用 logrus: logrus.WithField("obj",v).Info("my json struct")
|