23.4.25 Go学习日记

1. Go的命名规范(生成自ChatGPT)

1.1 包名

        包名应该小写并尽可能用单个简短的词组,不要使用下划线或混合大小写

1.2 文件名

        Go 语言的文件名通常为小写字母,可以包含下划线 (_) 或点 (.),但不建议,并确保它们描述了文件的内容:

- 如果是单词,则最好不要使用下划线。
- 对于多单词的文件名,请使用下划线将它们连接起来。

1.3 变量名

        Go 中变量名的命名规范为驼峰式,即首个单词小写,其余单词首字母大写。变量名应该具备一定的描述性加以区分,尽量避免过于宽泛的命名方式。

1.4 常量名

        与变量命名规范相似,Go 常量采用大写字母,此外,在包级别定义的常量通常使用驼峰式

1.5 函数名、类型名和接口名

        函数名可以采用驼峰式也可以使用大写字母加下划线(参考常量命名规范)。Go 的类型命名同样遵循驼峰式,类型(类)名应当使用完整的英文单词,并具备描述性。在 Go 中,不以大写字母打头的名称是不能导出 (exported) 的,在其他包中不可见。

        接口名需要突显其行为特征,因此建议使用以 er 结尾的形式,例如:

type Reader interface {Read(p []byte) (n int, err error)
}

2. Gin框架

2.1 Gin框架的特点

        1.封装比较好,API友好,源码注释比较明确,具有快速灵活,容错方便等特点

        2.运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json

        3.模块比较少,可以自己由构建

        4.是一个MVC架构的框架,类比SpringMVC容易上手

        参考文章:(36条消息) Gin框架学习_gin.default()_凌木LSJ的博客-CSDN博客

2.2 数据访问层

        这一层主要包括了类型的定义(对象结构体)、获取类的相关方法,下面的例子主要返回了对象数组:

// Package models 数据访问层
package modelsimport ("Im/utils""gorm.io/gorm"
)type UserBasics struct {gorm.Modelname          stringpassword      stringphoneNum      stringemail         stringidentity      stringclientId      stringclientPort    stringdeviceInfo    stringloginTime     uint64heartbeatTime uint64logoutTime    uint64isLogout      boolisAdmin       bool
}type Product struct {// 用于数据库表的创建,方便模型定义// 包含了 ID, CreatedAt, UpdatedAt, DeletedAt四个属性gorm.ModelProCode  stringProName  stringProPrice uint
}// TableName 获取表UserBasics
func (table *UserBasics) TableName() string {return "user_basics"
}// GetUserList 获取UserList
func GetUserList() []*UserBasics {// 初始化了一个长度为10的slice(切片)对象,每一个元素的默认值为nil,因为切片中的用户对象都将作为指针存储。users := make([]*UserBasics, 10)utils.DB.Find(&users)//for _, user := range users {//	fmt.Println(user)//}return users
}func GetProductList() []*Product {products := make([]*Product, 10)utils.DB.Find(&products)//for _, product := range products {//	fmt.Println(product)//}return products
}

2.3 业务层

        这一层主要是调用数据访问层,然后返回JSON数据:

// Package service 业务层
package serviceimport ("Im/models""github.com/gin-gonic/gin""net/http"
)// GetUserList 使用gin.Context获取JSON数据
func GetUserList(c *gin.Context) {users := make([]*models.UserBasics, 10)users = models.GetUserList()c.JSON(http.StatusOK, gin.H{"message": users,})
}func GetProductList(c *gin.Context) {products := make([]*models.Product, 10)products = models.GetProductList()c.JSON(http.StatusOK, gin.H{"message": products,})
}

2.4 路由层

        这一层主要是将方法映射到相应的请求路径上,gin.Engine会自动渲染数据:

// Package router 路由层
package routerimport ("Im/service""github.com/gin-gonic/gin"
)func Router() *gin.Engine {// 创建默认的gin.Engine对象r := gin.Default()// 将相应方法映射到对应路径r.GET("/index", service.GetIndex)r.GET("/user/getUserList", service.GetUserList)r.GET("/product", service.GetProductList)return r
}

 2.5 配置

        考虑将数据库DSN等配置文件放入yml文件作为系统的配置文件:

