通过google place API添加地点时,请继续获得空响应

时间:2017-11-20 15:38:55

标签: post go google-places-api

我正在尝试通过Google地方API在应用范围内添加地点。为此,我正在使用golang。但我一直没有得到结果,没有错误信息。

这是我的代码

```

type latlng struct {
   lat, lng float64
}
type newPlace struct {
   location     latlng
   accuracy     int
   name         string
   phone_number string
   address      string
   types        string
}

func main() {
   requestUrl := "https://maps.googleapis.com/maps/api/place/add/json?key=<MYAPIKEY>"

   obj := newPlace{
      location: latlng{
        lat: 52.1502824,
        lng: 38.2643063,
     },
      name:  "some field",
      types: "storage",
   }

   bodyBytes, err := json.Marshal(&obj)
   if err != nil {
      panic(err)
   }
   body := bytes.NewReader(bodyBytes)
   rsp, err := http.NewRequest("POST", requestUrl, body)
   if err != nil {
       log.Fatal(err)
   }
   defer rsp.Body.Close()

   body_byte, err := ioutil.ReadAll(rsp.Body)
   if err != nil {
       panic(err)
   }
   fmt.Println(string(body_byte))
}

```

以下是我遵循的文档。 https://developers.google.com/places/web-service/add-place

我对golang有点新意,任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

仅供参考我在这个敏感话题上写了this article(JSON数据编码到Go中的POST正文请求中)。

你在这里遗漏了4件事:

  • http.Client创作。然后,您需要使用http.NewRequest
  • 执行您使用client.Do准备的请求
  • json字段添加到结构中,并通过大写变量的首字母来导出struct中包含的变量
  • Content-Type设为application/json
  • Google期待types中的数组而不是字符串,所以我替换为包含1个字符串的数组(但您应根据要传递给Google的类型进行调整)

这是一个工作脚本:

type latlng struct {
    Lat float64 `json:"lat"`
    Lng float64 `json:"lng"`
}

type newPlace struct {
    Location    latlng    `json:"location"`
    Accuracy    int       `json:"accuracy"`
    Name        string    `json:"name"`
    PhoneNumber string    `json:"phone_number"`
    Address     string    `json:"address"`
    Types       [1]string `json:"types"`
}

func main() {
    requestUrl := "https://maps.googleapis.com/maps/api/place/add/json?key=<your key>"

    types := [1]string{"storage"}
    obj := newPlace{
        Location: latlng{
            Lat: 52.1502824,
            Lng: 38.2643063,
        },
        Name:  "some field",
        Types: types,
    }

    bodyBytes, err := json.Marshal(&obj)
    if err != nil {
        fmt.Println(err)
    }
    body := bytes.NewReader(bodyBytes)
    client := &http.Client{}
    req, err := http.NewRequest("POST", requestUrl, body)
    req.Header.Add("Content-Type", "application/json")
    if err != nil {
        fmt.Println(err)
    }
    rsp, err := client.Do(req)
    defer rsp.Body.Close()

    body_byte, err := ioutil.ReadAll(rsp.Body)
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(body_byte))
}

希望它现在正在运作!

答案 1 :(得分:0)

您正在尝试将对象编组为没有导出字段的JSON,因此生成的JSON文档为空。 Per the JSON documentation,它只会编组导出的字段(名称以大写字母开头的字段)。尝试:

type latlng struct {
   Lat float64 `json:"lat"`
   Lng float64 `json:"lng"`
}

type newPlace struct {
   Location     latlng `json:"location"`
   Accuracy     int `json:"accuracy"`
   Name         string `json:"name"`
   PhoneNumber string `json:"phone_number"`
   Address      string `json:"address"`
   Types        string `json:"types"`
}