您的ParseResponse函数存在问题,您正在调用json.Unmarshal作为第一个参数传递json,这是一个包名称:这是模棱两可的。


如您所见,您的代码在更改ParseResponse函数时运行良好。


package main


import (

    "encoding/json"

    "fmt"

)


type gateway struct {

    Characteristics       []string      `json:"characteristics"`

    CreatedAt             string        `json:"created_at"`

    Credentials           []interface{} `json:"credentials"`

    Description           interface{}   `json:"description"`

    GatewaySpecificFields []interface{} `json:"gateway_specific_fields"`

    GatewayType           string        `json:"gateway_type"`

    Name                  string        `json:"name"`

    PaymentMethods        []string      `json:"payment_methods"`

    Redacted              bool          `json:"redacted"`

    State                 string        `json:"state"`

    Token                 string        `json:"token"`

    UpdatedAt             string        `json:"updated_at"`

}


type gateways struct {

    Gateways []gateway `json:"gateways"`

}


func ParseResponse(js []byte) {

    var parsed gateways

    json.Unmarshal(js, &parsed)

    fmt.Println(parsed)

}


func main() {

    var js []byte = []byte(`{

"gateways": [

    {

        "token": "my_token_here",

        "gateway_type": "test",

        "description": null,

        "payment_methods": [

            "credit_card",

            "sprel",

            "third_party_token",

            "bank_account",

            "apple_pay"

        ],

        "state": "retained",

        "created_at": "2016-03-12T18:52:37Z",

        "updated_at": "2016-03-12T18:52:37Z",

        "name": "Spreedly Test",

        "characteristics": [

            "purchase",

            "authorize",

            "capture",

            "credit",

            "general_credit",

            "void",

            "verify",

            "reference_purchase",

            "purchase_via_preauthorization",

            "offsite_purchase",

            "offsite_authorize",

            "3dsecure_purchase",

            "3dsecure_authorize",

            "store",

            "remove",

            "disburse",

            "reference_authorization"

        ],

        "credentials": [],

        "gateway_specific_fields": [],

        "redacted": false

    }

]

}`)

    /*

        var parsed gateways

        e := json.Unmarshal(js, &parsed)

        if e != nil {

            fmt.Println(e.Error())

        } else {

            fmt.Println(parsed)

        }

    */

    ParseResponse(js)

}

输出:


{[{[purchase authorize capture credit general_credit void verify reference_purchase purchase_via_preauthorization offsite_purchase offsite_authorize 3dsecure_purchase 3dsecure_authorize store remove disburse reference_authorization] 2016-03-12T18:52:37Z [] <nil> [] test Spreedly Test [credit_card sprel third_party_token bank_account apple_pay] false retained my_token_here 2016-03-12T18:52:37Z}]}