app :"IM"
mysql :dsn : "root:111111@tcp(localhost:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local"

2.6 工具

        考虑将系统初始化放入工具包中,初始化包括Mysql在内的各项系统配置:

// Package utils 工具类
package utilsimport ("fmt""github.com/spf13/viper""gorm.io/driver/mysql""gorm.io/gorm"
)var (DB *gorm.DB
)// InitConfig 初始化应用程序的一些设置
func InitConfig() {// 设置设置名为"config"viper.SetConfigName("config")// 设置读取配置路径为"config"viper.AddConfigPath("config")// 读取配置文件"err := viper.ReadInConfig()if err != nil {panic(err)}fmt.Println("app init!")
}// InitMysql 从viper中获取mysql设置中的dsn即数据源url的值,特别注意这里要把DB传出去, 不然链接无效
func InitMysql() {DB, _ = gorm.Open(mysql.Open(viper.GetString("mysql.dsn")), &gorm.Config{})fmt.Println("Mysql init!")
}

        这里要十分注意:必须将GORM数据库连接变量设置为指针,以便直接修改其值,首字母大写使可见性为public,以便连接成功后可以在其他包中调用数据库连接。

2.8 main.go

        主程序要调用上述各个初始化,实现数据库连接以及其他功能的初始化,并且要调用路由层的Run方法,实现对对应的端口进行监听:

package mainimport ("Im/router""Im/utils"
)func main() {// 初始化设置utils.InitConfig()// 初始化Mysql设置utils.InitMysql()// 调用控制器r := router.Router()err := r.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080") 可以通过修改r.Run(":xxxx")修改端口号if err != nil {panic(err)}
}

3. 总结

        今天学习了Go的命名规范,以及使用Gin框架进行开发的基本流程,了解了一些常用的方法,类比SpringMVC框架就可快速理解Gin框架各个部分的含义,初步了解开发流程。

        项目结构:

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软亚研院:Language Is Not All You Need

源 | 量子位 还记得这张把谷歌AI搞得团团转的经典梗图吗? 现在,微软亚研院的新AI可算是把它研究明白了。 拿着这张图问它图里有啥,它会回答:我看着像鸭子。 但如果你试图跟它battle,它就会改口:看上去更像兔…

2023需要重点关注的四大AI方向

2023需要重点关注的四大AI方向 过去10年,人工智能从实验室走向各行各业,成为一种普遍技术应用于众多领域。根据IDC的数据,2022年全球AI市场规模达到4328亿美元,增长近20%。而Precedence Research预计,到2030年&#xf…

全球首个完全开源的指令跟随大模型;T5到GPT-4最全盘点

1. Dolly 2.0:世界上第一个完全开源的指令跟随LLM 两周前,Databricks发布了类ChatGPT的大型语言模型 (LLM)Dolly,其训练成本不到 30 美元。今天,他们发布了 Dolly 2.0,这是业内第一个开源的指令跟随LLM,并根…

chatgpt赋能python:Python怎么绕过登录爬取数据

Python怎么绕过登录爬取数据 在进行网站爬取时,经常会发现需要登录才能访问所需要的数据,这给我们的爬虫程序带来了一定的难度。本文就介绍一些Python绕过登录的方法,让你获取到所需的数据。 1. Session维持登录状态 当我们登录一个网站时…

怎么洗稿容易过稿-在线洗稿软件

自媒体洗稿软件 即使您是一位优秀的自媒体写作人员,也难免遇到让人头疼的撰写问题,例如无法处理大量原始文本、需要手动删除冗余信息、缺少时间针对每篇文章进行深入修改等问题。但是,现在有了我们的一款自媒体洗稿软件,您再也不需…

洗稿用什么软件-洗稿软件免费

洗稿文章的主要优势 洗稿文章的主要优势在于提高文章的质量和效率。以下是洗稿文章的几个主要优势: 优化结构和语言 洗稿可以删除冗余、无用和重复的内容,同时对文章的结构和语言进行优化,提高文章的可读性和吸引力。这可以使文章更加专业…

洗稿伪原创工具-洗稿生成器

