# goProjectWh **Repository Path**: PresidentGo/goProjectWh ## Basic Information - **Project Name**: goProjectWh - **Description**: 成品项目仓库Project warehouse - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-09-14 - **Last Updated**: 2026-01-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Go项目 ## 开发前提:开发程序基础 程序最考验能力是:思考的全面性(你的程序的边界),解决确定的问题 ### 基础语法 + 循环控制, 变量,数据结构(基础类型/复合类型), 编程思维(面向过程,面向对象) + 并发控制:gorouite, wait group, ctx + 网络编程:TCP/UDP, HTTP(Gin/Beego/gorestful) + 持久化:Mysql/MongoDB/Redis ### 脚本开发能力(面向过程) ### 程序Debug 程序正常运行,保证每个环节可靠、可测试、可验证 工程的复杂度上来后,影响程序正常运行原因很多,需要本地调试,才能找到原因 基础语法: 程序员的关键技能:Debug + 直接开发功能(会遇到一些非常奇怪的问题) + 接收别人项目(需要关键步骤上进行debug) debug阶段: + 开发阶段(单元测试的debug) + 整体调试/接口调试(需要启动程序进行Debug) + 线上调试(不建议, remote远程) vscode [如何调试](/skill/debug/unit/README.md) ## 准备工作 + vscode 配置使用 git-bash(Windows同学) + 安装好make命令: 参考 (windows同学): make run /make build + 安装docker桌面版 + 安装数据访问软件: Navicat 关于mysql镜像的使用请参考: Docker Hub MySQL使用说明 ```go docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ``` ## 软件研发流程 + 项目立项: 老板 + 产品设计: + 产品经理: 需求的收集, 竞品比较, 产品的流程设计 + 概要设计: 大的流程: 访客, 创作者, 平台运营 + 详细设计: 运营平台, 比较细节, 每个字段(审核: 审核人: [], 审核结果: , 意见, 分类) + 产品原型: 低保帧, 高保帧 (UI/UE) + 项目开发: 开发/测试/运维 + 开发实施: 老大把需求转变为 后端架构(架构师) + 通用功能(用户中心)/业务功能(合规)/辅助功能(健康/告警/业务报表) + 提交代码(code view), CI 代码构建/单元测试/覆盖率/安全检查/... + 联合调试(多个服务,多个功能), 确认整体功能是否ok, 编写文档 + 项目测试: + 场景测试/UI测试/性能测试 + 运维上线: + 资源准备 + 维护 + 版本迭代: 需求-> 功能-->开发-->测试-->上线 软件开发: 获得可叠加似的成功 ## 项目介绍 ### Web开发: 微博客 + 项目名称: vblog, 一套前后端分离的单体Web服务 + 适合对象: 新手项目入门 + 业务方向: Web全栈开发, 运维开发 + 公司: 小业务团队, 公司内部小系统 + 难度: 低 ### 微服务开发: 微服务研发云迷你版 + 项目名称: devcloud-mini + 适合对象: 有基本的单体项目开发经验,想深入进阶微服务开发的同学 + 业务方向: 大型分布式业务系统研发, 业务中台, 比较低层服务(上层的业务是根据市场变化), 业务网关 + 难度: 中高 + 分布式系统开发所需要具备的基础知识: 服务间同步调用(RPC), 消息流转(Kafak), 分布式系统的维护(Trace) + 偏向运维: cmdb ### 复杂业务开发解读: 微服务研发云平台: 流水线项目 + 项目名称: devcloud + 适合对象: 熟悉微服务开发模式, 了解复杂业务开发流程, 想要从事平台开发业务方向的同学 + 业务方向: 平台开发 + 难度: 高 + 教学方式: 设计解读,代码解读,演示 ## 如何跟进项目 关键: 跟着练(不能只是上课时听, 上课的时候听思路), 做开发: 自己解决问题的能力(debug), 不要copy的代码, 你的项目的代码 要自己一行一行的写 项目仓库: 一个项目一个仓库, 为了做面试的面门(Gitee/Coding) 如何在一个代码仓库里面, 开发多个项目(go项目)? 可以使用go workspace ```go // 初始化一个工作空间 go work init // 把vblog这个项目加入到这个空间里面来 go work use vblog ``` 为了方便你们查看项目: 这些项目都放到这个代码仓库里面 1.一节课,一节课, 内容比较多, 课堂上给不了时间让你们练, 下来自己练习 2.切换的速度太快, 对全局项目架构熟悉 3.项目课 不是完善一个知识点, 建立一个知识体系。 ## 业务逻辑代码组织方式 业务代码组织风格 + MVC: 分层架构:比较传统的代码组织风格 + M: models(数据库表的定义) + V: view(视图(API)) + C: controllers(业务逻辑函数) + 微服务渐进架构:微服务的孵化,业务开展之前,尽量少的划分服务(2-5个服务) + DDD: 分区架构(Domain Driven Design)领域驱动开发 + 域(领域):一个业务单元(商品管理/订单管理)理解为一个业务单元/分区 代码开发的两种方式 + 从上往下 进行设计, 顶层设计 + 从下往上 先写业务实现逻辑,然后暴露给路由出去 ## RESful接口设计 // 文章管理 API, 同时设计业务接口(需要暴露成HTTP RESTFUL) + [业务接口定义](./apps/blog/interface.go) HTTP 接口 只是把业务接口通过HTTP协议对外进行暴露 GET /vblog/api/v1/blogs 获取博客列表 POST /vblog/api/v1/blogs 创建博客 + [创建请求](./docs/api/create_blog.json) GET /vblog/api/v1/blogs/:id 获取单个文章管理 PUT /vblog/api/v1/blogs/:id 更新单个文章 + [修改请求](./docs/api/create_blog.json) DELETE /vblog/api/v1/blogs/:id 删除单个文章 需要定义一个Blog数据结构 ## 数据库的设计 文章:Blog 文章的元数据: + 文章的Id + 创建时间 + 修改时间 + 发布时间 用户传入的数据: + 标题 + 作者 + 内容(Markdown) + 标签(map) 数据库建库、建表 准备一个MySql数据库: 使用docker安装一个MySQL ```shell docker run mysql ``` ## 项目开发 项目骨架做定义(流程从上到下的) - 业务处理模块: 每个业务一个模块:[apps](./apps/README.md) - 项目的配置管理: pkg conf 项目的运行参数,通过配置传递给程序: [conf](./conf/README.md) - 项目的文档:docs - 项目的接口: protocol 协议服务器,监听对应的端口(http server/grpc server), 处理用户连接[处理用户的连接](./procotol/README.md) - 项目CLI: cmd 项目的cli工具(cobra), [./vblog start/init](./cmd/README.md) - 项目入口文件:main.go, 项目所有的包,类, 在main.go 进行程序组装 - 程序的配置文件:[加载配置文件目录](./etc/README.md) - 文件格式的配置:config.toml - 环境变量的配置:config.env - 程序的样例配置:config.example.toml - 单元测试配置:unit_test.env(vscode 使用的) - .gitignore: 哪些文件忽略不提交, config.toml