引题
笔者开发了个漫画小说阅读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
cd basic
go mod init
go business
go mod init
go core
go mod init
go oauth
go mod init
构建多个模块相互调用关系
# 回到项目根目录
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/18051276