Golang cannot take the address of

前端之家收集整理的这篇文章主要介绍了Golang cannot take the address of前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

今天在使用kubernetes/apimachinery下/pkg/api/resource中的Quantity接收k8s资源信息的时候,报出如下错误

..\server\handlers\adapter.go:70: 
cannot call pointer method on clusterQuota.Hard[admin.ResourceRequestscpu] ..\server\handlers\adapter.go:70: 
cannot take the address of clusterQuota.Hard[admin.ResourceRequestscpu]

具体出错代码如下:

test:= clusterQuota.Hard[admin.ResourceRequestscpu].Value()
fmt.Println(test)

Quantity结构及Value()方法如下:

type Quantity struct {
    // i is the quantity in int64 scaled form,if d.Dec == nil
    i int64Amount
    // d is the quantity in inf.Dec form if d.Dec != nil
    d infDecAmount
    // s is the generated value of this quantity to avoid recalculation
    s string

    // Change Format at will. See the comment for Canonicalize for
    // more details.
    Format
}
// Value returns the value of q; any fractional part will be lost.
func (q *Quantity) Value() int64 {
    return q.ScaledValue(0)
}

既然调用方法指定的是指针,那么这么调用是否可以?

ii := (&clusterQuota.Hard[tenant_admin.ResourceRequestscpu]).Value()
fmt.Println(ii)

编译发现还是不行,那应该怎么处理呢?
其实会发现,取出变量的地址,需要两步:

hardRequestcpu := clusterQuota.Hard[tenant_admin.ResourceRequestscpu]
fmt.Println((&hardRequestcpu).Value())

本文参考:
https://stackoverflow.com/questions/10535743/address-of-a-temporary-in-go

个人微信公众号:

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

原文链接:https://www.f2er.com/go/187408.html

猜你在找的Go相关文章