Go项目布局建议

2023-11-06

我们编写的 如果是Go 程序都是简单程序,一般由一个或几个 Go 源码文件组成,而且所有源码文件都在同一个目录中。但是生产环境中运行的实用程序可不会这么简单,通常它们都有着复杂的项目结构布局。弄清楚一个实用 Go 项目的项目布局标准是 Go 开发者走向编写复杂 Go 程序的第一步,也是必经的一步。

但 Go 官方到目前为止也没有给出一个关于 Go 项目布局标准的正式定义。下面我们就说说一般项目中如何布局工程目录结构。下图是一个go Web管理后端项目

在这里插入图片描述

我来解释一下各目录作用:

cmd目录:一般go项目会把main.go文件放在该目录下,cmd下会创建一个目录,这个目录的作用是在go build的时候生成执行文件名称

cmd
└── admin
└── main.go

etc: 存放工程配置文件

doc: 放一些工程文档

script:该目录可以放shell脚本或者工程的makefile文件

server: 工程业务逻辑代码全部存放在该目录下

sql: 存放工程的sql文件,如果是工程比较大尤其是微服务化,也会把sql文件单独放在一个仓库,这样方便跟踪整个sql对库表的改动。

tools: 工程里的一些工具代码放到该目录下

工程里一些重要的文件:

changelog: 每当版本发布前,需要把: 配置变更,数据库变更,功能变更记录在该文件

Dockefile: 镜像打包文件

Makefile : make编译一般C++开发同学可能用的比较多,其实对于大型工程,尤其是工程需要加入cicd来完成自动化构建和发布,可以把这些功能放到makefile里完成。

当然对go工程项目不同,大小不同布局也可能是有所不同的,这个可以根据实际需求来定,下面是一个go标准布局参考 :https://github.com/golang-standards/project-layout

更多知识可来:https://wx.zsxq.com/dweb2/index/group/28885848155511

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go项目布局建议 的相关文章

  • 使用Docker registry镜像创建私有仓库

    2015 01 25 wcdj 摘要 安装Docker后 可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境 本文记录简单的搭建过程 1 使用registry启动私有仓库的容器 docker run d p 5000 50
  • go-zero使用Etcd进行服务注册代码分析

    代码分析 github com tal tech go zero v1 2 3 core discov publisher go package discov import github com tal tech go zero core
  • golang: Logrus实现日志打印

    Github https github com sirupsen logrus golang标准库的日志框架非常简单 仅仅提供了print panic和fatal三个函数 对于更精细的日志级别 日志文件分割以及日志分发等方面并没有提供支持
  • Go语言实现区块链与加密货币-Part3(交易优化,单机模拟多节点通信)

    交易 二 在这个系列文章的一开始 我们就提到了 区块链是一个分布式数据库 不过在之前的文章中 我们选择性地跳过了 分布式 这个部分 而是将注意力都放到了 数据库 部分 到目前为止 我们几乎已经实现了一个区块链数据库的所有元素 今天 我们将会
  • go Cobra命令行工具入门

    简介 Github https github com spf13 cobra Star 26 5K Cobra是一个用Go语言实现的命令行工具 并且现在正在被很多项目使用 例如 Kubernetes Hugo和Github CLI等 通过使
  • Go切片排序

    Go 语言标准库提供了sort包 用于对切片和用户定义的集合进行排序 具体示例如下 基本排序 package main import fmt sort func main float 从小到大排序 f float64 5 2 1 3 0 7
  • 权重实现随机抽奖

    一般抽奖是怎么实现的 在实习期间学会了一种通用的写法 在这里记录一下 最近在学Golang语法基础 这里就用Golang来写 package main import fmt time math rand func main r rand N
  • 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)

    要在 Go 中编写密码校验规则 确保密码不少于8位且包含数字和字母 你可以使用正则表达式和 Go 的 regexp 包来实现 以下是一个示例代码 错误示范 package main import fmt regexp func valida
  • Go_接口、多态、接口继承、空接口、类型断言

    接口 接口是把所有具有共性的方法定义在一起 是方法集 任何类型实现了接口中所有的方法 就是实现了这个接口 接口可以实现多态 接口传递的是地址值 接口定义及调用 定义格式 tepe 接口名 interface 方法名 参数 返回值 调用格式1
  • Golang三剑客之Pflag、Viper、Cobra

    如何构建应用框架 想知道如何构建应用框架 首先你要明白 一个应用框架包含哪些部分 在我看来 一个应用框架需要包含以下 3 个部分 命令行参数解析 主要用来解析命令行参数 这些命令行参数可以影响命令的运行效果 配置文件解析 一个大型应用 通常
  • go-zero目录结构和说明

    code of conduct md 行为准则 CONTRIBUTING md 贡献指南 core 框架的核心组件 bloom 布隆过滤器 用于检测一个元素是否在一个集合中 breaker 熔断器 用于防止过多的请求导致系统崩溃 cmdli
  • go-zero开发入门之网关往rpc服务传递数据1

    go zero 的网关往 rpc 服务传递数据时 可以使用 headers 但需要注意前缀规则 否则会发现数据传递不过去 或者对方取不到数据 go zero 的网关对服务的调用使用了第三方库 grpcurl 入口函数为 InvokeRPC
  • go-zero 的 etcd 配置

    实现代码在 core discov config go 文件中 type EtcdConf struct Hosts string Key string ID int64 json optional User string json opt
  • Go 语言中切片的使用和理解

    切片与数组类似 但更强大和灵活 与数组一样 切片也用于在单个变量中存储相同类型的多个值 然而 与数组不同的是 切片的长度可以根据需要增长和缩小 在 Go 中 有几种创建切片的方法 使用 datatype values 格式 从数组创建切片
  • 协程-单线程内的异步执行

    1 仿协程实例 不同事件依次顺序执行 coding utf 8 import time def calculate 1 step event name for index in range step print This is s even
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors
  • [每周一更]-(第55期):Go的interface

    参考地址 https juejin cn post 6978322067775029261 https gobyexample com interfaces https go dev tour methods 9 介绍下Go的interfa
  • go-carbon v2.3.4 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库

    carbon 是一个轻量级 语义化 对开发者友好的 golang 时间处理库 支持链式调用 目前已被 awesome go 收录 如果您觉得不错 请给个 star 吧 github com golang module carbon gite
  • go cannot find package “github.com/gorilla/websocket“解读

    Go无法找到包 github com gorilla websocket 的解决方案 在Go开发过程中 我们经常会依赖第三方库来简化开发工作 而使用 go get 命令安装这些库时 有时候我们可能会遇到类似于以下错误的情况 plaintex
  • Go、Docker、云原生学习笔记全攻略:从零开始,一步步走向精通!(2024版)

    第一章 Go语言学习宝典 一 介绍 01 Go 语言的前生今世 二 开发环境搭建 01 Go 语言开发环境搭建 三 初识GO语言 01 Go 多版本管理工具 02 第一个 Go 程序 hello world 与 main 函数 03 Go