chatgpt快速洗稿一篇文章 做自媒体创作的人都知道,文案创作是一件十分耗时间和精力的事情,而且要做好一篇文章,还需要考虑排版、语法和语气等问题。为了让自媒体写作更简单、更快速,我们推出了一款名为ChatGPT的快速洗稿软件&…

chatgpt赋能python:PythonReadline遍历:如何准确高效地读取大文件

Python Readline遍历: 如何准确高效地读取大文件 简介 在Python编程中,读取大型文本和数据文件是一项常见的任务。通常,Python在读取文件时,会一次性将整个文件读入内存中,这在读取小型文件时是非常有效的,但当文件较…

chatgpt赋能python:Python文件调用指南

Python文件调用指南 在Python编程中,经常需要使用文件进行数据读取和写入,所以掌握文件读写操作是非常重要的。本文将介绍如何在Python中调用文件,并给出一些使用技巧。 1. Python如何打开文件 可以使用Python内置的open()函数打开文件。o…

chatgpt赋能python:Python文件句柄全面解析

Python文件句柄全面解析 在 Python 中,文件被视为 I/O(输入/输出)操作的基础,文件句柄是与文件进行交互的重要方式之一。本文将从以下方面介绍和解析 Python 文件句柄: 什么是文件句柄?如何创建文件句柄&…

chatgpt赋能python:Python文件读取入门指南

Python文件读取入门指南 Python是一门强大的编程语言,能够处理各种各样的数据类型,其中文件也不例外。文件是计算机与外部世界进行信息交换的基础,使用Python读取和处理文件是我们在日常编程中必须掌握的技能。 在这篇文章中,我…

【Go】从文件读取json

在Go语言中,可以使用标准库中的 encoding/json 包来将 JSON 数据解析为 Go 中的结构体。 下面是一个简单的示例代码,演示了如何从 JSON 文件中读取数据并将其解析为结构体: package mainimport ("encoding/json""fmt"&q…

chatgpt赋能python:Python读取目录下文件和文件夹:一个便捷的文件管理解决方案

Python 读取目录下文件和文件夹:一个便捷的文件管理解决方案 在现代计算机领域中,文件和文件夹是我们经常需要处理的基本单元。在Python编程中,我们通常需要迭代目录中的文件和文件夹,以便对它们进行操作。幸运的是,P…

自然人如何开发票-以广西为例

个人没有开办企业,没有营业执照的情况能不能开发票呢。例如张三开了一家淘宝店,顾客在他这买了产品,想要张三给他开发发票,如果张三开不了发票,那人家就不要了。那这张三亏大了啊。于是想问,个人能不能开发…

医药交易平台如何保证税务合规?

伴随着我国社会经济的快速发展,居民对自身健康的关注程度与医疗保健意识在不断提高,再加上社会保障制度、公共卫生体系等的不断完善,以及在互联网的助力下,为医药经济的发展提供了良好的市场和机遇。特别是我国人口数量持续增长且…

内蒙古自治区律师事务所排名情况

内蒙古经济长期稳定增长,为内蒙古律师事务所的崛起带来了突破性历史机遇。随着时代的发展,行业发展规模已趋于稳定,律师业的竞争亦趋于成熟,截止2022年3月14日,根据官方公布数据显示内蒙古自治区共有777家律师事务所&a…

高企税务核查内容有哪些?

企业在通过高新技术企业认定后并不是就万事大吉了,在享受各项优惠政策及补贴时,还需注意应对税务部门的核查!高新技术企业该如何应对税务核查,需要准备哪些材料,一般核查哪些内容?今天这篇文章为总结了高新技术企业税务核查要点!…

拥抱AI,迎接未来

AI 从未离我们这么近。chatGPT 横空出世,5天达到1百万用户,两个月达到1亿用户。相比之下,Instagram 用了2年半的时间才到1亿用户。 拥抱AI,迎接未来 很多孩子开始谈论AI。为了带领孩子们迎接新趋势,我们开始更新Python…

WebTab- 一个提高工作效率的插件

最近真的被这个破学校逼疯了,数不清的破文档,像依托答辩,无从下手, 还好有他,我们的 WebTab ,内置的chatgpt,让我注水课设,游刃有余 现在,我要从0开始教你如何下载并使用这款好用的插…