Golang 创建第一个web项目(Gin + Gorm)

1. 写这篇博客的由来:

当你想使用最快的框架创建项目的时候是不是有点束手无策?

当你想配置数据库写 SQL 甚至不知道如何写,文件夹都不知道建在哪里?
在这里插入图片描述

😄因为Golang 目前并没有 JAVA 那种硬性规范,但是 没硬性规范≠没有规范

我们以 Gin (一个轻量的 WEB 框架,类似 SpringMVC)为切入点,来了解如何使用 Golang 快速创建一个规范的 web 项目,并且了解内部的一些简单的思维逻辑转换。

2. 创建合适的目录

首先我们要明白一个根本思路,Golang项目都是一小再小的项目,是为微服务服务的。

😄我们可以直接去掉一些没必要的抽象层,只保留最基本的逻辑层划分。

在这里插入图片描述
这些对应着 controller --> controllerservice --> logic, dao --> db.

当然,这些根据自己喜好就行,规范如 JAVA 都没有强制大家目录一致,更不用说灵活的 Golang 了。

3. 没有了application.yml 如何写数据库( DAO --> DB )

在这里插入图片描述
我这里分为两个文件,

  1. 一个文件为保存一些基本信息,初始化方法,连接池指针(db_config.go)在 Go 一般通过环境变量配置数据库信息,这里直接创建连接池。

由于 dao 和这个配置文件都在 db 包下,所以可以不直接暴露连接池指针。

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"os"
)

var db *gorm.DB

type DBConfig struct {
	DbUser     string
	DbPassword string
	DbName     string
	DbHost     string
	DbPort     string
}

func NewDBConfig() *DBConfig {
	return &DBConfig{
		DbUser:     os.Getenv("DB_USER"),
		DbPassword: os.Getenv("DB_PASSWORD"),
		DbName:     os.Getenv("DB_NAME"),
		DbHost:     os.Getenv("DB_HOST"),
		DbPort:     os.Getenv("DB_PORT"),
	}
}
func InitDB() {
	config := NewDBConfig()
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", config.DbUser, config.DbPassword, config.DbHost, config.DbPort, config.DbName)
	var err error
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic("failed to connect database")
	}
}


  1. 另一个文件是传统的 dao 层的内容,写一些读取数据的接口正常的dao

4. 写一个登录接口

我们就从 gin 的入口开始一直写到 db 层

  1. 在 main.go 中写 相关路由
func main() {
	//初始化连接池

	db.InitDB()
	// 创建路由

	r := gin.Default()

	r.POST("/register", func(c *gin.Context) {
		email := c.PostForm("email")
		username := c.PostForm("username")
		age, _ := strconv.Atoi(c.PostForm("age"))

		fmt.Println("email->"+email, "username->"+username+"age->", age)
		code, data := controller.RegisterUser(email, username, age)
		c.JSON(code, gin.H{"data": data})
	})

	// 运行服务器
	r.Run(":8080")
}

在这里插入图片描述
其实这里获取参数最好是放到controller里面,其实思路和 JAVA 一致,不过这里用的是方法而不是注解。

  1. 然后是controller
package logic

import "easylive-user/db"

func RegisterUser(email string, username string, age int) (int, interface{}) {
	return db.AddUser(email, username, age)
}


由于我在main.go 里已经处理过参数了,这里不需要怎么处理,这里如果想方便一点可以封装成结构体

  1. 然后是逻辑业务层 logic

注意到我们直接返回两个参数,一个状态码,一个返回数据,这里借助golang 可以返回多结果的特点,我们再次简化封装,不在使用 JAVA 的再封装一个回复体。

直接借助 Http 的自有code 码判断,Golang 的思路是灵活,我的思路就是精简精简再精简。
在这里插入图片描述

Golang 由于本身不适合巨大的单体项目,我们就反其道而行之,能精简就精简

package logic

import "easylive-user/db"

