0
我从Hashicorp库API获取数据,并奋力操纵它,因为我有接口朦胧的认识还:(使用mapstructure
我正在从PKI后台一个TLS证书响应与接口数据处理。使用转到自卸车,它输出这样的:
(0xc4203880c0) &Secret {
RequestID: "271c63ef-d7b6-a084-18a0-966dd6989f03",
LeaseID: "",
LeaseDuration: 0 (int),
Renewable: false,
Data: map[string]interface {} {
"serial_number": interface() ,
"ca_chain": interface() ,
"certificate": interface() ,
"issuing_ca": interface() ,
"private_key": interface() ,
"private_key_type": interface()
},
Warnings: nil ([]string),
Auth: nil (*api.SecretAuth),
WrapInfo: nil (*api.SecretWrapInfo)
}
我希望做的是打印使用fmt
的“certficate”字段所以我这样做:
创建一个结构:
type TLSCredentialResp struct {
IssuingCA string `mapstructure:"issuing_ca"`
PrivateKey string `mapstructure:"private_key"`
CAChain string `mapstructure:"ca_chain"`
Cert string `mapstructure:"certificate"`
}
,然后用mapstructure解码到它:
var response TLSCredentialResp
if err := mapstructure.Decode(docker.Data, &response); err != nil {
log.Fatal("Error parsing vault's credential response: ", err)
}
fmt.Printf("Private Key: %s", response.PrivateKey)
然而,当我尝试,我得到如下:
Error parsing vault's credential response: 1 error(s) decoding:
* 'ca_chain' expected type 'string', got unconvertible type '[]interface {}'
exit status 1
现在是相当清楚,我,我已经得到这个错误,因为我试图将接口解码为字符串。什么是不明白的是我如何我处理interface()
作为一种类型?简而言之,我怎样才能获得纯文本证书的价值呢?
难道你惹去自卸车的输出?它将'interface()'显示为一个类型,但这不是件事。 'interface {}'是一种类型。此外,你的错误表明,ca链是一个'[]接口{}(一片空的接口)。首先要做的是找出底层类型是什么(['fmt.Printf(“%T”)'可以有所帮助](https://play.golang.org/p/Z3NNC0B0U0)),然后从那里。 – Adrian
不,从来没有见过它,但它绝对是'interface()' – jaxxstorm