【Go语言】Go项目工程管理

GO 项目工程管理(Go Modules)

Go 1.11 版本开始,官方提供了 Go Modules 进行项目管理,Go 1.13开始,Go项目默认使用 Go Modules 进行项目管理。

使用 Go Modules的好处是不再需要依赖 GOPATH,可以在任意位置进行 Go 项目的创建,还能够通过 GOPROXY 配置镜像源,解决 Go 语言依赖下载慢的问题。

1 通过Go Modules创建新项目

该节使用 Go 语言创建项目,实现一个简单的计算器。

点击 Enviroment 右侧的加号,添加 GOPROXY 变量。

bash 复制代码
# name
GOPROXY
# value
https://goproxy.io,direct

环境变量设置后,点击 OK ,完成后点击 Create 创建 Go 项目。

创建的项目结构如下,项目目录下有一个 go.mod 文件用来管理项目中用到的依赖。

2 编写计算器工程代码

计算器工程项目分为两部分:

  • 项目的入口文件 main.go,该文件最终会被编译成可执行的二进制文件。

  • 算法库,名为 custommath,每个计算操作对应一个 Go 文件,例如 add.go 用于加法计算。

首先编写项目的入口文件 main.go,项目代码如下:

Go 复制代码
package main
​
// 引入其它包
import (
    "calculator/custommath"
    "fmt"
    "os"
    "strconv"
)
​
// 定义一个用于打印程序使用指南的函数
var Usage = func() {
    fmt.Println("USAGE: calc command [arguments] ...")
    fmt.Println("\nThe commands are:\n\tadd\t计算两个数值相加\n\tsqrt\t计算一个非负数的平方根")
}
​
// 程序入口函数
func main() {
    /*
     * 用于获取命令行参数,注意程序名本身是第一个参数,
     * 比如 calc add 1 2 这条指令,第一个参数是 calc
     */
    args := os.Args
    // 除程序名本身外,至少需要传入两个其它参数,否则退出
    if args == nil || len(args) < 3 {
        Usage()
        return
    }
    // 第二个参数表示计算方法
    switch args[1] {
    // 如果是加法的话
    case "add":
        // 至少需要包含四个参数
        if len(args) != 4 {
            fmt.Println("USAGE: calc add <integer1><integer2>")
            return
        }
        // 获取待相加的数值,并将类型转化为整型
        v1, err1 := strconv.Atoi(args[2])
        v2, err2 := strconv.Atoi(args[3])
        // 获取参数出错,则退出
        if err1 != nil || err2 != nil {
            fmt.Println("USAGE: calc add <integer1><integer2>")
            return
        }
        // 从 custommath 包引入 Add 方法进行加法计算
        ret := custommath.Add(v1, v2)
        // 打印计算结果
        fmt.Println("Result: ", ret)
    // 如果是计算平方根的话
    case "sqrt":
        // 至少需要包含三个参数
        if len(args) != 3 {
            fmt.Println("USAGE: calc sqrt <integer>")
            return
        }
        // 获取待计算平方根的数值,并将类型转化为整型
        v, err := strconv.Atoi(args[2])
        // 获取参数出错,则退出
        if err != nil {
            fmt.Println("USAGE: calc sqrt <integer>")
            return
        }
        // 从 simplemath 包引入 Sqrt 方法进行平方根计算
        ret := custommath.Sqrt(v)
        // 打印计算结果
        fmt.Println("Result: ", ret)
    // 如果计算方法不支持,打印程序使用指南
    default:
        Usage()
    }
}

创建 custommath 目录,在该目录下创建 add.go、sqrt.go 两个文件,分别编写对应的 Add、Sqrt方法。

add.go

Go 复制代码
package custommath
​
func Add(a int, b int) int {
    return a + b
}

sqrt.go

Go 复制代码
package custommath
​
import "math"
​
func Sqrt(i int) int {
    v := math.Sqrt(float64(i))
    return int(v)
}

执行 go build,编写写好的 Go 代码。

通常 Go 代码并非在本地执行,而是要上传到服务器主机,例如 Linux、Unix,在上传 .exe 文件就不可以了,可以执行如下操作,生成 linux 操作系统的可执行文件。

bash 复制代码
# 设置环境变量
$env:GOOS="linux"
$env:GOARCH="amd64"
# 编译
go build -o calculator

这里是在 powershell 执行的,直接在 cmd 设置环境变量,生成的文件显示不是 Linux 下可执行的二进制文件,具体原因暂不清楚,具体的操作以及报错如下:

bash 复制代码
set GOOS=linux
set GOARCH=amd64
​
# 编译
go build -o calculator

powershell 中按照如下,可以正常生成 linux 系统下的可执行文件。

上传到 linux 主机能够正常运行。

相关推荐
不是万能的豆学长2 小时前
filetidy 文件整理助手:一键归类 + 规范重命名(Python 零依赖单文件工具)
大数据·开发语言·python·技术美术
懂点Tech6 小时前
ctfshow MISC入门图片篇(信息附加):misc41解题思路
开发语言·python
金銀銅鐵7 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
catchadmin7 小时前
PHP 8.7 协程新提案 让跨协程代码共享请求身份
开发语言·php
念何架构之路8 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x8 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
酷炫码神8 小时前
Day 10|Pinia 状态管理:把散落在各组件的数据,收进一个全局仓库
android·开发语言·javascript
microrain9 小时前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
Elastic 中国社区官方博客9 小时前
我们如何通过 70 多个拉取请求,将 OpenTelemetry Java agent 迁移到 invokedynamic
java·大数据·开发语言·elasticsearch·搜索引擎·全文检索·es
tyn1889 小时前
记录本地安装nacos服务的方法及异常
java·开发语言