func RegisterUser(email string, username string, age int) (int, interface{}) {
	affected := db.AddUser(email, username, age)
	if affected >= 1 {
		return 200, nil
	} else {
		return 500, nil
	}
}

  1. 然后是 db/dao层,这里涉及数据库的调用处理,这里我使用的是 Gorm 框架,类似 JAVA 的 Mybatis Plus,
func AddUser(email string, username string, age int) int {
	result := db.Create(&User{Email: email, Name: username, Age: age})
	fmt.Println(result)
	return int(result.RowsAffected)

}

type User struct {
	id    int
	Name  string
	Email string
	Age   int
}

5. 结语

Golang 还是挺好用的,但是转语言处理转换语法之外,一些处理业务的语法思路也和原来不同,

不过有了原来的代码基础上手还是挺快的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/658065.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JCEF实现网页资源性能分析

文章目录 1、需求2、实现代码3、运行效果 1、需求 在使用chrome浏览器访问页面时,浏览器自带的开发者工具可以查看页面每个资源的资源大小和加载时间。 这个功能可以让我们直接知道接口或资源的耗时情况和大小情况,如果存在性能问题,可以进…

LES物流执行系统,在离散制造行业有那些作用和价值?

离散制造企业往往面临的是多品种、小批量的非标订单生产,传统推动式物流系统已经无法应对计划变化滞后,各车间、工序之间难以衔接等情况,特别是密集劳动力的电子行业,非标产品 SKU 种类繁多,物料配送复杂,对…

Chisel入门——在windows下vscode搭建|部署Scala2.13.3开发环境|用Chisel点亮FPGA小灯

文章目录 前言一、vscode搭建scala开发环境1.1 安装Scala官方插件1.2 创建hello_world.scala文件1.3 确认java的版本(博主使用的是1.8)1.4 下载Scala Windows版本的二进制文件1.5 配置环境变量1.6 交互模式测试一下1.7 vscode运行scala 二、windows安装sbt2.1 下载sbt2.2 设置环…

mac安装Redis

官网: https://redis.io中文网: Redis中文网 安装 brew install redis 查看版本 redis-server --version 开启关闭服务 方式一(不推荐) 这种方式不太建议,因为控制台不用输出相应的日志 开启服务 brew service…

Qt项目使用pato mqtt C

一,下载pato mqtt C 源码 git 地址:https://github.com/eclipse/paho.mqtt.c.git git 地址可能下载不下来,提供我的gitee地址 gitee地址:https://gitee.com/chaojidahuaidan2021/paho.mqtt.c.git 二,编译共享库 clone下来后,将项目导入到Qt工程中,此时这是一个cmke工程…

uniapp一些问题解决

1.按钮边框如何去除? 参考博主:微信小程序按钮去不掉边框_微信小程序button去掉边框-CSDN博客文章浏览阅读1k次。最近在学uni-app,顺便自己写个小程序。左上角放了个button,可边框怎么也去不掉…原来微信小程序的按钮要去掉边框要…

辅助科技照亮道路,携手共促盲文书写技能新飞跃

在这个科技日新月异的时代,创新的力量正以前所未有的方式融入我们的日常生活,特别是对于视觉障碍群体而言,技术的每一次进步都是通往更加独立生活的桥梁。今天,让我们聚焦于一款名为“蝙蝠避障”的辅助软件,它不仅为盲…

Python数据可视化(六)

实现事件处理效果 我们借助 matplotlib 可以实现事件处理效果,例如,单击关闭画布会出现画布被关闭的文本提 示,在画布上的图形界面任意位置单击可以获得放大后的此处图形界面等。下面,我们就挑选一些 典型的事件处理案例来讲解实现…

