首页 > 其他分享 >简化 Go 开发:使用强大的工具提高生产力

简化 Go 开发:使用强大的工具提高生产力

时间:2023-09-27 09:57:02浏览次数:34  
标签:Pre Cobra 自定义 Hooks 简化 生产力 Go commit

作为 Go 开发人员,应该都知道维持简洁高效开发工作流程的重要性。为了提高工作效率和代码质量,简化开发流程并自动执行重复性任务至关重要。在本文中,我们将探讨一些强大的工具和技术,它们将简化 Go 开发过程,助力您的编码之旅。
 

Cookiecutter:使用一致的模板快速启动项目

问题描述

从头开始创建新的 Go 项目通常涉及设置标准项目结构和配置基本文件。此过程可能非常耗时且容易出错。Cookiecutter 通过允许您创建预先配置了所需项目结构、依赖项和设置的项目模板来提供帮助
 

要开始使用 Cookiecutter,首先,需要将其安装在您的系统上:

pip install cookiecutter

 

接下来,在 GitHub 上找到合适的 Go 项目模板或创建自己的模板。例如,您可以使用社区创建的自定义 Cookiecutter Go 模板,该模板提供了基本的 Go 项目结构:

cookiecutter https://github.com/your-username/golang-cookiecutter

 

Cookiecutter 将提示您输入一些特定于项目的详细信息,例如项目名称、作者和存储库名称。提供信息后,它将创建一个具有所需结构和设置的新项目目录。
 

自定义模板允许您根据您的特定需求和偏好对其进行定制,从而确保整个团队的项目设置一致。
 

Air:即时重装,高效开发

每次更改后等待代码编译和运行可能会减慢您的开发过程。Air 是一款很棒的工具,它提供实时重新加载,让您可以立即看到对 Go 代码所做的更改
 

要安装 Air,您可以使用go get

go get -u github.com/cosmtrek/air

 

安装后,在项目目录中创建一个 air.toml 配置文件以指定设置。下面是一个air.toml基本示例:

# air.toml
root = "."
tmp_dir = "tmp"
build_dir = "tmp/build"
log_dir = "tmp/log"
app_port = 8080

 

现在,您可以在项目目录中运行 Air

air

 

Air 将监测 Go 文件中的任何更改,并在您保存文件时自动重建和重新启动应用程序。这种即时循环反馈可显著加快开发迭代并提高生产力。
 

Pre-commit Hooks:强制执行代码质量

保持代码质量对于任何项目都是必不可少的。Pre-commit Hooks 是在每次提交之前运行的脚本,确保您的代码在提交到存储库之前满足特定条件。常见检查包括代码格式设置、检查和运行测试
 

要使用 Pre-commit Hooks,您需要在系统上安装 Python 和 Git。首先,使用 pip 安装预提交包:

pip install pre-commit

 

接下来,将文件添加.pre-commit-config.yaml到存储库的根目录,以指定要运行的 Pre-commit Hooks:

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/golangci/golangci-lint
    rev: v1.41.1
    hooks:
      - id: golangci-lint

 

在这个例子中,我们使用 golangci-lint hooks 对我们的 Go 文件执行代码检查。
 

设置配置后,运行以下命令以安装 Pre-commit Hooks:

pre-commit install

 

现在,每次您尝试提交更改时,Pre-commit Hooks 都会自动运行,检查代码中的任何问题。如果发现任何问题,提交将中止,直到问题得到解决。
 

自定义 Pre-commit Hooks 存储库:跨项目共享和重用 Hooks

虽然 Pre-commit Hooks 提供了开箱即用的检查,但您可能希望添加特定于项目的自定义检查。要在多个项目之间共享和重用自定义 Hook,您可以创建一个集中的 Pre-commit Hooks 存储库。
 

首先,创建一个新的 Git 存储库来存储自定义 Hook。在此存储库中,您可以添加您喜欢的任何语言编写的自定义 Hook 脚本。例如,您可以编写一个简单的 bash 脚本来检查项目中的特定条件。
 

准备好自定义 Hook 后,将存储库添加到项目.pre-commit-config.yaml

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/your-username/custom-pre-commit-hooks
    rev: v1.0.0
    hooks:
      - id: custom-hook

 

现在,当运行pre-commit install时,它将从指定的存储库中获取自定义 Hook,并将其包含在您的提交前检查中。
 

基于 CLI 的开发:使用自定义命令行界面自动执行任务

命令行界面 (CLI) 是用于自动执行任务和管理复杂项目的强大工具。Cobra 是一个流行的 Go 库,可帮助您轻松构建强大的交互式 CLI。
 

要安装 Cobra CLI,请运行:

go install github.com/spf13/cobra-cli@latest

 

安装后,可以使用 Cobra CLI 生成 Cobra 应用程序和命令文件。它简化了搭建应用程序基架的过程,使将 Cobra 合并到 Go 项目中变得更加容易
 

要创建新的基于 Cobra 的应用程序,请运行:

cobra-cli init myapp

 

