golang项目构建工具插件gobGradleMaven的使用
Golang 项目构建工具插件 gob/Gradle/Maven 的使用
介绍
虽然 Golang 编程生态系统越来越成熟,但这些工具和框架都是独立存在的,用于解决特定问题。每当开始一个新的 Golang 项目时,都需要进行一系列初始化;更糟糕的是,每当切换开发环境时,都必须重复相同的过程!
这个项目旨在通过提供一个名为 gbc 的工具来解决这个问题,该工具类似于 Java 生态系统中的 Maven 或 Gradle,同时提供了一个类似于 SpringBoot 的框架(粘合剂)。
特性
- 一切都是插件,您可以使用任何喜欢的工具作为插件来自定义构建过程!
- 模型驱动的 SQL 数据库 DAO(数据访问对象)。
- 通过 samber/do 支持 IoC 容器。
- 为大多数流行框架生成脚手架代码。
- 环境敏感的配置文件。application.yml 用于非测试环境,application-test.yml 用于测试环境。
- 友好的帮助消息。
- 更多…
一个基于 gob 的项目是什么样子的?
就像 SpringBoot 一样,gob 项目中最重要的部分是定义项目的 配置。主要有 两个 配置:
- gob.yaml:它的作用与 Gradle 中的 settings.gradle.kts 或 Maven 中的 pom.xml 相同,您可以在此文件中定义任何第三方工具作为插件。
- application.yaml:它的作用与 SpringBoot 中的 application.yaml 相同。
快速开始
- 使用以下命令安装
gbc
:
go install github.com/kcmvp/gob/cmd/gbc@latest
- 在项目主目录中运行以下命令初始化项目:
gbc init
gbc 如何工作
gbc
将 gob.yaml
中定义的所有内容视为插件。您只需要告诉 gbc
3W(where、when 和 what):
- Where:从哪里下载工具
- When:何时执行命令
- What:用工具做什么
命令
构建命令
gbc init
gbc build
gbc clean
gbc test
gbc lint
gbc deps
插件命令
gbc plugin install
gbc plugin list
设置命令
gbc setup version
示例代码
gob.yaml 示例
exec:
commit-msg-hook: ^#[0-9]+:\s*.{10,}$
pre-commit-hook:
- lint
- test
pre-push-hook:
- test
plugins:
golangci-lint:
alias: lint #When : when issue `gbc lint`
args: run ./... #What: execute `golangci-lint run ./...`
url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2 #Where: where to download the plugin
gotestsum:
alias: test
args: --format testname -- -coverprofile=target/cover.out ./...
url: gotest.tools/gotestsum@v1.11.0
version.go 示例
// buildVersion don't change this
var buildVersion string
常见问题
安装插件时,如何找到 URL?
gob plugin install
的工作方式与 go install
相同,它接受与 go install
相同的 URL。
如何升级插件?
只需简单地编辑 gob.yaml
文件并更新您想要的版本。
plugins:
golangci-lint:
alias: lint
args: run ./...
url: github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.2
更多关于golang项目构建工具插件gobGradleMaven的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang项目构建工具插件gobGradleMaven的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Go语言项目构建工具插件比较:go build、Gradle与Maven
在Go语言项目开发中,构建工具的选择对项目管理和构建效率有重要影响。下面我将对比三种常见的构建方式:go build(原生工具)、Gradle和Maven插件。
1. Go原生构建工具:go build
Go语言自带的构建工具go build
是最简单直接的方式。
// 示例项目结构
// myproject/
// ├── main.go
// ├── go.mod
// └── pkg/
// └── utils.go
// main.go
package main
import (
"fmt"
"myproject/pkg"
)
func main() {
fmt.Println(pkg.Hello())
}
// pkg/utils.go
package pkg
func Hello() string {
return "Hello, Go!"
}
构建命令:
# 普通构建
go build -o myapp
# 跨平台构建
GOOS=linux GOARCH=amd64 go build -o myapp-linux
# 安装依赖
go mod download
# 运行测试
go test ./...
优点:
- 简单直接,无需额外配置
- 与Go工具链深度集成
- 支持模块化依赖管理
2. Gradle插件:gogradle
Gogradle是Gradle的插件,为Go项目提供Gradle构建能力。
// build.gradle 配置示例
plugins {
id 'com.github.blindpirate.gogradle' version '0.11.4'
}
golang {
goVersion = '1.20'
}
dependencies {
golang {
build 'github.com/gin-gonic/gin@v1.8.1'
test 'github.com/stretchr/testify@v1.7.0'
}
}
build {
targetPlatform = ['linux-amd64', 'windows-amd64']
outputLocation = './build/${GOOS}_${GOARCH}/${PROJECT_NAME}'
}
构建命令:
# 初始化项目
gradle init go
# 构建项目
gradle build
# 清理构建
gradle clean
优点:
- 利用Gradle的强大构建能力
- 支持多项目构建
- 依赖管理更灵活
3. Maven插件:golang-maven-plugin
Maven也可以通过插件支持Go项目构建。
<!-- pom.xml 配置示例 -->
<project>
<build>
<plugins>
<plugin>
<groupId>com.igormaznitsa</groupId>
<artifactId>golang-maven-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<goVersion>1.20</goVersion>
<buildFlags>
<flag>-o</flag>
<flag>target/myapp</flag>
</buildFlags>
</configuration>
</plugin>
</plugins>
</build>
</project>
构建命令:
# 构建项目
mvn package
# 清理构建
mvn clean
优点:
- 适合已有Maven生态的项目
- 与其他JVM语言项目集成方便
- 利用Maven的生命周期管理
对比总结
特性 | go build | Gogradle | Maven插件 |
---|---|---|---|
学习曲线 | 低 | 中 | 中 |
跨平台构建支持 | 是 | 是 | 是 |
依赖管理 | go mod | 支持多方式 | 支持多方式 |
多项目支持 | 有限 | 强大 | 强大 |
构建缓存 | 有 | 有 | 有 |
适合场景 | 纯Go简单项目 | 复杂构建需求 | Java/Go混合项目 |
推荐选择
- 纯Go项目:优先使用原生
go build
,简单高效 - 复杂构建需求:考虑Gogradle,特别是需要多项目构建或复杂构建流程时
- 混合技术栈:如果项目中有Java/Go混合,Maven插件可能是更好选择
对于大多数Go项目,原生构建工具已经足够强大。只有在需要与Java生态集成或需要复杂构建流程时,才需要考虑Gradle或Maven插件。