如何访问指向Struct的指针的值?

时间:2017-08-24 20:44:08

标签: pointers go

我有一个变量,它等于以下结构的指针:

type Conn struct {
  rwc io.ReadWriteCloser
  l   sync.Mutex
  buf *bytes.Buffer
}

因此

fmt.Printf("---*cn: %+v\n", *cn)

返回

{rwc:0xc42000e080 l:{state:0 sema:0} buf:0xc42005db20}

如何查看地址0xc42000e080和0xc42005db20的值?

我的最终目标是检查这个,因为它在连接到memcache时被使用,并且在memcache中断的时候我正在尝试重新建立连接,并且需要检查它以解决它。

3 个答案:

答案 0 :(得分:0)

我不确定为什么你需要一个单独的库。直截了当的答案是你可以在结构中直接取消引用rwc

所以,你会做类似

的事情
fmt.Printf("---*cn: %+v\n", *(cn.rwc))

答案 1 :(得分:0)

假设导入Conn并且您无法使用标准selector expression访问未导出的字段,则可以使用reflect包来绕过该限制。

rv := reflect.ValueOf(cn)
fmt.Println(rv.FieldByName("buf").Elem())

https://play.golang.org/p/-6lWi1vYod

答案 2 :(得分:0)

您可以在https://github.com/luci/go-render包中使用{% macro render_field_oneline(field) %} <td>{{ field.label }}</td> <td>{{ field(**kwargs)|safe }} {% if field.errors %} <ul class=errors> {% for error in field.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} </td> {% endmacro %} {% macro render_field(field) %} <tr> {{ render_field_oneline(field) }} </tr> {% endmacro %} <style> { background-color: #A9A9A9; } table, tr, th, td { border: 1px solid #A9A9A9; } </style> 函数,而不是使用*来获取指针的值,如果指针为零,则会崩溃。

然后导入库:

Render