开发环境
- 操作系统:WINDOWS7
- 编辑器:VSCODE
- GO版本:go1.14.2
开发步骤
- 利用 go mod 创建项目
使用go mod 管理项目,可以更加灵活的在项目中管理对应的go包
- 新建项目gorestful,建立文件夹,路径 E:\1234\gorestful
- 进入目录 E:\1234\gorestful 里,新建入口文件: main.go
- 在 E:\1234\gorestful 里打开终端执行命令:go mod init gorestful . 初始化成功后会在当前目录下生成一个 go.mod 文件。
下面进入go包引用,和程序编码过程
- 利用 gin 创建 restful api
- 需求
接口1:get方法,访问一个路由,返回客户端IP
接口2:post方法,访问一个路由,传递一个json字符串,根据内容请求另一个API接口后返回值
- 编码
main.go 源码
package main
import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"encoding/json"
"github.com/gin-gonic/gin"
)
// 绑定为json
type Ques struct {
Question string `form:"question" json:"question" xml:"question" binding:"required"`
}
//gin使用 https://www.jianshu.com/p/98965b3ff638/
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
ipAddr := c.ClientIP()
fmt.Println(ipAddr)
c.JSON(200, gin.H{
"message": "pong",
})
})
r.POST("/postjson", func(c *gin.Context) {
var objjson Ques
if err := c.ShouldBindJSON(&objjson); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
//---调用远程 远端 API server 过程----------------------
//Go的json解析:Marshal与Unmarshal https://www.jianshu.com/p/3534532e06ed
quesjson, err := json.Marshal(objjson)
if err != nil {
fmt.Println("接收json字符串格式错误")
}
fmt.Println("json串:", string(quesjson))
//向python server 发送post json请求 返回json串
url := "http://192.168.300.163:8009/testpost"
fmt.Println("URL:>", url)
var jsonStr = []byte(string(quesjson))
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
//req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status)
fmt.Println("response Headers:", resp.Header)
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println("response Body:", string(body))
fmt.Println("post json:", objjson.Question)
//----远程调用结束--------------------------------------
//返回json结果
c.JSON(http.StatusOK, gin.H{"从客户端接收的值为:": objjson.Question})
})
r.Run() // 服务默认监听地址 0.0.0.0:8080
}
程序部署
将程序打包和部署到centos7
- 程序打包,项目文件夹下运行以下命令行语句
set GOOS=linux //设置目标操作系统
set GOARCH=amd64 //设置目标系统架构
go build -o "ginAPI" //生成打包后的文件
- Linux 服务器部署
将程序上传到Linux服务器指定的目录,执行下列命令
chmod 777 ginAPI //修改程序权限
nohup ./ginAPI >log.txt 2>&1 & //将程序放在后台运行,并输出日志到指定文件