go doudou开发单体RESTful服务快速上手教程

Go doudou开发单体RESTful服务快速上手教程

什么是Go doudou

Go doudou是一个基于Go语言的Web框架,它依赖于Swagger和Gin,可以快速开发RESTful API。

安装Go doudou

首先需要在本地安装Go语言环境,并将GOPATH配置正确。然后,可以通过以下命令安装Go doudou:

go get github.com/unionj-cloud/go-doudou

创建一个单体RESTful服务

  1. 创建一个空的Go模块项目:
mkdir go-doudou-demo
go mod init go-doudou-demo
  1. 安装依赖:
go get github.com/gin-gonic/gin
go get github.com/swaggo/files
go get github.com/swaggo/gin-swagger
  1. 创建main.go文件并编写代码:
package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    _ "github.com/swaggo/files"
    _ "github.com/swaggo/gin-swagger"
    "github.com/unionj-cloud/go-doudou/svc"
    "go-doudou-demo/controller"
)

func main() {
    svc.Run(controller.NewUserController(), func(r *gin.Engine) {
        fmt.Println("Welcome to My User API Engine")
    })
}

上述代码中,我们导入了Gin和Swagger的依赖,同时导入了go-doudou的svc和我们自己的controller模块。在main函数中,我们创建了一个新的UserController实例,并使用svc.Run()函数将路由和中间件打包到Gin引擎中运行。

  1. 创建controller文件并编写代码:
package controller

import (
    "github.com/gin-gonic/gin"
    "github.com/swaggo/gin-swagger"
    "github.com/swaggo/gin-swagger/swaggerFiles"
    "github.com/unionj-cloud/go-doudou/ddl"
    "github.com/unionj-cloud/go-doudou/pathutils"
    "go-doudou-demo/model"
)

type userControllerImpl struct {
    ddl.BaseController
}

func NewUserController() *userControllerImpl {
    return &userControllerImpl{}
}

func (u *userControllerImpl) Query(params *model.UserModel) (ret []model.UserModel, msg string, code int) {
    // 查询用户
}

func (u *userControllerImpl) Detail(id int) (ret model.UserModel, msg string, code int) {
    // 查询id指定的用户
}

func (u *userControllerImpl) Save(params *model.UserModel) (ret model.UserModel, msg string, code int) {
    // 新增或修改用户
}

func (u *userControllerImpl) Delete(id int) (msg string, code int) {
    // 删除用户
}

func (u *userControllerImpl) Swagger(c *gin.Context) {
    // 集成Swagger API文档
    dir, _ := pathutils.Abs("./")
    url := ginSwagger.URL(fmt.Sprintf("http://localhost:%d/swagger/doc.json", 8080))
    c.Redirect(302, url+"?url="+dir+"/swagger/doc.json")
}

// 自动生成Swagger并渲染到HTML文件,使用前先安装swag工具
// `go get -u github.com/swaggo/swag/cmd/swag`
// 然后进入controller目录执行命令:swag init
// 就会在controller目录生成docs子目录,里面存放着Swagger API文档相关的文件
// docs目录会被纳入到gitignore,不会污染代码版本库
//
// 访问http://localhost:8080/swagger/index.html看到自动生成的Swagger API文档
// 注意:需要先执行本示例,让RESTful API服务启动,才能访问Swagger API文档 
// 
// @title go-doudou User API
// @version v1
// @description This is an API server powering go-doudou User API
// @host localhost:8080
// @BasePath /api/v1
func (u *userControllerImpl) Docs() gin.HandlerFunc {
    return swaggerFiles.Handler
}

上述代码中,我们定义了一个userControllerImpl结构体,它继承了go-doudou的ddl.BaseController结构体,从而获得了一些基础的RESTful API方法。在NewUserController()函数中,我们实例化了一个userControllerImpl对象并返回。我们还分别实现了Query()、Detail()、Save()、Delete()和Swagger()方法,它们分别对应查询用户、查询id指定的用户、新增或修改用户、删除用户、和Swagger API文档。

  1. 创建model文件并编写代码:
package model

type UserModel struct {
    ID       int    `json:"id,string,omitempty"`
    Username string `json:"username,omitempty"`
}

上述代码中,我们定义了一个UserModel结构体,它包含了用户ID和用户名两个字段。

  1. 启动服务:
go run main.go

至此,一个简单的单体RESTful服务就完成了。我们可以在本地运行该服务,使用Postman等RESTful客户端工具访问http://localhost:8080/api/v1/users等API接口。

示例说明

示例1:查询用户

func main() {
    //...
    router.GET("/api/v1/users", func(c *gin.Context) {
        username := c.Query("username")
        params := &model.UserModel{Username: username}
        ret, msg, code := controller.User().Query(params)
        c.JSON(http.StatusOK, gin.H{
            "data": ret,
            "msg":  msg,
            "code": code,
        })
    })
    //...
}

