当前位置:首页 > 技术分析 > 正文内容

平台项目管理规范(Go语言版本)_平台项目实施方案

ruisui882个月前 (02-22)技术分析8

1 编码规范

go版本go1.13.4开发环境linux/mac/windowsgit版本2.7.3+是否需要go fmt需要是否需要代码检查需要是否需要golint需要是否需要本地自测需要是否需要go mod tidy && go mod vendor需要

平台目录结构:

apisapi接口文档(goSwagger)APP-META前端页面入口bin项目编译生成的二进制文件存放目录configs平台支持的模板配置模板contrib平台申请资源模板文件daemon平台的核心代码实现docs相关操作文档hack编译使用到的脚本文件pkg平台使用的公共方法vendor平台依赖存放的位置Dockerfile平台项目的容器化文件Makefile平台的编译文件go.mod平台模板根go.sum平台依赖包main.go平台的主函数入口main_test.go平台的单元测试

1.1 引包规范

项目开发过程中需要符合社区开发的项目规范标准:

import 系统包

换行

import 项目包

换行

import 第三方包

我们需要知道系统的建设,尤其云端Poc项目的开发实现需要完全符合社区的开发需求工作,在系统引包的流程中需要按照 系统包 项目包 第三方包进行导入,三种导包完成以后需要通过换行区分包的层次。

代码示例:

import (
    "strconv"
    "time"

    "gitlab.alibaba-inc.com/cloud-poc/poc-server/apis/types"
    "gitlab.alibaba-inc.com/cloud-poc/poc-server/daemon/config"
    "gitlab.alibaba-inc.com/cloud-poc/poc-server/daemon/mgr"
    "gitlab.alibaba-inc.com/cloud-poc/poc-server/pkg/metrics"

    "github.com/prometheus/client_golang/prometheus"
)

1.2 命名规范

1.1.1 结构体字段命名 首先判断结构体或者字段的使用范围,保持最小操作的命名规范标准,尽可能使用私有的变量和结构体以及方法实现函数功能的调用。

// deploymentMetrics is the deployment statistics metrics structure,
// the structure statistics deployment life cycle information.
type deploymentMetrics struct {
    // createDeploymentCount is system create deployment from db.
    createDeploymentCount *prometheus.CounterVec

    // existedDeploymentCount is system existe deployment count.
    existedDeploymentCount *prometheus.GaugeVec

    // deploymentDbCount is system create deployment from db.
    deploymentDbCount *prometheus.GaugeVec

    // deploymentApplyTime is system deployment apply time from db.
    deploymentApplyTime *prometheus.GaugeVec
}

首字母小写,避免引起安全调用的问题,声明全局私有的变量进行操作。

1.3 注释规范

查看代码注释文档信息(示例代码如下):

1.3.1 函数代码规范标准 双斜杠+空格+函数名+函数解释+英文逗号结尾.

// checkoutDeploymentApplyTimeMetrics is used to count application deployment runing time.

注释说明:所有注释需要在注释字段或者方法的上方进行注解,所有注释都需要以函数名开头然后英文进行解释,需要一句简单明了的英文注释进行解释代码含义,最后以英文句号的形式结尾。

