使用Go搭建web服务

        前几天心血来潮想要用Go来进行web服务的搭建,并把现有能够在Go上实现的功能搬到Go,进行了多次尝试,总算把Python中的部分功能在Go上能够跑通。简单介绍一下实现流程,以便不时之需。

下载并使用gin框架

        Go中web框架也有许多,这里我使用的是gin框架进行web项目的搭建。

$ go get -u github.com/gin-gonic/gin

         再在项目中进行import

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"goWebDemo/handler"
	"goWebDemo/routers"
)

        在main函数中进行gin类的初始化创建,并可以添加黑名单或者白名单路径。myHandler中是进行黑、白名单设置。r.Run可以进行端口的设置。

func myHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		if c.Request.URL.Path == "/" {
			fmt.Print("阻止")

			c.JSON(0, "fail")
			c.Abort()
			return
		}
		fmt.Println("放行")
		c.Next()
	}
}

func main() {
	r := gin.Default()
	r.Use(myHandler())
	err := r.Run(":9000")
	if err != nil {
		return
	}
}

路由分组

        新建一个类,group中写入路由组名称,在组内添加Post、Get等方法。现在的路径就变成了localhost:9000/chat/xxxx

func ChatRouterInit(engine *gin.Engine) {
	group := engine.Group("/chat")
	{
		group.POST("/create", createHandler)
		group.POST("/talk", talkHandler)
		group.GET("/conclude", concludeHandler)
	}

}

获取POST传来的json

        创建一个struct类来进行json数据的接收,json:后面就是参数名称,可在后面添加要求,比如必传可以用binding:"required",默认值用default:"xxxx" ,如下Gender 就是必传值,Kind_of有默认值xxx。

type Features struct {
	Gender     string `json:"gender" binding:"required"`
	Kind_of    string `json:"kind_of" default:"xxx"`
	Vaccinated string `json:"vaccinated"`
	Deworming  string `json:"deworming"`
}

        然后在方法中使用创建的struct类进行接收。这样post中的参数就能接收到了。

func createHandler(c *gin.Context) {
	//创建一个struct类
	var features Features
	//进行json数据的接收
	err := c.ShouldBindJSON(&features)
	if err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"code": http.StatusBadRequest, "data": "传入参数错误"})
		return
    fmt.Println(features)
	}

使用Go连接智谱AI进行回答

        由于智谱AI官网没有Go语言的连接Demo,所以查看python、java连接进行参考

func GetResponse(inputFeatures []map[string]string) string {
    //添加自定义的prompt
	var prompt map[string]interface{}
	prompt = make(map[string]interface{})
    //选择使用的大语言模型
	prompt["model"] = "glm-4"
    //添加参数
	prompt["messages"] = inputFeatures
	prompt["temperature"] = 0.7
	prompt["top_p"] = 0.8
	marshal, _ := json.Marshal(prompt)
	targetUrl := "https://open.bigmodel.cn/api/paas/v4/chat/completions"
	client := &http.Client{}
	req, _ := http.NewRequest("POST", targetUrl, bytes.NewReader(marshal))

	req.Header.Add("Authorization", "Bearer "+"自己的AccessToken")
	req.Header.Add("Content-Type", "application/json")

	resp, _ := client.Do(req)
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	var result map[string][]map[string]map[string]string
	result = make(map[string][]map[string]map[string]string)
	json.Unmarshal(body, &result)
	i := result["choices"][0]["message"]["content"]
	return i
	//result = string(body)
	//return string(body)

}

以上就是Go语言gin框架下web服务的搭建过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_50568029

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值