GO项目基础实操总结

发布时间:2024年01月23日
前情:

上一篇讲了关于go基本的安装、环境搭建、项目搭建和运行,这一篇继续深入;
上一篇参考:使用 vsCode创建GO项目

本篇要点:

GO 连接数据库&CRUD
GO 测试方法开发
GO 中的各个组件和java中的各个组件对比(差异性和优缺点)
GO 一定要使用 proto buffer吗?
GO 系统权限控制
GO 服务网格

1.GO 连接数据库&CRUD

1.1 go 的传参方式
我们通常使用gin 框架绑定函数创建接口,接口的参数都封装在了gin.Context对象中,通常使用 header用于参数的传递:

const NAME string = "name"
const USER_ID string = "user_id"
func GetParam(c *gin.Context) {
	userId := c.GetHeader(USER_ID)
	fmt.Println(userId)
	name := c.GetHeader(NAME) 
	fmt.Println(name)
	name3, ok := c.GetPostFormArray(NAME)
	fmt.Println(name3)
	fmt.Println(ok)
}

在这里插入图片描述
GetPostFormArray 也可以接收
在这里插入图片描述

1.2 go 连接 mysql
连接首先需要配置application.yaml

# database config
database:
  driver: ${DATABASE_DRIVER:mysql} #mysql
  table-prefix: mydb
  mysql-dsn: ${DATABASE_USER:root}:${DATABASE_PASSWORD:password}@tcp(${DATABASE_HOST:localhost}:${DATABASE_PORT:3306})/${DATABASE_NAME:mydb}?charset=utf8mb4&parseTime=True&loc=Local
  max-idle-conns: ${DATABASE_MAX_IDLE_CONNS:10}
  max-open-conns: ${DATABASE_MAX_OPEN_CONNS:100}

driver/mysql-dsn 用于gorm创建数据库的连接,
gorm 是一个 Go 语言编写的 ORM(Object Relational Mapping,即对象关系映射)库,它使得在 Go 中操作数据库变得更加方便和高效。gorm 提供了简洁的 API 来进行数据库操作,包括创建表、插入数据、查询数据、更新数据和删除数据等。
连接代码如下:

import (
	"chapter-1/utils/config"
	"github.com/jinzhu/gorm"
)
var gdb *gorm.DB
func CreateDB() (*gorm.DB, error) {
	if gdb == nil {
		driver := config.GetString("database.driver")
		dsn := dsn = config.GetString("database.mysql-dsn")
		db, err := gorm.Open(driver, dsn)
		if err != nil {
			return nil, err
		}
		db.DB().SetMaxIdleConns(config.GetInt("database.max-idle-conns"))
		db.DB().SetMaxOpenConns(config.GetInt("database.max-open-conns"))
		db.LogMode(config.GetBool("application.debug"))
		gdb = db
	}
	return gdb, nil
}

1.3 gorm
通过gorm 连接到数据库之后,就可以使用gorm 提供的简洁的 API 来进行数据库操作,
实例service代码:

package service

import (
	"chapter-1/moddel"
	"chapter-1/utils/orm"
	"errors"
	"github.com/sirupsen/logrus"
)

func Add(userProject moddel.TestModel) error {
	db, err := orm.CreateDB()
	if err != nil {
		logrus.Errorf("projectList service, orm.CreateDB error on row 17 :%v\n", err.Error())
		return errors.New("数据库连接异常")
	}
	errrr := userProject.Add(db)
	return errrr
}
func Update(userProject moddel.TestModel) error {
	db, err := orm.CreateDB()
	if err != nil {
		logrus.Errorf("projectList service, orm.CreateDB error on row 17 :%v\n", err.Error())
		return errors.New("数据库连接异常")
	}

	errrr := userProject.Update(db)
	return errrr
}

func Detelete(userId string) error {
	db, err := orm.CreateDB()
	if err != nil {
		logrus.Errorf("projectList service, orm.CreateDB error on row 17 :%v\n", err.Error())
		return errors.New("数据库连接异常")
	}

	userProject := moddel.TestModel{ID: userId}
	errrr := userProject.Delete(db)
	return errrr
}
func GetById(userId string) ([]moddel.TestModel, error) {
	db, err := orm.CreateDB()
	if err != nil {
		logrus.Errorf("projectList service, orm.CreateDB error on row 17 :%v\n", err.Error())
		return nil, errors.New("数据库连接异常")
	}

	userProject := moddel.TestModel{ID: userId}
	ups, err := userProject.RawByUserId(db)
	if err != nil {
		logrus.Errorf("projectList service, userProject.FindByUserId error on row 24:%v\n", err.Error())
		return nil, errors.New("数据库查询异常")
	}
	if len(ups) == 0 {
		return nil, nil
	}
	return ups, err
}

实例 gorm 代码:

package moddel

import (
	"strings"
	"github.com/jinzhu/gorm"
)

type TestModel struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}
// 直接使用 gorm 的方法,默认使用gorm创建的表 mydb_test_models
func (this *TestModel) Add(db *gorm.DB) (err error) {
	return db.Create(this).Error
}
func (this *TestModel) Update(db *gorm.DB) (err error) {
	return db.Save(this).Error
}
func (this *TestModel) Delete(db *gorm.DB) (err error) {
	return db.Delete(this).Error
}
func (this *TestModel) FindByUserId(db *gorm.DB) (userProjects []TestModel, err error) {
	db = db.Find(&userProjects, "id = ?", this.ID)
	return userProjects, db.Error
}
// 这种使用方式,不会使用gorm 默认的表,这里使用 test_1
func (this *TestModel) RawByUserId(db *gorm.DB) (userProjects []TestModel, err error) {
	var sql = " select * from test_1 where id=${id} "
	sql = strings.Replace(sql, "${id}", this.ID, -1)
	db = db.Raw(sql)
	db = db.Scan(&userProjects)
	return userProjects, db.Error
}

参考:gorm官网连接

2.GO 测试方法开发

2.1 测试文件名称 _go.test 结尾
2.2 测试方法名称 Test 开始
2.3 测试方法参数 t *testing.T
在这里插入图片描述

3.GO 中的各个组件和java中的各个组件对比(差异性和优缺点)?

3.1 事务
3.2 切面
3.3 拦截器
3.4

4. GO 一定要使用 proto buffer吗?

文章来源:https://blog.csdn.net/leinminna/article/details/135763081
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。