基于微信小程序实现的【二手物品交易平台】后端 JAVA Springboot (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的二手物品交易平台 项目技术栈 该项目采用了以下核心技术栈: 后端框架/库: Java, SSM框架数据库: MySQL前端技术: 微信小程序技术其他相关技术: HTML, MyEclipse开发…

C#--Mapster(高性能映射)用法

1.Nuget安装Mapster包引用 2.界面XAML部分 <Window x:Class"WpfApp35.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.m…

Ubuntu配置Git

安装git sudo apt install git 查看是否安装成功 git --version 配置git 用github上注册的用户名和邮箱地址&#xff0c;配置git git config --global user.name "username" git config --global user.email "usernameemail.com" 重启ubuntu查看…

Filebeat进阶指南:核心架构与功能组件的深度剖析

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是ELK 2、FileBeat在ELK中的角色 二、Fil…

【已解决】使用StringUtils.hasLength参数输入空格仍然添加成功定价为负数仍然添加成功

Bug情景 今天在做功能测试时&#xff0c;发现使用使用StringUtils.hasLength&#xff08;&#xff09;方法以及定价为负数时&#xff0c;添加图书仍然成功 思考过程 0.1 当时在做参数检验时用了spring提供的StringUtils工具包&#xff0c;百度/大数据模型说&#xff1a; 0.2…

Java 中BigDecimal传到前端后精度丢失问题

1.用postman访问接口&#xff0c;返回的小数点精度正常 2.返回到页面里的&#xff0c;小数点丢失 3.解决办法&#xff0c;在字段上加注解 JsonFormat(shape JsonFormat.Shape.STRING) 或者 JsonSerialize(using ToStringSerializer.class) import com.fasterxml.jackson.a…

Vim安装与配置教程(解决软件包Vim没有安装可候选)

一、Vim检测是否安装 1-输入vi查看是否安装&#xff1b; 2-按Tab键&#xff0c;显示以下字符为未安装&#xff1b; 3-显示以下字符为已安装&#xff08;可以看到有Vim&#xff09; 二、Vim安装过程 1. 打开终端&#xff0c;输入 sudo apt install vim; 2. 输入Y/y&#xff…

sysbench安装(在线离线)

简介 sysbench是一个多线程基准测试工具&#xff0c;它支持硬件&#xff08;CPU、内存、I/O&#xff09;、数据库基准压测等2种测试手段&#xff0c;用于评估系统的基本性能。本篇文章主要介绍sysbench在线和离线2种安装方法&#xff0c;并将离线编译时发生的异常记录到FAQ&…

idm软件是做什么的 IDM是啥软件 idm软件怎么下载 idm软件怎么下载

一、IDM是啥软件 IDM 是由美国 Tonec 公司开发的 Windows 软件&#xff0c;该软件最初于 2005 年发布。IDM全称Internet Download Manager&#xff0c;是一款Windows平台老牌而功能强大的下载加速器&#xff0c;专注于互联网数据下载。这款软件是一款不错的轻量级下载工具&…

【windows】Total Uninstall:一款功能强大的完全卸载软件

软件介绍 Total Uninstall是一款专业的软件卸载工具&#xff0c;旨在帮助用户彻底地清除计算机上的应用程序&#xff0c;包括与应用程序相关的所有文件和注册表项。以下是Total Uninstall的一些主要功能和特点&#xff1a; 完全卸载&#xff1a;软件可以监视应用程序的安装过程…

如何使用git上传linux下的项目!---附带每一步截图

在实际项目中&#xff0c;我们需要把自己的模块递给GitHub&#xff0c;需要别人的模块的时候拉下来&#xff0c;那么我们怎么把自己的项目递给GitHub呢&#xff1f;下面做一个总结&#xff1a; 登录GitHub 创建一个仓库 填写相关信息 项目名称是必填的&#xff0c;项目描述可以…

FPGA时钟:驱动数字逻辑的核心

一、引言 在FPGA&#xff08;现场可编程门阵列&#xff09;设计中&#xff0c;时钟信号是不可或缺的关键要素。时钟信号作为时序逻辑的心跳&#xff0c;推动着FPGA内部各个存储单元的数据流转。无论是实现复杂的逻辑运算还是处理高速数据流&#xff0c;都需要精确的时钟信号来保…