// checkoutDeploymentApplyTimeMetrics is used to count application deployment runing time.
func checkoutDeploymentApplyTimeMetrics(m *Manager) {
    deploymentQuery := m.deploymentApplyTimeArray()
    for _, v := range deploymentQuery {

1.3.2 结构体字段代码注释规范 注释在结构体上方:

双斜杠+空格+结构体名+英文注释内容+英文逗号结尾.

// deploymentStatistics is the deployment statistics structure.
type deploymentStatistics struct {
    Provider        string `json:"provider"`
    SoftwareName    string `json:"software_name"`
    SoftwareVersion string `json:"software_version"`
    SpecUID         string `json:"spec_uid"`
    Status          string `json:"status"`
    Count           int32  `json:"count"`
}

第二种注释,针对结构体中的某一字段进行注释(同上)

    // createDeploymentCount is system create deployment from db.
    createDeploymentCount *prometheus.CounterVec

1.4 Tag规范

如果配置出现多种的映射关系存在,比如需要映射到json或者yaml的字段映射,涉及到多种的数据结构体映射关系存在时,不同类别的映射字段通过空格区别。

// Config contains all configuration of daemon.
type Config struct {
    HomeDir       string                                `json:"homeDir" yaml:"homeDir"`
    ListenAddress string                                `json:"listen_address" yaml:"listen_address"`
    Debug         bool                                  `json:"debug" yaml:"debug"`
    SDConfig      *driver.Config                        `json:"sd" yaml:"sd"`
    DBConfig      *db.Config                            `json:"db" yaml:"db"`
    KMSConfig     *kms.KmsConfig                        `json:"kms" yaml:"kms"`
    SLSConfig     *sls.Config                           `json:"sls" yaml:"sls"`
    Infra         map[infra.InfraType]infra.InfraConfig `json:"infra" yaml:"infra"`
}

标准定义:

HomeDir       string                                `json:"homeDir" yaml:"homeDir"`

平台所有的代码文件和定义结构体涉及到的映射关系都需要参照如上的形式进行声明和使用。

2 代码提交规范

每次提交段代码需要符合代码提交规范: 每次提交,Commit message 都包括三个部分: Header,Body 和 Footer。 其中,Header 是必需的,Body 和 Footer 可以省略。

Header部分只有一行,包括三个字段:

type(必需)、scope(可选)和subject(必需)。

云端Poc平台代码提交规范:feature: support max alive time config

2.1 commit规范的信息标签

feat新功能(feature)fix修补bugdocs文档(documentation)style格式(不影响代码运行的变动)refactor重构(即不是新增功能,也不是修改bug的代码变动)test增加测试chore构建过程或辅助工具的变动

代码提交需要合并的分支都需要满足符合要求,根据开头的标签类型区分提交分支的类型追加提交代码的功能,上述列表进行区分提交合并代码的功能和作用。

2.2 云端Poc平台代码提交流程规范

1 云端Poc平台项目代码2 开发者拉取代码并切换到新的分支3 代码合并提交测试4 代码评审5 代码修改/合并/提交测试6 代码合入项目

步骤规范演示: 1 拉取项目代码

git clone http://gitlab.xxx-inc.com/cloud-xxx/xxx-server.git
// or 
git clone git@gitlab.xxx-inc.com:cloud-xxx/xxx-server.git

2 编辑/新增代码项目

// 根据代码功能选择自己的分支名(默认主分支develop)
git checkout -b software-update
// 代码新增或者编辑完成以后,需要提交更新后的代码文件(按照功能进行提交区分)
git add .
git commit -m "feat:update system software apply time"
git push origin software-update
// 同步合并最新分支到主分支
git commit -s --amend
git add .
git pull origin develop --rebase
git add .
git push -f origin software-update

3 提交代码评审合并请求 4 根据代码评审提出的相关问题进一步完善代码功能

// 代码评审,评审人会提示出相应的修改建议,代码需要进行变更操作
git add .
git commit -s --amend
git pull origin develop
git add .
git push -f origin software-update

第4步的操作需要反复进行执行,最终完成代码审核和并入云端Poc项目的实现中来,代码逻辑分支的并入或者新建需要按照最小单元的方式进行,即使最小的功能也需要按照新建分支进行标准提供。

3 编译规范

编译环境golang1.13.4编译工具make(apk标准版)配置文件支持类型
toml/yml/properties/props/prop/hcl(未验证),
json/yaml(已验证)代码编译环境golang:1.13.4-alpine代码编译环境需要的依赖(apk安装)apk add bashapk add make代码编译环境更换国内源(加快编译速度)sed -i '
s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

针对项目容器化方案实施的细节,容器化部署实施方案的部署实现,我们可以通过编写Dockerfile对应用进行容器化改造措施,云端Poc的Dockerfile如下:

FROM golang:1.13.4-alpine as builderRUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositoriesRUN apk update && \    apk upgrade && \    apk add bash && \    apk add makeRUN mkdir -p /root/poc-server/COPY ./ /root/poc-server/RUN chmod 777 /root/poc-server/hack/*RUN cd /root/poc-server/ && CGO_ENABLED=0 make build

4 发布规范

基础镜像alpine:3.8国内镜像源sed -i '
s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories代码编译环境需要的依赖(apk安装)ca-certificatesbashtzdata配置文件变更
/etc/poc-server/config/config.json(支持多种变更文件)

发布规范Dockerfile:

FROM golang:1.13.4-alpine as builder

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk update && \
    apk upgrade && \
    apk add bash && \
    apk add make
RUN mkdir -p /root/xxx-server/
COPY ./ /root/xxx-server/
RUN chmod 777 /root/xxx-server/hack/*
RUN cd /root/poc-server/ && CGO_ENABLED=0 make build

配置文件说明: Dockerfile中命令命令行:CMD ["--config","
/etc/xxx-server/config/config.json"] 可以指定相关的配置文件进行启动,目前系统针对配置文件启动加载的方式:

默认配置文件
/etc/xxx-server/config.json配置文件支持度.json支持.yaml支持.yml待验证.toml待验证.properties待验证.props待验证.prop待验证.hcl待验证

5 发布环境规范

5.1 测试环境

5.2 预发环境

5.3 生产环境

6 监控规范

平台监控的规范标准工作,涉及以下几个方面: 6.1 监控metrics信息暴露(云端Poc平台的metrics暴露)

环境访问地址云端Poc测试环境metrics[http://test.xxx.com:8080/]云端Poc生产环境[http://pre.xxx-inc.com/]云端Poc生产环境metrics[
http://product.xxx-inc.com/]

6.2 通过ServiceMonitor接入监控系统中 手动黑屏执行进行接入:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    app: poc-server
    release: ack-prometheus-operator
  name: poc-server
  namespace: monitoring
spec:
  endpoints:
  - path: /metrics
    port: tcp-8001
  namespaceSelector:
    matchNames:
    - cloudpoc-product
  selector:
    matchLabels:
      app: poc-server

面试资料可私聊,Java,资料,面试

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/2163.html

标签: go swagger
分享给朋友:

“平台项目管理规范(Go语言版本)_平台项目实施方案” 的相关文章

代码管理-9-gitlab的使用和设置

gitlab使用1、外观设置完成后保存,返回登录页面查看关于注册,有些公司是不允许打开的,,有些人数非常多的公司就需要打开注册的功能,让人员自己注册,我们来给他特定的权限就可以,毕竟人非常多的时候还由我们来给她们注册就非常不现实了,工作量会很大2、自动注册3、组&用户&项目创建组设置组名称、描述等创...

js中数组filter方法的使用和实现

定义filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。语法var newArray = arr.filter(callback(element[, index[, selfArr]])[, thisArg])参数callback循环数组每个元素时调用的回调函数。回调函...

Vue进阶(二十六):详解router.push()

在Vue2.0路由跳转中,除了使用 <router-link> 声明式创建 a 标签来定义导航链接,还可以借助 router 的实例方法,通过编码式编写代码来实现。router.push(location)想要导航到不同的 URL,则使用 router.push 方法。这个方法会向 hi...

快来看看重构了 365 天的 vue3.5 这次到底更新了啥

新人求关注?,点击右上角 ↗? 关注,博主日更,全年无休,您的关注是我的最大的更新的动力~ 感谢大家了 就在 9 月 1 号,迭代了一年多的 Vue 3.5 终于发布了,这次发布的代号是 "天元突破 红莲螺岩"。这是一个机器人动画片的名字,相信喜欢看动漫的小伙伴应该很熟悉从更新的 C...

three.js cannon.js物理引擎之齿轮动画

今天继续说一说cannon.js物理引擎,并用之前已经学习过的知识实现一个小动画,知识点包括ConvexPolyhedron多边形、Shape几何体、Body刚体、HingeConstraint铰链约束等等知识。因为我之前用纯three.js 的THREEBSP实现过一个静态的齿轮,现在就想配合ca...

微信企业号首款永久免费应用问世

7月14日,微信企业号移动办公应用领跑者——办公逸宣布:其所研发的微信办公应用将永久免费,企事业单位只要拥有微信企业号都可以免费安装办公逸各项应用,此举标志着微信办公免费时代现已到来!据悉,办公逸(www.bangongyi.com)现已推出四大微信办公套件,分别为:移动办公管理套件、客户关系管理套...