引题
笔者开发了个漫画小说阅读APP,前前后后花了三个月,从服务端到前端,再到客户端,一路艰辛不言而喻。
附上github的提交记录:
起因
2023年年末,笔者正为“高级系统架构师”的考试准备中,因资料太过于无聊,期间走神无数、三天打鱼两天晒网,到了临考期,已经是预计考不过的;也不知道为啥,在某天晨跑期间,突发奇想,为何不自己写个APP?就冲着这个想法开始了为期三个月,全干工...(口误,hahaha),全栈开发历程。
题材与技术选型
一、应用类型
1.因人设具备二次元属性,就选择漫画与轻小说等书籍,APP类型定为阅读型APP;
二、开发计划
开发流程
服务端->管理后台前端->客户端/数据采集端
就先从服务端项目入手
原因:
一是笔者本职就是服务端开发,已熟知这方面的开发步骤与技术栈;
二是服务端本身就作为系统的心脏,血液循环全靠它;
服务端
语言选型,服务端项目无非就是java、golang,果断选择了golang,原因很简单,吾乃java工程师,平日受尽java之苦!
开个玩笑,但选golang还是有认真考虑过,多方面的技术考量,如下:
1)高效性:Golang的运行速度非常快,比Java快得多;
2)并发支持:Golang天生支持并发,可以轻松实现高并发应用程序;
3)内存管理:Golang的垃圾回收机制可以自动管理内存,避免了内存泄漏问题;
4)静态类型:Golang是一种静态类型语言,可以在编译时检查类型错误,提高代码的可靠性;
5)语法简洁:Golang的语法非常简洁,易于学习和使用;
相较golang,也不能说java它坏,有多个好用的框架、成熟的技术社区...,在java领域遇到问题,总能在网上找到前人的踩坑经历;java等等优点几乎说不完,但就一句话,编译的耗时实在让笔者平日积累不少怨气。
废话有点多,还是回到项目研发,就golang语言,计划以gin+xorm+nacos+logrus+go-oauth2+(minio/cos/oos)作为技术栈。
环境配置
系统环境配置
安装golang
brew install go
配置环境变量
echo 'export GOROOT=/usr/local/go' >> ~/.bash_profile
echo 'export GOPATH=$HOME/go' >> ~/.bash_profile
echo 'export GO111MODULE=on' >> ~/.bash_profile
echo 'export GOPROXY=https://goproxy.cn,direct' >> ~/.bash_profile
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> ~/.bash_profile
source ~/.bash_profile
检测golang是否安装成功
go version
vscode项目环境配置
目录结构
.
├── README.md
├── admin
├── basic
├── business
├── config
├── core
└── oauth
.vscode目录配置
settings.json
{
"go.useLanguageServer": true,
"[go]": {
"editor.snippetSuggestions": "none",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"gopls": {
"usePlaceholders": true,
"completionDocumentation": true
},
"files.eol": "\n",
"debug.toolBarLocation": "docked",
}
tasks.json (因预计开发后台管理接口,所以先配置admin模块启动)
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "build admin",
"command": "go",
"args": [
"build",
"-o", "${workspaceFolder}/build/admin",
"-gcflags", "all=-N -l",
"${workspaceFolder}/admin/main.go"
],
"dependsOn": ["clean"],
},
{
"type": "shell",
"label": "clean",
"command": "rm",
"args": [
"-rf", "${workspaceFolder}/build"
]
}
]
}
launch.json
{
"version": "2.0.0",
"configurations": [
{
"name": "admin",
"type": "go",
"request": "launch",
"mode": "exec",
"program": "${workspaceFolder}/build/admin",
"cwd": "${workspaceFolder}",
"args": [
],
"preLaunchTask": "build admin"
}
]
}
以上环境相关的配置完毕
golang项目
开始golang项目的一些配置,因为这些配置都是笔者自己摸索出来,也不知道正统golang项目开发的目录结构是不是也是一样?有些怪异之处就请多多包涵。
采用多模块开发结构
# 项目根目录
go work init
对应生成go.work和go.work.sum文件
.
├── README.md
├── admin
├── basic
├── business
├── config
├── core
├── go.work
├── go.work.sum
└── oauth
接着对应各个模块初始化,生成go.mod文件
cd admin
go mod init admin
cd basic
go mod init basic
go business
go mod init business
go core
go mod init core
go oauth
go mod init oauth
构建多个模块相互调用关系
# 回到项目根目录
go work use admin
go work use basic
go work use business
go work use core
go work use oauth
到现在基本的项目开发配置大体都搞定,对了,忘了还有.gitignore文件
.gitignore
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
.vscode/
logs/
build/
cache/
# Go workspace file
go.work
go.work.sum
# Order file
.DS_Store
但这样,仅能在有界面开发工具操作,enenen...,有了引入make作为命令行构建
Makefile
.PHONY: admin compile clean
RM := rm -rf
PROJECT_DIR := $(shell pwd)
BUILD := build
compile:
@echo "cd $(PROJECT_DIR)/admin && CGO_ENABLED=0 go build -ldflags="-w -s" -a -installsuffix "" -gcflags="all=-N -l" -o $(PROJECT_DIR)/$(BUILD)/admin $(PROJECT_DIR)/admin/main.go"
@cd $(PROJECT_DIR)/admin && CGO_ENABLED=0 go build -ldflags="-w -s" -a -installsuffix "" -gcflags="all=-N -l" -o $(PROJECT_DIR)/$(BUILD)/admin $(PROJECT_DIR)/admin/main.go
admin:
@echo "cd $(PROJECT_DIR)/admin && CGO_ENABLED=0 go build -ldflags="-w -s" -a -installsuffix "" -gcflags="all=-N -l" -o $(PROJECT_DIR)/$(BUILD)/$@ $(PROJECT_DIR)/admin/main.go"
@cd $(PROJECT_DIR)/admin && CGO_ENABLED=0 go build -ldflags="-w -s" -a -installsuffix "" -gcflags="all=-N -l" -o $(PROJECT_DIR)/$(BUILD)/$@ $(PROJECT_DIR)/admin/main.go
@echo Executing $@ complete!
$(PROJECT_DIR)/$(BUILD)/$@
clean:
$(RM) $(PROJECT_DIR)/$(BUILD)
$(RM) $(PROJECT_DIR)/cache
$(RM) $(PROJECT_DIR)/log
@echo Cleanup complete!
现在完整的golang项目结构就搭建好了,这套配置组合探索也花了不少时间,还好最终结果是好的。
最新目录结构
.
├── Makefile
├── README.md
├── admin
│ ├── go.mod
│ └── main.go
├── basic
│ └── go.mod
├── business
│ └── go.mod
├── config
├── core
│ └── go.mod
├── go.work
├── go.work.sum
└── oauth
└── go.mod
在admin模块创建main.go
main.go
package main
import fmt
func main() {
fmt.Printf("hello, world!")
}
回到项目根目录,命令行启动
make admin
vscode启动则更简单,点一下即可
总结
到此,先告一段落,后续还会持续将每个经历步骤记录成文章下来。
下面附上成品样版图与app的gitee地址:
https://gitee.com/liaz-app/liaz-android/releases/download/1.0.0/app-arm64-v8a-release.apk
标签:进化史,admin,APP,work,PROJECT,DIR,go,服务端,build
From: https://www.cnblogs.com/liaz-app/p/18064634