此命令将生成具有必要文件和结构的基本 Cobra 应用程序。然后,您可以在单独的文件中定义命令及其相应的操作。
 

例如,要创建 print 问候消息的新命令,可以运行:

cobra-cli add greeting

 

Cobra CLI 将创建一个具有基本命令结构的新 greeting.go 文件。您可以自定义此文件以实现问候命令的功能。借助 Cobra CLI,您可以快速开发功能丰富的 CLI 应用程序,并自动执行各种任务,从而增强开发工作流程。
 

结论

简化 Go 开发对于提高生产力和保持代码质量至关重要。通过集成 Cookiecutter 等工具以实现一致的项目模板、用于即时实时重新加载的 Air、用于代码质量检查的 Pre-commit Hooks、用于共享和重用 Hook 的自定义 Pre-commit Hooks 存储库以及用于构建强大命令行界面的 Cobra CLI,您可以显著简化 Go 开发工作流程。
 

无论您是开始一个新项目还是优化现有项目,采用这些工具和技术无疑将提高开发效率,并使您的 Go 编码之旅更加愉快。使用这些强大的工具,可以将您的 Go 项目简单和高效提升到一个新的水平。
 

参考链接:
https://medium.com/@joloiuy/simplify-go-development-boost-your-productivity-with-powerful-tools-14ad4bc311b3

 

标签:Pre,Cobra,自定义,Hooks,简化,生产力,Go,commit
From: https://www.cnblogs.com/sealio/p/17731962.html

相关文章

  • golang Context应用举例
     Context本质golang标准库里Context实际上是一个接口(即一种编程规范、一种约定)。typeContextinterface{Deadline()(deadlinetime.Time,okbool)Done()<-chanstruct{}Err()errorValue(keyany)any} 通过查看源码里的注释,我们得到......
  • django 项目跨域
    安装django-cors-headers模块pipinstalldjango-cors-headers在settings.py中配置INSTALLED_APPS=[...'corsheaders',...]MIDDLEWARE=[...'corsheaders.middleware.CorsMiddleware',...]#允许跨域源CORS_ORIGIN_ALLOW_......
  • django 项目接受 post 请求
    修改settings.py文件MIDDLEWARE=[...#注释掉这个#'django.middleware.csrf.CsrfViewMiddleware',...] ......
  • Go - Using channels to receive interrupts in a program
    WithintheKubernetesdeploymentenvironment,applicationswillactuallybesent theSIGTERMsignalfirstifithasbeendecidedthepodholdingtheapplicationneeds tobestopped.Theapplicationmaychoosetorespondtosaidsignalornot.Ifthe appli......
  • MongoDB 解析:灵活文档数据库与 Docker Compose 部署
    MongoDB是一款开源、高性能的NoSQL数据库,以其无模式的文档存储格式(BSON)而著称,广泛应用于众多开源项目,包括但不限于Yapi等。它在大规模数据存储和实时数据处理方面表现出色,因此备受青睐。在本文中,我们将深入探讨MongoDB的特性,并详细阐述如何使用DockerCompose轻松部署Mon......
  • macos M1安装MongoDB及基本crud操作
    安装:官网教程InstallMongoDBCommunityEditiononmacOS—MongoDBManual我看的是这个教程:Mac安装MongoDb保姆级教程以及踩坑笔记(图文详解(xjx100.cn) 里面有详细步骤及报错/解决.庆幸我在安装过程没遇到什么错误MongoDB教程MongoDB教程|菜鸟教程(runoob.com)Mo......
  • 数据库连接:使用Python连接到MySQL、SQLite和MongoDB
    在现代应用程序和数据科学中,数据库连接是至关重要的一部分。Python提供了丰富的库和驱动程序,可以轻松连接各种数据库,包括MySQL、SQLite和MongoDB。本文将介绍如何使用Python连接到这些不同类型的数据库,并提供相应的代码示例。连接到MySQL数据库MySQL是一个流行的关系型数据库管理系......
  • Golang method | Interfaces 示例
    方法与接口(methodInterface) packageinterFacesimport("fmt""log")//managerAppstoreonlineaccounttypeAccountstruct{surNamestringgivenNamestring}//方法的调用如果需要对调用对象做修改操作,则需要使用`*`引用其指针创建方法。func(a*Acc......
  • uber go code 规范(规范)
    前言从接触Golang到现在,感觉到的很深的一点是,go的代码无论是大佬还是菜鸟写出的代码,都有着大体统一的格式/流程,这也是Go被开发者喜爱的一个原因,但是还有一些,比如变量的命名方式等,可以称之为风格的东西,却不尽相同,我在开发中,其实也希望有一个相对权威......
  • 每日总结 mongo配置
     今天应老师的要求,进行了mongo的简单学习,mongo是一种非关系型数据库,是一个开源的文档型NoSQL(NotOnlySQL)数据库管理系统。NoSQL意味着它不依赖传统的关系型数据库表格结构,而是使用灵活的文档模型。MongoDB以可扩展性、灵活性和高性能而闻名。mongo的下载配置教程我参考了厦门......