上述代码中,我们在main函数中定义了一个HTTP GET方法,用于查询用户信息。该方法接受username作为请求参数,然后根据参数构造UserModel对象并调用controller.User().Query()方法进行查询。最后返回查询结果。

示例2:自动生成Swagger文档

// 自动生成Swagger并渲染到HTML文件
router.GET("/", controller.User().Docs())

上述代码中,我们在路由中添加了一个GET方法,用于生成Swagger API文档。该方法调用了userControllerImpl结构体中的Docs()方法,并返回了Swagger API文档的HTML文件。我们只需访问http://localhost:8080/就能看到自动生成的Swagger API文档。需要注意的是,要先启动RESTful服务才能访问Swagger API文档。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:go doudou开发单体RESTful服务快速上手教程 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • VScode中集成Git命令详解

    VScode中集成Git命令详解 为什么要集成Git命令? Git是开源代码管理工具,为开发者提供了强大的版本控制工具,可以在多人协作开发、开发过程中做出版本回退、分支切换等操作,是现代软件开发不可或缺的工具。而VScode是多人开发中最常用的代码编辑器,在VScode中集成Git命令,可以方便的进行版本管理,达到高效开发工作的目的。 如何集成Git命令? …

    GitHub 2023年5月16日
    00
  • Android判断App前台运行还是后台运行(运行状态)

    下面是详细讲解“Android判断App前台运行还是后台运行(运行状态)”的完整攻略。 问题描述 在Android开发中,有时需要判断App当前是前台运行还是后台运行,这个可以通过不同的逻辑实现。本文将给出两种常用的方法,并且结合示例说明。 方法一:使用ActivityLifecycleCallbacks ActivityLifecycleCallbacks…

    GitHub 2023年5月16日
    00
  • Golang中基础的命令行模块urfave/cli的用法说明

    Golang是一种开发高效、安全和可维护软件应用程序的编程语言,广泛应用于网络编程和系统编程中。Golang中基础的命令行模块 urfave/cli 提供了一种简单的方法来处理命令行参数和选项,它的主要功能包括处理命令行选项、参数、帮助信息、全局选项等功能。下面将详细讲解 urfave/cli 的用法。 安装 urfave/cli 可以使用 go get 命…

    GitHub 2023年5月16日
    00
  • 程序员的七夕用30行代码让Python化身表白神器

    程序员的七夕用30行代码让Python化身表白神器的攻略分为以下几个步骤: 导入必要的库 为了完成这个项目,需要导入Python的time和turtle模块。可以使用如下代码导入: import time import turtle 定义函数 我们需要定义两个函数:一个是用来绘制心形图案的函数,另一个是用来显示表白信息的函数。绘制心形图案的函数可以使用tur…

    GitHub 2023年5月16日
    00
  • 教你3分钟利用原生js实现有进度监听的文件上传预览组件

    下面我将详细讲解如何使用原生JS实现有进度监听的文件上传预览组件。 什么是文件上传预览组件? 文件上传预览组件是一种可以帮助用户在上传文件前预览文件,并能够实时监听上传进度的组件。在实现该组件时,我们需要用到HTML5的新特性——File API。File API提供了一组API来操作文件,包括读取上传的文件,预览文件,监听文件上传进度等功能。 如何使用原生…

    GitHub 2023年5月16日
    00
  • 如何在 ubuntu linux 上配置 go 语言的 qt 开发环境

    下面是 “如何在 Ubuntu Linux 上配置 Go 语言 Qt 开发环境” 的完整攻略,包含两个示例说明。 1. 安装 Qt 通过以下命令安装 Qt: sudo apt-get update sudo apt-get install qt5-default qttools5-dev-tools qtcreator 2. 下载并安装 Go 在 Ubunt…

    GitHub 2023年5月16日
    00
  • 解决R语言中install_github中无法安装遇到的问题

    解决R语言中install_github中无法安装遇到的问题需要注意以下几个方面: 确认安装了devtools包 检查输入的GitHub用户名和库名是否正确 确认是否已经配置了GITHUB_PAT 下面将针对以上三个方面提供详细的解决方法和示例说明。 确认安装了devtools包 devtools包是一个主要用于开发R包的工具包,可以通过下面的代码块在R中安…

    GitHub 2023年5月16日
    00
  • 在GitHub Pages上使用Pelican搭建博客的教程

    下面是“在GitHub Pages上使用Pelican搭建博客的教程”的完整攻略。 1. 准备工作 首先你需要在GitHub上面注册账号,并开通Pages服务。然后你需要安装Python和pip包管理工具,以及Pelican静态网站生成器。 安装Pelican可以使用pip来完成,命令如下: pip install pelican markdown 2. 创…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部