随机推荐

  • 一个简洁的cublasSmatinvBatched应用示例

    可以简单地粘贴放入一个cuBLAS sample的文件中替代运行 一个简介的cublasSmatinvBatched 示例 Includes system include
  • Mindmanager如何可以取消自动首字母大写

    主页 字体 设置字体样式 格式字体 文本和大写 文本大写 无 参考网址 https tieba baidu com p 3752136361
  • SSM整合框架(spring+spring MVC)

    SSM整合框架 spring spring MVC 1 创建数据库配置文件database propreties driver com mysql jdbc Driver url jdbc mysql localhost 3306 数据库名
  • 编译安装webos

    一 安装手册 https www openwebosproject org docs build guide UwLO5mKSzlA 二 安装步骤 1 安装依赖库 sudo apt get update sudo apt get insta
  • raise NoReverseMatch("%s is not a registered namespace" % key)

    很蛋疼 第一次仿照写django项目也是出现这个问题 现在又跟着追梦人物的博客又写了一遍 昨晚因为这个问题搞到晚上一点多 出现的问题 raise NoReverseMatch s is not a registered namespace
  • MySQL主从复制(主:linux Redhat MySQL 5.1;从:win10,MySQL5.5)

    MySQL主从复制 主 linux Redhat MySQL 5 1 从 win10 MySQL5 5 主MySQL设置 从MySQL设置 查看主服务状态 show master status 注意事项 主MySQL设置 在linux中的
  • Q Learning学习笔记

    Q Learning学习笔记 这两天跟着莫烦大神的视频将强化学习 Reinforcement Learning 中的Q Learning学了一遍 颇有收获 便记录于此 希望大家不吝赐教 欢迎补充纠错 文章目录 Q Learning学习笔记
  • R语言小作业2(向量操作)

    任务一 生成简单向量 任务内容 生成如下向量 金融1801甲 金融1801乙 金融1802甲 金融1802乙 金融1803甲 金融1803乙 金融1804甲 金融1804乙 代码及结果 gt x lt paste 金融 rep c 1801
  • ubuntu系统构建VNC虚拟远程桌面

    文章目录 1 准备工作 2 安装ubuntu远程桌面 2 1 Gnome安装 2 2 xface安装 3 安装VNC服务器 4 配置VNC服务 4 1 VNC密码设置 4 2 启动脚本设置 4 3 启动VNCSERVER 4 4 查看开启的
  • 利用SQL注入进行文件读写(详细步骤的实现+图)【靶场:sqli-labs/Less-7】

    原理啊 成因啊就不再啰嗦了 直接上实现过程 一 环境 攻击机 192 168 67 140 目标主机 192 168 67 143 二 实际操作 利用mysql的读写文件函数进行文件的读取 在目标主机的 win7 2 E盘下新建一个flag
  • [激光原理与应用-27]:《激光原理与技术》-13- 激光产生技术 - 激光稳频技术

    目录 前言 第1章 什么频率的稳定性和可复现性 1 1 频率的稳定度 1 2 频率复现性 第2章 影响激光频率稳定的因素 2 1 温度引起腔长变化 则有 2 2 大气变化引起折射率的变化 2 3 机械振动对频率稳定性的影响 2 4 外部因素
  • 关于Activity中onStop和onPause调用时机的各种误解

    源码 https github com w g b ActivityReview 正确结果 假设当前的FirstActivity为A 要调用A的onPause方法而不调用onStop方法 1 在AndroidManifest文件中 将Thi
  • Mysql中Blob类型字段的插入、查看、截取和拼接

    导航 前言 数据库版本 创建测试表 插入数据 查看数据 截取数据 拼接数据 进制转换 实际处理 总结 前言 本来并没有太注意到Blob这个类型 在游戏的开发中存储数据常常使用这个类型 这里的使用其实是 机械 的使用 因为应用程序和Mysql
  • 一个简单词法分析器的C语言实现

    一个简单词法分析器的C语言实现 1 1实验描述 例如 对源程序 begin x 9 if x gt 9 then x 2 x 1 3 end 的源文件 经过词法分析后输出如下序列 lt 1 begin gt lt 10 x gt lt 18
  • 探究安全帽识别系统的原理及应用

    安全帽识别这一词想必大家都有所耳闻 但是他的工作原理和应用大家可能不太了解 富维图像作为资深的安全帽识别设计者 将为大家追本溯源 让大家了解安全帽识别的庐山真面目 安全帽识别系统是基于人工智能图像识别技术的高科技产物 近些年来 图像识别技术
  • 业界最全遥感图像语义分割Benchmark发布啦!还有提高小目标分割性能的C2FNet等你pick!

    遥感图像语义分割是图像分割领域的一个重要的垂类应用 有着广泛的需求和实际应用价值 尤其在灾害评估 农作物产量估计和土地变化监测等领域有着不可替代的作用 相比于自然图像的语义分割 遥感图像语义分割由于有其自身的特殊性和挑战性 如遥感图像存在大
  • js 字典的使用(入门级)

    2023 1 18今天我学习了如何使用字典 首先是字典的形式 dict a 1 b 2 c 3 字典是一种以键 值为一队存储的数据结构 key value key相当于字典的索引 key不允许重复 Array既是字典也是数组 一 定义数组
  • 剑指 Offer 09. 用两个栈实现队列

    leetcode题目 用两个栈实现一个队列 队列的声明如下 请实现它的两个函数 appendTail 和 deleteHead 分别完成在队列尾部插入整数和在队列头部删除整数的功能 若队列中没有元素 deleteHead 操作返回 1 示例
  • 聚簇索引和非聚簇索引的区别

    一 聚簇索引和非聚簇索引 1 聚簇索引和非聚簇索引 我拿查字典做一个比喻 字典的页面就好比是物理排列顺序 物理排列顺序是固定的 查询的方式就好比是索引 区别是聚簇索引就好比是拼音查询 每一个字母查询出来的页面顺序是跟你字母的顺序一致的 a字
  • Go项目布局建议

    我们编写的 如果是Go 程序都是简单程序 一般由一个或几个 Go 源码文件组成 而且所有源码文件都在同一个目录中 但是生产环境中运行的实用程序可不会这么简单 通常它们都有着复杂的项目结构布局 弄清楚一个实用 Go 项目的项目布局标准是 Go