当前位置: 首页 > article >正文

基于gin一个还算比较优雅的controller实现

看了两天时间的go,对于go的编码风格还不是很了解,但是了解到go并未有Java那样成体系的编码风格规范,所以自己浅尝试了一下,风格无对错,欢迎交流讨论~                

controller层: 

package api

import (
	"errors"
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)
import "awesomeProject/src/server"

type pathAndHandler struct {
	path       string
	handler    gin.HandlerFunc
	httpMethod string
}

func getApis() []pathAndHandler {
	return []pathAndHandler{
		{"/", sayHello, http.MethodGet},
		{"/label/v1", sentenceToWord, http.MethodPost},
		{"/label/v2", textToSentence, http.MethodPost},
	}
}
func instances() *gin.Engine {
	return server.Init()
}

func Register() (server.Server, error) {
	server := instances()
	for _, api := range getApis() {
		switch api.httpMethod {
		case http.MethodGet:
			server.GET(api.path, api.handler)
		case http.MethodPost:
			server.POST(api.path, api.handler)
		case http.MethodDelete:
			server.DELETE(api.path, api.handler)
		case http.MethodHead:
			server.HEAD(api.path, api.handler)
		case http.MethodPut:
			server.PUT(api.path, api.handler)
		case http.MethodOptions:
			server.OPTIONS(api.path, api.handler)
		case http.MethodPatch:
			server.PATCH(api.path, api.handler)
		default:
			fmt.Println("请求方法不支持")
			return nil, errors.New("unsupported method")
		}
	}
	return server, nil
}

func sentenceToWord(context *gin.Context) {
	//todo 业务逻辑
}
func textToSentence(context *gin.Context) {

}
func sayHello(ctx *gin.Context) {
	ctx.String(http.StatusOK, "hello world")
}

main:

func main() {
	server, err := api.Register()
	if server != nil {
		server.Run(":8081")
	} else {
		fmt.Println("fail to start server, for reason:/n" + err.Error())
	}
}

 


http://www.kler.cn/a/467175.html

相关文章:

  • 测试用例颗粒度说明
  • Redis - 5 ( 18000 字 Redis 入门级教程 )
  • 数据分析思维(七):分析方法——群组分析方法
  • Java 关键字【synchronized】
  • ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)
  • 4.1.2 栈和队列(一)
  • 深度学习-80-大语言模型LLM之基于streamlit与ollama的API开发本地聊天工具
  • 使用MySQL SLES存储库安装MYSQL
  • 计算机网络:网络层知识点及习题(二)
  • 10.装饰器
  • 大模型的prompt的应用二
  • 数字能力对制造企业可持续发展绩效的作用机制研究
  • spring mvc源码学习笔记之四
  • 特殊车辆检测数据集VOC+YOLO格式2730张3类别
  • C++小碗菜之七:类型转换
  • 适配器模式详解
  • ABAP 两个内表不同名称字段赋值的方法
  • Day30:break语句
  • 《Vue3实战教程》42:Vue3TypeScript 与组合式 API
  • Python爬虫 - 豆瓣图书数据爬取、处理与存储
  • creating-custom-commands-in-flask
  • ubuntu 使用s3fs配置自动挂载对象存储
  • 谷歌2025年AI战略与产品线布局
  • openwrt host方式编译ffmpeg尝试及问题分析
  • 青少年编程与数学 02-006 前端开发框架VUE 02课题、创建工程
  • LeetCode -Hot100 - 53. 最大子数组和