无法从地图到结构正确地在golang中解组数据

I am currently unable to unmarshall the data correctly from a map into a structure. Following is a code snippet (Brief Code at playground):

Request you to kindly provide the reason of getting default values on unmarshlling back the data.

package main

import (
    "fmt"
    "encoding/json"
    "os"
    )

func main() {
    fmt.Println("Hello, playground")
    type PDPOffer struct {
        cart_value            int    `json:"cart_value"`
        discount_amount_default int    `json:"discount_amount_default"`
        max_discount           string `json:"max_discount"`
        }

        a:= map[string]interface{} {
        "cart_value"              : 1,
        "max_discount"            : 2,
        }
        var pdf PDPOffer
        b, err := json.Marshal(a)
        if err != nil {
            fmt.Println("error:", err)
        }
        os.Stdout.Write(b)//working
        err1 := json.Unmarshal(b, &pdf)
        if err1 != nil {
            fmt.Println("error:", err)
        }
        fmt.Printf("%+v", pdf)//displaying just the defualt values????????
}

json.Marshal and json.Unmarshal can only work on exported struct fields. Your fields aren't exported and aren't visible to the json code.

The reason for your unmarshal not working is that you need to expose fields of the struct and for doing that you need to start field name with Capital letters. Something has below:

type PDPOffer struct {
        Cart_value            int    `json:"cart_value"`
        Discount_amount_default int    `json:"discount_amount_default"`
        Max_discount           string `json:"max_discount"`
        }

Also, you were trying to marshal an int value into a string for "max_discount", you need to store it as a string in your map that you're marshaling:

a := map[string]interface{}{
    "cart_value":   1,
    "max_discount": "2",
}

The error handling had a bug checking for err1 != nil then printing err which was hiding the message error: json: cannot unmarshal number into Go value of type string

Working example with all the fixes: http://play.golang.org/p/L8VC-531nS