【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 变量。

# name
GOPROXY
# value
https://goproxy.io,direct

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

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

2 编写计算器工程代码

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

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

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

首先编写项目的入口文件 main.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

package custommath
​
func Add(a int, b int) int {
    return a + b
}

sqrt.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 操作系统的可执行文件。

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

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

set GOOS=linux
set GOARCH=amd64
​
# 编译
go build -o calculator

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/389169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《剑指offer》

本专题是分享剑指offer的一些题目&#xff0c;开始刷题计划。 二维数组的中的查找【https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId13&tqId11154&ru/exam/oj】 描述 在一个二维数组array中&#xff08;每个一维数组的长度相同&#xff0…

Python4Delphi: Delphi 程序使用 Python 抓取网页

想用程序去抓取一个网页的内容&#xff0c;Delphi 有自己的 HTTP 库。比如 Indy 的 TIdHTTP&#xff0c;或者 TNetHTTPClient。 这里测试一下使用 Python 的 HTTP 库抓取网页&#xff0c;然后把抓取的内容给 Delphi 的程序。 Delphi 程序&#xff0c;界面上拖控件如下&#x…

jenkins-maven环境的安装

jenkins-maven环境的安装

Codeforces Round 924 (Div. 2) B - D

B. Equalize 题目&#xff1a; 思路&#xff1a;首先排序然后去重&#xff08;可以用set来去重&#xff09;&#xff0c;我们可以肯定的是&#xff0c;如果连续k个数最大值最小值的差小于等于n的话&#xff0c;那么这个长度为k的区间就符合答案要求&#xff0c;那么k就和答案…

【web | CTF】BUUCTF [护网杯 2018] easy_tornado

天命&#xff1a;这题是框架性的漏洞&#xff0c;Python的web服务器框架&#xff0c;应该已经比较古老了 开局先看一下三个文件 简单阅读后会发现&#xff0c;这里存在文件包含漏洞&#xff0c;可以直接读取文件&#xff0c;但是有一个哈希值校验 一开始我以为是扫描文件后得到…

每日一练:LeeCode-98、 验证二叉搜索树【二叉搜索树+DFS】

本文是力扣LeeCode-98、 验证二叉搜索树【二叉搜索树DFS】】 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&am…

【mysql】数据约束

一、数据约束&#xff1a; 什么是约束&#xff1f; 为了确保表中的数据的完整性(准确性、正确性)&#xff0c;为表添加一些限制。是数据库中表设计的一个最基本规则。使用约束可以使数据更加准确&#xff0c;从而减少冗余数据&#xff08;脏数据&#xff09;。 数据库完整性约…

OpenCV Mat 实例详解 二

构造函数 OpenCV Mat实例详解一中已介绍了部分OpenCV Mat构造函数&#xff0c;下面继续介绍剩余部分构造函数。 Mat (const std::vector< _Tp > &vec, bool copyDatafalse)&#xff1b; vec 包含数据的vec对象 copyData 是否拷贝数据&#xff0c;true— 拷贝数据&…

CSS之BFC

BFC概念 BFC&#xff08;Block Formatting Context&#xff09;即块级格式化上下文&#xff0c;是Web页面的可视CSS渲染的一部分。它是一个独立的渲染区域&#xff0c;让其中的元素在布局上与外部的元素互不影响。简单来说&#xff0c;BFC提供了一个环境&#xff0c;允许内部的…

LeetCode 0103.二叉树的锯齿形层序遍历:层序遍历 + 适时翻转

【LetMeFly】103.二叉树的锯齿形层序遍历&#xff1a;层序遍历 适时翻转 力扣题目链接&#xff1a;https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/ 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往…

常见的单片机及其功能

在当今电子技术快速发展的时代&#xff0c;单片机作为核心组件&#xff0c;在各类电子项目和产品中扮演着至关重要的角色。它们的应用范围从简单的家用电器控制到复杂的工业自动化系统&#xff0c;几乎无处不在。接下来&#xff0c;我们将以轻松的语言&#xff0c;探讨几种广泛…

【AIGC】Stable Diffusion的采样器入门

在 Stable Diffusion 中&#xff0c;采样器&#xff08;Sampler&#xff09;是指用于生成图像的一种技术或方法&#xff0c;它决定了模型如何从潜在空间中抽样并生成图像。采样器在生成图像的过程中起着重要作用&#xff0c;影响着生成图像的多样性、质量和创造性。以下是对 St…

【蓝桥杯单片机入门记录】LED灯(附多个例程)

目录 一、LED灯概述 1.1 LED发光原理 1.2电路原理图 1.3电路实物图 1.4 开发板LED灯原理图 1.4.1共阳极LED灯操控原理&#xff08;本开发板&#xff09; &#xff08;非实际原理图&#xff0c;便于理解版本&#xff09;由图可以看出&#xff0c;每个LED灯的左边&#xf…

迎新年,送新手福利, 送2篇nhanes文章全套复现代码

美国国家健康与营养调查&#xff08; NHANES, National Health and Nutrition Examination Survey&#xff09;是一项基于人群的横断面调查&#xff0c;旨在收集有关美国家庭人口健康和营养的信息。 地址为&#xff1a;https://wwwn.cdc.gov/nchs/nhanes/Default.aspx 本次赠送…

搭建 blender python api 的外部开发环境

以下都是为了不直接在 blender 的 script ide 里写脚本而做&#xff0c;直接在 blender 里写的话就没什么参考意义了。 首先是2个blender的设置选项&#xff0c;建议开启&#xff0c;会比较方便。 开发选项启用后&#xff0c;你在一些菜单上右键的话&#xff0c;会多出来 在线…

adobe软件提示This non-genuine Adobe app will be disabled soon【软件版本】

因为电脑上级路由器装了小飞机&#xff0c;导致本机电脑ps等adobe的系列软件出现了 This non-genuine Adobe app will be disabled soon&#xff0c;烦人的狠&#xff0c;之前有写过一篇通过更改host的教程&#xff0c;现在已经失效了&#xff0c;今天为大家分享一个用软件来屏…

深度学习:Pytorch安装的torch与torchvision的cuda版本冲突问题与解决历程记录

今天不小心将conda环境中的一个pytorch环境中的torch包给搞混了&#xff0c;将其更新了一下&#xff0c;发生了一些问题&#xff1a; 当时运行了一下这个代码&#xff1a; pip install torchvision --upgrade 导致了环境中包的混乱&#xff1a; 只能说欲哭无泪&#xff0c;当…

.NET Core WebAPI中封装Swagger配置

一、创建相关文件 创建一个Utility/SwaggerExt文件夹&#xff0c;添加一个类 二、在Program中找到Swagger相关配置信息 三、添加方法&#xff0c;在Program中调用 在SwaggerExt类中添加方法&#xff0c;将相关配置添写入 /// <summary> /// swagger配置 /// </sum…

Docker 第十四章 : Docker 三剑客之 Machine

第十四章 : Docker 三剑客之 Machine 本章知识点: Docker Machine 是 Docker 三剑客之一,它是一个工具,允许用户在本地或远程机器上创建 Docker 主机。它简化了 Docker 环境的设置,特别是在不同的操作系统和云平台上。通过 Docker Machine,用户可以轻松地在虚拟机或物理…

计算机网络——多媒体网络

前些天发现了一个巨牛的人工智能学习网站 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; 跳转到网站 小程一言 我的计算机网络专栏&#xff0c;是自己在计算机网络学习过程中的学习笔记与心得&#xff0c;在参考相关教材&#xff0c;网络搜素…