Post 通过GooglePlaceAPI添加place时,继续获得空响应

Post 通过GooglePlaceAPI添加place时,继续获得空响应,post,go,google-places-api,Post,Go,Google Places Api,我正试图通过GooglePlaceAPI在应用程序范围内添加一个位置。为此,我使用了golang。但我一直没有得到结果,没有错误消息 这是我的密码 ``` 类型latlng结构{ 拉丁美洲,液化天然气浮标64 } 类型newPlace结构{ 定位板条 精度整数 名称字符串 电话号码串 地址字符串 类型字符串 } func main(){ 请求URL:=”https://maps.googleapis.com/maps/api/place/add/json?key=" obj:=newPlace{

我正试图通过GooglePlaceAPI在应用程序范围内添加一个位置。为此,我使用了golang。但我一直没有得到结果,没有错误消息

这是我的密码

```

类型latlng结构{
拉丁美洲,液化天然气浮标64
}
类型newPlace结构{
定位板条
精度整数
名称字符串
电话号码串
地址字符串
类型字符串
}
func main(){
请求URL:=”https://maps.googleapis.com/maps/api/place/add/json?key="
obj:=newPlace{
地点:拉丁美洲{
拉脱维亚:52.1502824,
液化天然气:38.2643063,
},
名称:“某个字段”,
类型:“存储”,
}
bodyBytes,err:=json.Marshal(&obj)
如果错误!=零{
恐慌(错误)
}
正文:=字节。新读取器(bodyBytes)
rsp,err:=http.NewRequest(“POST”,requestUrl,body)
如果错误!=零{
log.Fatal(错误)
}
延迟rsp.Body.Close()
body_字节,err:=ioutil.ReadAll(rsp.body)
如果错误!=零{
恐慌(错误)
}
fmt.Println(字符串(正文字节))
}
```

这是我遵循的文档

我对golang有点陌生,任何帮助都将不胜感激

FYI写了这个敏感的话题(在Go中,JSON数据被编码到POST-body请求中)

您在这里遗漏了4件事:

  • http.Client
    创建。然后,您需要使用
    client.Do
    执行您正准备使用
    http.NewRequest
    的请求
  • json
    字段添加到结构中,并通过大写变量的首字母导出结构中包含的变量
  • 内容类型设置为
    应用程序/json
  • Google希望在
    类型中使用数组而不是字符串,因此我将替换为包含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))
}
类型latlng结构{
Lat float64`json:“Lat”`
液化天然气浮标64`json:“液化天然气”`
}
类型newPlace结构{
Location latlng`json:“Location”`
精度int`json:“精度”`
名称字符串`json:“名称”`
PhoneNumber字符串`json:“电话号码”`
地址字符串`json:“地址”`
类型[1]字符串`json:“类型”`
}
func main(){
请求URL:=”https://maps.googleapis.com/maps/api/place/add/json?key="
类型:=[1]字符串{“存储”}
obj:=newPlace{
地点:拉丁美洲{
拉脱维亚:52.1502824,
液化天然气:38.2643063,
},
名称:“某个字段”,
类型:类型,,
}
bodyBytes,err:=json.Marshal(&obj)
如果错误!=零{
fmt.Println(错误)
}
正文:=字节。新读取器(bodyBytes)
客户端:=&http.client{}
req,err:=http.NewRequest(“POST”,requestUrl,body)
req.Header.Add(“内容类型”、“应用程序/json”)
如果错误!=零{
fmt.Println(错误)
}
rsp,err:=client.Do(请求)
延迟rsp.Body.Close()
body_字节,err:=ioutil.ReadAll(rsp.body)
如果错误!=零{
fmt.Println(错误)
}
fmt.Println(字符串(正文字节))
}

希望它现在起作用了

您试图将对象封送到没有导出字段的JSON,因此生成的JSON文档为空。,它将只对导出字段(名称以大写字母开头的字段)进行马歇尔处理。尝试:


谢谢,但是现在我得到一个无效的请求作为响应。你知道我为什么没有得到ok响应吗?{“status”:“INVALID_REQUEST”}这次我认为错误可能来自内容类型。您应该将其设置为json,而使用NewRequest(“POST”,…)默认情况下并非如此。让我检查一下,我试了两种方法,有内容类型和没有内容类型,但都没有用。我就是这样做的
req.Header.Set(“Content-Type”,“application/json”)
ok终于找到问题了!现在编辑我的答案:)(这是关于你的
类型的
应该是一个数组,而不是一个字符串)谢谢Adrian,但我仍然收到同样的错误
{“状态”:“无效的请求”}
。可能是因为我没有指定内容类型吗?我不知道,如果您指定它会发生什么?
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))
}
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"`
}