【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.hqwc.cn/news/470030.html

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

相关文章

Spring Boot 笔记 019 创建接口_文件上传

1.1 创建阿里OSS bucket OSS Java SDK 兼容性和示例代码_对象存储(OSS)-阿里云帮助中心 (aliyun.com) 1.2 编写工具类 package com.geji.utils;import com.aliyun.oss.ClientException; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClientBuilder; import com.aliyun…

线段树总结

线段树的定义 线段树&#xff08;Segment Tree&#xff09;是一种二叉搜索树&#xff0c;与区间树相似&#xff0c;它将一个区间划分成一些单元区间&#xff0c;每个单元区间对应线段树中的一个叶结点。使用线段树可以快速地查找某一个节点在若干条线段中出现的次数&#xff0c…

代码随想录 Leetcode406. 根据身高重建队列

题目&#xff1a; 代码(首刷看解析 2024年2月15日&#xff09;&#xff1a; class Solution { static bool cmp(const vector<int>& A, const vector<int>& B) {if(A[0] B[0]) return A[1] < B[1];return A[0] > B[0]; } public:vector<vector&…

HTML5+CSS3+JS小实例:锥形渐变彩虹按钮

实例:锥形渐变彩虹按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /…

(01)Hive的相关概念——架构、数据存储、读写文件机制

目录 一、架构及组件介绍 1.1 Hive整体架构 1.2 Hive组件 1.3 Hive数据模型&#xff08;Data Model&#xff09; 1.3.1 Databases 1.3.2 Tables 1.3.3 Partitions 1.3.4 Buckets 二、Hive读写文件机制 2.1 SerDe 作用 2.2 Hive读写文件流程 2.2.1 读取文件的过程 …

pytorch tensor维度变换

目录 1. view/reshape2. squeeze/unsqueeze3. expand 扩展4. repeat5 .t转置6. transpose7. permute 1. view/reshape view(*shape) → Tensor 作用&#xff1a;类似于reshape&#xff0c;将tensor转换为指定的shape&#xff0c;原始的data不改变。返回的tensor与原始的tensor…

P1010 [NOIP1998 普及组] 幂次方题解

题目 任何一个正整数都可以用2的幂次方表示。例如137。 同时约定次方用括号来表示&#xff0c;即ab可表示为a(b)。 由此可知&#xff0c;137可表示为2(7)2(3)2(0)&#xff0c;进一步&#xff1a;72 ( 用2表示)&#xff0c;并且32。 所以137可表示为2(2(2)22(0))2(22(0))2(0…

算法沉淀——队列+宽度优先搜索(BFS)(leetcode真题剖析)

算法沉淀——队列宽度优先搜索&#xff08;BFS&#xff09; 01.N 叉树的层序遍历02.二叉树的锯齿形层序遍历03.二叉树最大宽度04.在每个树行中找最大值 队列 宽度优先搜索算法&#xff08;Queue BFS&#xff09;是一种常用于图的遍历的算法&#xff0c;特别适用于求解最短路径…

【AI视野·今日CV 计算机视觉论文速览 第298期】Fri, 26 Jan 2024

AI视野今日CS.CV 计算机视觉论文速览 Fri, 26 Jan 2024 Totally 71 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Multimodal Pathway: Improve Transformers with Irrelevant Data from Other Modalities Authors Yiyuan Zhang, Xiaohan …

学习笔记19:牛客寒假训练营(DFHJK)

D 数组长度为2*1e5 ,我们知道如果超过30个非&#xff08;-1&#xff0c;1&#xff09;的数字相乘一定是大于查询的值域的 所以如果超过60&#xff08;30*2&#xff09;个数字&#xff0c;那么一定不能构成查询的数&#xff0c;而如果小于60个则可以暴力预处理一下&#xff0c…

OpenSource - 一站式自动化运维及自动化部署平台

文章目录 orion-ops 是什么重构特性快速开始技术栈功能预览添砖加瓦License orion-ops 是什么 orion-ops 一站式自动化运维及自动化部署平台, 使用多环境的概念, 提供了机器管理、机器监控报警、Web终端、WebSftp、机器批量执行、机器批量上传、在线查看日志、定时调度任务、应…

php基础学习之函数

基本概念 是一种语法结构&#xff0c;将实现某一个功能的代码块封装到一个结构中&#xff0c;从而实现代码的重复利用 php函数的定义语法 &#xff08;与C/Java很类似&#xff0c;区别在于没有数据类型&#xff0c;因为php是弱类型语言&#xff09; function 函数名(参数){ //…