如何在golang中解码查询参数

时间:2017-12-11 07:30:29

标签: go struct gorilla

我有参数

id_user
phone_number

我想解码到我的结构

type User struct{
     IDUser int `json:"id_user"`
     PhoneNumber string `json:"phone_number"`
}

是否可以解码为struct?我使用gorilla架构。我的代码:

func User(w http.ResponseWriter, r *http.Request){
  var decoder = schema.NewDecoder()
  var user User
  if err := r.ParseForm(); err != nil {
     fmt.Println(err)
  }

  err := decoder.Decode(&user, r.PostForm)
  if err != nil {
     fmt.Println(err)
  }
  respBody, err := json.Marshal(user)
  w.Header().Set("Content-Type", "application/json")
  w.WriteHeader(http.StatusOK)
  w.Write(respBody)
}

我输入id_user = 1和phone_number = qwerty。但结果是id_user = 0和phone_number =""。

3 个答案:

答案 0 :(得分:1)

我认为你应该修改你的标签:

type User struct{
    IDUser         int     `json:id_user`
    PhoneNumber    string  `json:phone_number`
}

到此:

type User struct{
    IDUser         int     `json:"id_user"`
    PhoneNumber    string  `json:"phone_number"`
}

因此,您应该在标记名称中使用引号。

答案 1 :(得分:1)

  

如果您提到的两个字段是查询参数,您可以像这样直接读取它:

<?php

$holiday = array(
        '2017-12-16' => 'Victory Day of Bangladesh',
        '2017-12-25' => 'Christmas'
    );


$i = 0;
$work_day = '2017-12-26';
while($i != 7)
{
    $work_day = date('Y-m-d', strtotime('-1 day', strtotime($work_day)));
    $day_name = date('l', strtotime($work_day));

    if($day_name != 'Saturday' && $day_name != 'Sunday' && !isset($holiday[$work_day]))
    {
        echo $work_day."\n";
        $i++;
    }
}

?>
  1. 否则您可以直接在api有效负载中传递User结构并直接执行payLoad解码,如下所示

    COV.reset_index().rename(columns = dict(level_0 = "index", level_1 = "variable"), inplace = True)
    DF2m = pd.melt(DF2.reset_index(), id_vars = "index").sort_values("index")
    MDF = pd.merge(COV, DF2m, on=["index", "variable"])
    VAR = MDF.groupby("index").apply(lambda x: np.dot(np.dot(x["value"], np.matrix([x["X"], x["Y"]])), x["value"])[0,0])
    

答案 2 :(得分:0)

如果你想直接将它们解码成一个结构而不需要一个一个地获取字段的值,那么你可以使用github.com/gorilla/schema。请参阅this question