首页 > 其他分享 >服务端工程师进化史-从零开始的APP开发(1)

服务端工程师进化史-从零开始的APP开发(1)

时间:2024-03-10 19:46:57浏览次数:21  
标签:进化史 admin APP work PROJECT DIR go 服务端 build

引题

笔者开发了个漫画小说阅读APP,前前后后花了三个月,从服务端到前端,再到客户端,一路艰辛不言而喻。
附上github的提交记录:
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启动则更简单,点一下即可
vscode启动

总结

到此,先告一段落,后续还会持续将每个经历步骤记录成文章下来。
下面附上成品样版图与app的gitee地址:

https://gitee.com/liaz-app/liaz-android/releases/download/1.0.0/app-arm64-v8a-release.apk

liaz

标签:进化史,admin,APP,work,PROJECT,DIR,go,服务端,build
From: https://www.cnblogs.com/liaz-app/p/18064634

相关文章

  • 服务端工程师进化史-从零开始的APP开发(2)
    前奏上文:服务端工程师进化史-从零开始的APP开发(1)续上之前的进度,继续漫画/轻小说(阅读类)app代码公开计划,本篇计划开始准备项目的基础,第三方组件的部署。开源地址为了让广大读者最后能阅读到完整的项目代码,在此先附上开源地址,项目会随着文章的进度,持续公开。#服务端https://gi......
  • 网络开发基础服务端001
    再服务端上    同上一期 客户端一样 也是定义Socket 绑定端口ip 然后进行监听  启动服务器 首先异步接收客户端  Console.ReadLine();是为了保证程序不会结束再异步应答中 其实就是一开始 先连接 然后在应答回调里面 进行接收回调 然后......
  • 三、MyBatis基础配置之映射文件Mapper.xml(均为单表查询示例)
    一)动态if需求:多条件组合查询。  二)动态foreach需求:多值查询。  三)动态抽取......
  • 精准采集客源软件哪个最好用(采集电子地图电话号码工商数据老板的app)
    精准采集客源软件推荐在当今竞争激烈的市场中,寻找精准的客户资源对于企业的发展至关重要。为了帮助您高效地获取客户信息,我亲自测试了多款精准采集客源软件,以下是我推荐的三款最好用的APP:微拓客微拓客是一款专业的客户采集软件,具有强大的数据采集和筛选功能。通过微拓客,您可以......
  • 关于Flask中View function mapping is overwriting an existing endpoint function
    关于Flask中Viewfunctionmappingisoverwritinganexistingendpointfunction首次编辑:24/3/10/11:03最后编辑:24/3/10/11:57引子背景本来是在写个人网站,以前的代码中,几乎每个视图函数都有类似于:@app.route("/")defindex(): try: returnsend_file("index.html") e......
  • App自动化测试之元素定位及常用方法
    1.元素定位appium元素定位方式跟selenium是一样的通过appium客户端启动服务器自动连接手机之后,进入对应的被测app以及界面app有不同的界面和不同的功能app的界面主要是以元素构成需要对界面功能进入自动化测试就一定要定位该界面元素执行对应的操作方法对手机app的界面进......
  • uni-app 微信小程序开发者工具预览项目
    1.打开微信开发者工具①设置->代理设置->选择使用系统代理②安全设置->开启服务端口2.项目中找到并打开配置文件mainfest.json->微信小程序配置->AppID配置3.运行小程序如果没有配置微信开发者工具地址,在工具下拉->设置->运行配置->小程序配置->......
  • Bootstrap Your Own Latent A New Approach to Self-Supervised Learning论文阅读笔记
    BootstrapYourOwnLatentANewApproachtoSelf-SupervisedLearning论文阅读笔记Abstract​ 我们提出了BYOL,一种新的自监督图像表示学习的方法。BYOL依赖于两个神经网络,即在线网络和目标网络,它们相互作用和相互学习。从一个图像的增广视图出发,我们训练在线网络来预测同一图......
  • app自动化测试环境安装和原理解析
    1.移动测试的基本介绍定义:测试手机程序:appApp程序测试点:功能测试安装卸载测试升级测试兼容性测试不同的手机的系统使用测试环境不同androidios其他:基于Android二次开发系统华为:鸿蒙系统小米:澎湃系统网络切换网络终端使用中来电,短信横竖屏切换健壮性......
  • 苹果AppleMacOs系统Sonoma本地部署无内容审查(NSFW)大语言量化模型Causallm
    最近Mac系统在运行大语言模型(LLMs)方面的性能已经得到了显著提升,尤其是随着苹果M系列芯片的不断迭代,本次我们在最新的MacOs系统Sonoma中本地部署无内容审查大语言量化模型Causallm。这里推荐使用koboldcpp项目,它是由c++编写的kobold项目,而MacOS又是典型的Unix操作系统,自带clang编......