使用地图结构处理界面数据

时间:2017-07-06 14:58:04

标签: go hashicorp-vault

我从Hashicorp Vault API获取数据,并努力操纵它,因为我对接口的模糊理解仍然存在:(

我从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()作为一种类型?简单地说,我怎样才能获得纯文本证书值?

1 个答案:

答案 0 :(得分:0)

所以我是个白痴,这比我想象的容易。

我似乎不需要使用地图结构,我可以这样做:

fmt.Printf("Private Key: %s", docker.Data["private_key"])
fmt.Printf("Cert: %s", docker.Data["certificate"])

虽然我不知道为什么......