获得徽章 13
#青训营 x 字节后端训练营#
6.11打卡
今天学习了go语言中的函数选项模式
组成
- 选项结构体
- 选项函数类型
- 定义功能函数
- 设置选项的函数
优点:
- 容易使用
- 可读性强
- 扩展性好
缺点:
- 增加了复杂性
- 可能存在错误的选项组合
#青训营 x 字节后端训练营#
6.10打卡
今天学习了go中“==” 进行判断相等
- 只有数据类型相同才能进行比较,go中没有隐式类型转换
- 基本数据类型 直接判断值是否相等,但浮点数的判断比较困难,因为浮点数不能进行精确表示,所以比较浮点数需要比较他们差的绝对值,如果小于一定值就判断相等
- 数组的长度视为类型的一部分,不同长度的数组不能进行比较
- 引用类型比较的是所指向是否为同一份数据
- 切片类型不能直接用==比较
- 接口类型 需要比较动态类型和动态
#青训营 x 字节后端训练营#
6.9打卡
今天学习了一些关于接口设置的规范
- GET 和 POST 请求必须包含key为body的入参,所有数据包装为JSON格式并包含在body中
- 响应信息格式包含
- code 请求处理状态
- data 数据内容
- message 请求处理信息
- list 请求的数据
- 其他数据
- 一些数据类型的规定
- boolean类型 1 为true 0 为false
- 日期类型 一律使用字符串来表示
#青训营 x 字节后端训练营#
6.8打卡
今天学习了一下使用go中可能会遇到的一些坑
- 有变量作用域时,使用 := 初始化数据需要注意会不会有变量遮蔽的情况
- init函数不一定是最先执行的,init函数会在全局变量后执行
- 在使用range时,返回的数据不是原数据,不能对原数据进行修改,要修改原数据时,需要使用index访问原数据进行修改
#青训营 x 字节后端训练营#
6.7打卡
今天学习了一下gorm的最佳实践
1.在生成sql语句中,遇到一些复杂的语句时,可以使用gorm.Expr()来写复杂的表达式
2.在查询数据时,可以使用FindInBatches来进行批量数据查询,避免一次性将大量数据加载到内存中
3. 可以通过关闭默认事务,跳过Hooks来加快执行
4. 使用Scopes来进行代码复用
5. sql语句不要以字符串拼接的形式来执行,会有sql注入的问题,要以在执行时传入变量的形式来执行
#青训营 x 字节后端训练营#
6.5打卡
今天学习了go中关于const的一些知识
使用常量的好处
1.避免魔法字面值,即直接出现在代码中的数字和字符串,可能第一时间不知道是什么意思
2.避免字面值不一致的情况,使用常量定义一下,就可以在多处使用,且修改方便,只需修改一处代码
3.配合iota可以用const变量组来实现枚举类型,iota的值等于它出现在变量组的中的第几行(从0开始)
4.定义无类型const变量时,他的数字范围超过存储范围中值,利用这一点,我们可以进行大数的计算,但使用时仍需转化到数字范围内
#青训营 x 字节后端训练营#
6.4打卡
为了给项目添加一个定期备份数据库的功能,今天了解了一个定期执行任务的库(gocron)
简单的使用案例
- 创建一个调度器
s := gocorn.NewScheduler(time.UTC), 可以传入一个参数来选择时区
- 创建任务 (任务可以创建多个)
例如 每十分钟自动备份数据库
s.Every(10).Minutes().Do(func() {
// you task
})
- 执行任务
s.StartAsync() 异步执行调度器
s.StartBlocking() 运行调度器并阻塞当前执行路径
简单的3步,就可以创建定时任务
#青训营 x 字节后端训练营#
6.3打卡
今天学习了go中的log库,在日常的学习中日志输出不是必须的,但实际的应用中,日志的存在就十分必要
输出日志的作用:
- 查看系统的运行状态
- 发现异常
- 辅助问题的诊断
log库中的3个api
- Println/Printf
- Panicln/Panicf -> print + panic
- Fatalln/Fatalf -> print + exit
也可以定制输出
- SetFlags 设置时间戳格式
- SetOutput 输出对象,文件,网络socket等
- SetPrefix 设置日志前缀
#青训营 x 字节后端训练营#
6.2日打卡
今天学习了go的dateparse库,专门用于解析日期格式的字符串
- ParseAny()方法接收一个日期格式的字符串,将其转化为go中的time.Time类型
- 设置时区
通过time.Loadlocation()获取时区对象,将其作为第二个字符串传到ParseAny方法中,就可以获得特定时区的字符串
- cli
dateparse还提供了一个cli工具
例如 dateprase "2023-6-2 21:44:10"
来查看传入日期在不同时间格式下的显示是什么样的
还可以传入一个时区选项 例如 --timezone=“UTC-8”来获取东八区的时间
#青训营 x 字节后端训练营#
5.31打卡
今天看了go的另外一个orm库xorm,感觉在很多方面和gorm差不多,但xorm支持的数据库更多,但xorm已经不更新了,而gorm还在更新,还是用gorm吧
了解到xorm有一个优势是支持主从式读写分离
什么是主从读写分离
数据库分为俩个角色(主数据库和从数据库)
主数据库完成所有写操作,而从数据库负责读操作,
主从之间根据数据复制进行数据同步, 主数据库进行写操作后,会将修改的数据记录下来,并将这些变更逐步传递到从数据库
这样就行读操作时,可以连接任意一个从数据库,从而实现负载和水平扩展
下一页