go post请求,参数是raw json格式,response是固定结构。

在Go语言中,使用`net/http`包可以很方便地发送HTTP请求,包括POST请求。当需要发送raw JSON格式的参数时,通常会使用`encoding/json`包来将Go的结构体序列化为JSON字符串,然后使用`http.NewRequest`函数创建请求,并通过`http.Client`发送这个请求。

以下是一个使用Go语言发送POST请求,参数为raw JSON格式,并处理固定格式响应的示例。

首先,假设我们要发送的JSON数据如下(这里以一个简单的用户信息为例):

```json

{

"name": "John Doe",

"age": 30

}

```

对应的Go结构体可能是这样的:

```go

type User struct {

Name string `json:"name"`

Age int `json:"age"`

}

```

然后,我们假设服务器响应的固定格式如下(这里以简单的成功响应为例):

```json

{

"status": "success",

"message": "User created successfully"

}

```

对应的Go结构体可能是这样的:

```go

type Response struct {

Status string `json:"status"`

Message string `json:"message"`

}

```

现在,我们编写发送POST请求并处理响应的代码:

```go

package main

import (

"bytes"

"encoding/json"

"fmt"

"io/ioutil"

"log"

"net/http"

)

func main() {

// 创建一个User实例

user := User{

Name: "John Doe",

Age: 30,

}

// 将User实例序列化为JSON

userJSON, err := json.Marshal(user)

if err != nil {

log.Fatalf("JSON marshaling failed: %s", err)

}

// 创建POST请求

resp, err := http.Post("http://example.com/api/users", "application/json", bytes.NewBuffer(userJSON))

if err != nil {

log.Fatalf("POST request failed: %s", err)

}

defer resp.Body.Close()

// 读取响应体

body, err := ioutil.ReadAll(resp.Body)

if err != nil {

log.Fatalf("Reading response body failed: %s", err)

}

// 将响应体反序列化为Response结构体

var response Response

err = json.Unmarshal(body, &response)

if err != nil {

log.Fatalf("JSON unmarshaling failed: %s", err)

}

// 打印响应

fmt.Printf("Status: %s, Message: %s\n", response.Status, response.Message)

}

```

在这个例子中,我们首先创建了一个`User`实例,并将其序列化为JSON字符串。然后,我们使用`http.Post`函数发送POST请求,其中请求体是我们刚刚序列化的JSON字符串。服务器响应后,我们读取响应体,并将其反序列化为`Response`结构体,最后打印出响应的状态和消息。

请注意,你需要将`"http://example.com/api/users"`替换为你实际要请求的URL。

相关推荐
疯狂的程需猿21 分钟前
一个百度、必应搜索引擎图片获取下载的工具包
golang·图搜索
明月看潮生2 小时前
青少年编程与数学 02-003 Go语言网络编程 09课题、Cookie
青少年编程·golang·网络编程·编程与数学
明月看潮生2 小时前
青少年编程与数学 02-003 Go语言网络编程 15课题、Go语言URL编程
开发语言·网络·青少年编程·golang·编程与数学
明月看潮生2 小时前
青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程
青少年编程·golang·网络编程·编程与数学
hlsd#4 小时前
go 集成go-redis 缓存操作
redis·缓存·golang
qq_1728055917 小时前
GIN 反向代理功能
后端·golang·go
__AtYou__18 小时前
Golang | Leetcode Golang题解之第535题TinyURL的加密与解密
leetcode·golang·题解
kevin_tech1 天前
Go API 多种响应的规范化处理和简化策略
开发语言·后端·golang·状态模式
幺零九零零1 天前
【Golang】sql.Null* 类型使用(处理空值和零值)
数据库·sql·golang
cookies_s_s1 天前
Golang--DOS命令、变量、基本数据类型、标识符
golang