【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 主机能够正常运行。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS逆向进阶篇【去哪儿旅行登录】【中篇-滑动轨迹破解补浏览器环境破参数】

目录&#xff1a; 每篇前言&#xff1a;0、整体分析1、逆向轨迹snapshot&#xff08;1&#xff09;分析&#xff1a;&#xff08;2&#xff09;Python轨迹生成&#xff1a;&#xff08;3&#xff09;AES加密&#xff1a;&#xff08;4&#xff09;轨迹加密&#xff1a;&#xf…

机器学习中梯度下降法的缺点

机器学习中的梯度下降法是一种寻找函数最小值的优化算法&#xff0c;广泛应用于训练各种模型&#xff0c;尤其是在深度学习中。尽管其应用广泛&#xff0c;但梯度下降法也存在一些不可忽视的缺点&#xff1a; 1. 局部最小值和鞍点 局部最小值问题&#xff1a; 对于非凸函数&a…

milvus insert数据在s3的存储

insert数据在s3的存储 对segment进行flush操作&#xff0c;会将数据持久化至s3对象存储。 相关核心代码位置: ibNode.flushManager.flushBufferData()主要代码在flushBufferData()函数。 代码位置:internal\datanode\flush_manager.go // flushBufferData notifies flush …

【Docker】Docker存储卷

文章目录 一、什么是存储卷二、为什么需要存储卷三、存储卷分类四、管理卷Volume创建卷方式一&#xff1a;Volume 命令操作方式二&#xff1a;-v 或者--mount 指定方式三&#xff1a;Dockerfile 匿名卷 操作案例Docker 命令创建管理卷Docker -v 创建管理卷Docker mount 创建管理…

java中容易被忽视的toString()方法

之前一直认为toString就是将数据转换成字符类型&#xff0c;直到最近写出了一个bug才对toString有了新的认识 不同数据类型&#xff0c;toString() 有不同的操作 定义一个student类&#xff0c;包含姓名 String类型、性别 String类型、年龄 int 类型、分数列表 String类型的li…

适合tiktok运营的云手机需要满足什么条件?

TikTok作为一款全球热门的社交媒体平台&#xff0c;具有无限的市场潜力。然而&#xff0c;卖家在运营过程中常常会面临到视频0播、账号被降权、限流等问题&#xff0c;甚至可能因为多人同时使用一个IP而导致封号的风险。为了规避这些问题&#xff0c;越来越多的卖家将目光投向了…

论UI的糟糕设计:以百度网盘为例

上面这一排鼠标一经过就会弹出来&#xff08;不是点才弹出来&#xff09;&#xff0c;然后挡住你的各种操作&#xff0c; 弹出来时你就必须等它消失&#xff0c;卡一下才能操作。 在用户顺畅地操作内容时&#xff0c;经常就卡一下、卡一下、卡一下…… 1、比如鼠标从下到上&am…

《基于CEEMDAN一小波包自适应阈值混凝土声发射信号降噪研究》算法思路笔记

![1]杨智中,林军志,汪魁等.基于CEEMDAN-小波包自适应阈值混凝土声发射信号降噪研究[J].振动与冲击,2023,42(03):139-149.DOI:10.13465/j.cnki.jvs.2023.03.016.](https://img-blog.csdnimg.cn/direct/9814ff64cc474cd3aa06ecaea60f2f75.png) 首先对周期循环荷载作用下混凝土试…

【RPG Maker MV 仿新仙剑 战斗场景UI (二)】

RPG Maker MV 仿新仙剑 战斗场景UI 二 战斗指令菜单原仙剑战斗指令图RMMV战斗指令对应代码战斗指令菜单代码效果 战斗指令菜单 原仙剑战斗指令菜单是使用方向键控制&#xff0c;同时按照使用情况正好对应四个指令和四个方向&#xff0c;同时没有选中的菜单用黑色透明图片覆盖&…

App启动优化笔记 1

app大致的启动流程。有Launcher进程,system_server进程,zygote进程,APP进程。 Launcher进程:启动activity来启动应用 system_server进程:(ams是其中的一个binder):发送一个socket消息给Zygote。 zygote进程:收到消息后,fork新的进程,---》app进程启动 APP进程:…

国际语言代码 Language Code 对照表速查

前言 语言代码是英国教育社会学家伯恩斯坦的术语。指在一定的语言集团中&#xff0c;特定的人群在特定的社会环境下使用的特定的言语。分为限定代码&#xff08;restricted code&#xff09;和精制代码&#xff08;elaborated code&#xff09;。语言代码是由字母或数字组成的…

STM32引脚重定义问题

最近在搞资源管理&#xff0c;发现有些引脚不能用 比如这个PE引脚。我想用他输出PWM&#xff0c;但是不能用&#xff0c;我也重定义了&#xff0c;还是不能用。回去翻看了技术手册。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //重映射引脚功能&#xff0c;需…

MB-106UP——进口抛光树脂的技术优势

超纯水的制备和稳定性一直是相关领域极为重视的&#xff0c;那么超纯水中常会用到的抛光树脂技术&#xff0c;进口和国产对比起来究竟谁更甚一筹呢&#xff1f;接下来为大家分享的技术就是超纯水制备中常会用到的进口品牌&#xff1a;美国Tulsimer杜笙树脂中抛光树脂MB-106UP的…

CORS就是跨域吗?

首先&#xff0c;跨域的域是什么&#xff1f; 跨域的英文是&#xff1a;Cross-Origin。 Origin 中文含义为&#xff1a;起源&#xff0c;源头&#xff0c;出生地。 在跨域中&#xff0c;"域"指的是一个 Web 资源&#xff08;比如网页、脚本、图片等&#xff09;的…

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知&#xff08;Compressed Sensing&#xff0c;CS&#xff09;是一种用于信号处理的技术&#xff0c;旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性&#xff0c;即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

Kubernetes概述

目录 1.K8S 是什么 2.为什么要用 K8S Kubernetes 主要功能如下&#xff1a; 3.Kubernetes 集群架构与组件 Master 组件 Kube-apiserver Kube-controller-manager Kube-scheduler 配置存储中心 etcd Node 组件 Kubelet Kube-Proxy docker 或 rocket 4.Kubernete…

css2背景

css2背景 一.背景颜色二.背景图片三.背景平铺四.背景图片位置五.背景图像固定六.复合型写法七.背景颜色半透明八.总结 一.背景颜色 默认是transparent(透明&#xff09; 二.背景图片 默认是none 三.背景平铺 默认是background-repeat(平铺&#xff09; 四.背景图片位置…

Vue中$root的使用方法

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练&#xff0c;今…

ai数字仿真辩论主持人提升用户体验

Ai虚拟主持人是元宇宙和AI人工智能技术在播音主持行业的重要应用&#xff0c;AI虚拟主持人能极大提升新闻资讯内容的精准度&#xff0c;改变单一的播报形式。 首先&#xff0c;AI虚拟主持人极大地提升了节目的制作效率和灵活性。传统主持人需要花费大量时间进行彩排和录制&…