9月
07
随着业务逻辑的充实,发现前边有些地方还是需要修改和完善。哪里呢。就是最最开始的地方,就是定义 api 的那地方。其实在那里,最开始,只需要定义 Req 和 Res。里边不需要先填充任意的东西。为什么这么说呢。因为 路由指向 ctrl,ctrl 通过 service 的绑定去调用 logic。而 logic 里的输入输出却是在 mode 里定义的。所以,model 里边的输入输出和 api 里的输入输出一般都是一样的。这个时候,只需要定义 model 里的输出输出。 api 那边直接继承过来就可以了。所以,步骤是这样的。
- 定义 api 里的 req 和 res,空的就行(接口path 和 method 还是要加上),名字和方法名字想好。执行
gf gen ctrl 生就好。
- 然后再生成 dao 和 model。 执行
gf gen dao 生就好。
- 再在 model 下定义输入和输出。这个定义输入和输出也有一点矛盾。是业务场景带来的。model 和 dao 自身一般是不会有矛盾的,因为他们对应的数据库里的表。而输出和输入却要对应业务场景。比如一个项目有后台登录和 app 登录两个场景。往往,会分出两个路由组来处理这两种业务场景。虽然都是登录,输入和输出一般都不会都是相同的。这个时候 model 下定义输入和输出就得加个分组了。比如当前逻辑是后台逻辑。我会在 internal/model/ 下再多建立一层文件夹,就叫 admin。然后在里边再建立对应的输入输出文件。其实叫的这个 admin 和 api 下的文件夹是一个意思。就是初始化项目时候 api 下的 v1 的意思。这个时候都是 v1 或都是 admin,继承的时候就要用别名哈。下边会给出例子。
- 再去建立 logic 的初步实现。然后去生 service,再回头完善 logic。
gf gen service
在 api req 的时候,里边一定要有 g.Meta。否则,不会生成对应的 ctrl 文件。
go 语言刚开始学,goframe 也是第一次用。如果理解错了,可以留言哈。
继续阅读
9月
07
从 http 请求到自定义路由,再对应的返回已经跑通了。但是,还没具体的实现业务。那就先从图片验证码开始。从以下几点开始。
- 先去找一个比较成熟的生成图片验证码的库
- 写生成逻辑,并加入缓存功能。比如缓存 5 分钟。
- 添加配置。图片的默认宽高,复杂度等。以及上边说的缓存 5 分钟这些,最好有一个统一配置。
- 再就是核验验证码(该步骤留到需要使用验证码的地方使用)
redis 配置
在做这些之前,我们先把 redis 配置和使用搞好。就是准备使用 redis 来对图片验证码的值进行缓存。
goframe 官方配置介绍: https://goframe.org/pages/viewpage.action?pageId=1114194
redis 官方介绍: https://goframe.org/display/gf/NoSQL+Redis
配置文件的文件类型就使用 yaml,配置文件就放在 *manifest/config下。
好吧。那么就在 *manifest/config/config.yaml 下补充。
# Redis 配置
redis:
default:
address: 192.168.56.56:6379
db: 1
cache:
address: 192.168.56.56:6379
db: 2
配置好了,那就开始使用测试下看看。
继续阅读
9月
06
做项目。一般都会选择框架。很少会直接从 0 开始撸的。之所以选择框架,是因为框架既帮你做好了架构,又准备好了很多工具,还定制了一些规范。适合快速稳定的做项目。一般一个语言对应的开源框架会比较多,选一个或两个应用到项目中就可以了。准备进入 go 领域,也得选一个框架。初步了解了 gin 和 goframe。这里还是选择 goframe。gin 还是太轻了,项目中需要的一些工具不够多和完善。
官网: https://goframe.org/
安装升级
这里想做一个接口服务项目。仅仅提供接口给到前端使用就好。现在大多业务场景都是前后端分离的。比如app、小程序、管理后台这些。app,小程序是必须分离。管理后台也可以不分离,但分离起来更好写更爽。
按照官网文档,先安装好 gf。当前最新版本是 2.5.2。
创建项目。
gf init goSimpleAdmin
cd goSimpleAdmin
# 查看版本信息
gf -v
GoFrame CLI Tool v2.5.2, https://goframe.org
GoFrame Version: v2.3.1 in current go.mod
CLI Installed At: /Users/vini123/go/bin/gf
CLI Built Detail:
Go Version: go1.20.6
GF Version: v2.5.2
Git Commit: 2023-08-18 09:57:25 cf299273c499aafb5d19829809dfb6b8ef280c12
Build Time: 2023-08-18 16:23:18
发现 goframe 版本是 2.3.1。可以对刚创建的项目进行升级。在升级前,先做好版本控制。
git init -b main
git add .
git commit -m 'goframe initialize'
使用 gf up 对项目进行升级。
继续阅读
9月
06
既然 go 的迁移、seeder 等不好用,还是用 laravel 来搞吧。
开始
composer create-project laravel/laravel youme.com --prefer-dist
这样就创建了一个最新的 laravel 项目,项目文件在 youme.com 里。在本地,做了 host 映射。通过 youme.com 就可以打开。
上边就是默认的。
创建 git 版本控制,提交。
git init -b main
git add .
git commit -m 'laravel initialize'
继续阅读
9月
05
在 Go 1.5 及后续版本中,可以通过创建 internal 代码包让一些程序实体仅仅能被当前模块中的其他代码引用。这是第三种访问权限:模块级私有。
- 导出路径包含internal关键字的包,只允许internal的父级目录及父级目录的子包导入,其它包无法导入。
9月
05
https://github.com/danceyoung/paper-code/blob/master/package-oriented-design/packageorienteddesign.md
序
本篇内容主要讲解golang项目的面向包设计准则和基础的架构分层。
信息来自原文
内容进行翻译、加工、整合及结合个人的实践经验,并附有一个真实的例子来解释本篇内容。
当然你也可以直接阅读英文原文。
当然高手如云,只是懒得写罢了。
百年太久,只争朝夕,不负韶华,不枉少年,来日怎方长。
继续阅读
7月
28
很多时候,都是终端里看信息。多色的信息就很好看了。我是一个实在人,就从零开始搞一个。其实是别人搞好了,我拿来用。
开始
终端高亮,我们用这个 https://github.com/mgutz/ansi
先建立一个 go 项目
mkdir artisan
cd artisan
go mod init artisan
再安装 ansi
go get github.com/mgutz/ansi
然后再封装一个调用方法包
mkdir -p pkg/console
touch pkg/console/console.go
console.go
// Package console 命令行辅助方法
package console
import (
"fmt"
"os"
"github.com/mgutz/ansi"
)
// Success 打印一条成功消息,绿色输出
func Success(msg string) {
colorOut(msg, "green")
}
// Error 打印一条报错消息,红色输出
func Error(msg string) {
colorOut(msg, "red")
}
// Warning 打印一条提示消息,黄色输出
func Warning(msg string) {
colorOut(msg, "yellow")
}
// Exit 打印一条报错消息,并退出 os.Exit(1)
func Exit(msg string) {
Error(msg)
os.Exit(1)
}
// ExitIf 语法糖,自带 err != nil 判断
func ExitIf(err error) {
if err != nil {
Exit(err.Error())
}
}
// colorOut 内部使用,设置高亮颜色
func colorOut(message, color string) {
fmt.Fprintln(os.Stdout, ansi.Color(message, color))
}
最后,新建一个 main.go 然后,调用
touch main.go
package main
import "artisan/pkg/console"
func main() {
console.Success("多少恨昨夜梦魂中,还似旧时游上苑。车如流水马如龙,花月正春风。")
}
go run main.go
这个时候就可以看到绿色的输出了。
7月
21