当前位置: 首页 > news >正文

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

相关文章:

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

GO 项目工程管理&#xff08;Go Modules&#xff09; Go 1.11 版本开始&#xff0c;官方提供了 Go Modules 进行项目管理&#xff0c;Go 1.13开始&#xff0c;Go项目默认使用 Go Modules 进行项目管理。 使用 Go Modules的好处是不再需要依赖 GOPATH&#xff0c;可以在任意位…...

美容小程序:让预约更简单,服务更贴心

在当今繁忙的生活节奏中&#xff0c;美容预约常常令人感到繁琐和疲惫。为了解决这个问题&#xff0c;许多美容院和SPA中心已经开始采用美容小程序来简化预约流程&#xff0c;并提供更加贴心的服务。在这篇文章中&#xff0c;我们将引导您了解如何制作一个美容小程序&#xff0c…...

【递归】:原理、应用与案例解析 ,助你深入理解递归核心思想

递归 1.基础简介 递归在计算机科学中&#xff0c;递归是一种解决计算问题的方法&#xff0c;其中解决方案取决于同一类问题的更小子集 例如 递归遍历环形链表 基本情况&#xff08;Base Case&#xff09;&#xff1a;基本情况是递归函数中最简单的情况&#xff0c;它们通常是递…...

【 Maven 】花式玩法之多模块项目

目录 一、认识Maven多模块项目 二、maven如何定义项目的发布策略 2.1 版本管理 2.2 构建配置 2.3 部署和发布 2.4 依赖管理 2.5 发布流程 三、使用Jenkins持续集成Maven项目 四、总结 如果你有一个多模块项目&#xff0c;并且想将这些模块发布到不同的仓库或目标位置&…...

LeetCode 热题 100 Day01

哈希模块 哈希结构&#xff1a; 哈希结构&#xff0c;即hash table&#xff0c;哈希表|散列表结构。 图摘自《代码随想录》 哈希表本质上表示的元素和索引的一种映射关系。 若查找某个数组中第n个元素&#xff0c;有两种方法&#xff1a; 1.从头遍历&#xff0c;复杂度&#xf…...

[vscode]vue js部分结尾加分号

设置中寻找 semicolons确定在TypeScript的这个扩展中设置选项为insert...

友点CMS image_upload.php 文件上传漏洞复现

0x01 产品简介 友点CMS是一款高效且灵活的网站管理系统,它为用户提供了简单易用的界面和丰富的功能。无论是企业还是个人,都能通过友点CMS快速搭建出专业且美观的网站。该系统支持多种内容类型和自定义模板,方便用户按需调整。同时,它具备强大的SEO功能,能提升网站在搜索…...

C语言—指针(3)

嘿嘿嘿嘿&#xff0c;你看我像指针吗? 不会写&#xff0c;等我啥时候会写了再说吧&#xff0c;真的累了&#xff0c;倦了 1.面试题 1&#xff09;定义整形变量i&#xff1b; 2&#xff09;p为指向整形变量的指针变量&#xff1b; 3&#xff09;定…...

【八股文】面向对象基础

【八股文】面向对象基础 面向对象和面向过程的区别 面向过程把解决问题的过程拆成一个个方法&#xff0c;通过一个个方法的执行解决问题。面向对象会先抽象出对象&#xff0c;然后用对象执行方法的方式解决问题。 创建一个对象用什么运算符?对象实体与对象引用有何不同? …...

Day49 647 回文子串 516 最长回文子序列

647 回文子串 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 方法一&#xff1a;动态规划&#xff1a; 采用一个二维的dp数组&#xf…...

探秘GNU/Linux Shell:命令行的魔法世界

GNU/Linux的Shell是一种特殊的交互式工具&#xff0c;为用户提供了强大的控制和管理Linux系统的方式。在这个博客中&#xff0c;我们将深入了解Shell的基本概念、功能以及不同类型的Shell。 Shell的本质 Shell的核心是命令行提示符&#xff0c;它是用户与Linux系统进行交互的…...

基于STM32F407的coreJSON使用教程

目录 概述 工程建立 代码集成 函数介绍 使用示例 概述 coreJSON是FreeRTOS中的一个组件库&#xff0c;支持key查找的解析器&#xff0c;他只是一个解析器&#xff0c;不能生成json数据。同时严格执行 ECMA-404 JSON 标准。该库用 C 语言编写&#xff0c;设计符合 ISO C90…...

keepalived双主模式测试

文章目录 环境准备部署安装keepavlived配置启动测试模拟Nginx宕机重新启动问题分析 环境准备 测试一下keepalived的双主模式&#xff0c;所谓双主模式就是两个keepavlied节点各持有一个/组虚IP&#xff0c;默认情况下&#xff0c;二者互为主备&#xff0c;同时对外提供服务&am…...

微服务中的熔断、降级和限流

在现代微服务架构中,熔断、降级和限流是保障系统稳定性和可靠性的重要手段。本文将深入探讨这三种机制在微服务架构中的作用、原理以及实践方法。 1. 熔断(Circuit Breaker) 1.1 作用和原理 熔断器是一种可以在服务发生故障时快速中断请求的机制,防止故障蔓延到整个系统…...

2023年便宜的云服务器分享:最低26元4核16G

2024年阿里云服务器租用价格表更新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年、ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月、2核4G服…...

汽车零部件制造业MES系统解决方案

一、​汽车零部件行业现状 随着全球汽车产业不断升级&#xff0c;汽车零部件市场竞争日趋激烈&#xff0c;从上游的钢铁、塑料、橡胶等生产到下游的主机厂配套制造&#xff0c;均已成为全球各国汽车制造大佬战略目标调整的焦点&#xff0c;其意欲在汽车零部件行业快速开疆扩土&…...

区块链/加密币/敏感/特殊题材专供外媒发稿,英文多国语言海外新闻营销推广

【本篇由言同数字科技有限公司原创】敏感题材是海外媒体在报道过程中常遇到的难题&#xff0c;需要平衡新闻真实性、公正性与敏感性。本文将探讨海外媒体报道敏感题材所面临的挑战&#xff0c;并介绍如何抓住机遇提高报道质量。 第一部分&#xff1a;敏感题材报道的挑战 报道…...

初识Nginx

摘要&#xff1a;最近几个项目中的接口总是访问受限&#xff0c;需要后端同事配置Nginx代理&#xff0c;了解下Nginx后面自己配置。 Nginx 是一款高性能的开源 Web 服务器和反向代理服务器。它具有轻量级、高并发、低内存消耗等特点&#xff0c;常被用作静态资源服务、负载…...

Rust语言之多线程

文章目录 一、简介二、创建线程1.创建一个线程2.创建多个线程生成随机数尝试让程序睡一会儿引入多线程 三、线程返回值的处理1.每个线程处理一个独立的值2.多个线程处理一个值Arc&#xff08;原子引用计数&#xff09;Mutex&#xff08;互斥锁&#xff09;RwLock&#xff08;读…...

现有的通用模型中融入少量中文数据没有太大意义少量的数据就能影响整个大模型

相关链接&#xff1a;只修改一个关键参数&#xff0c;就会毁了整个百亿参数大模型&#xff1f; | 新程序员-CSDN博客 现象 1&#xff1a;mBERT 模型的跨语言迁移 现象 2&#xff1a;大语言模型同样存在显著的语言对齐 现象 3&#xff1a;知识与语言分离 现象 4&#xff1a;…...

Kandinsky-5.0-I2V-Lite-5s部署教程:Ubuntu 22.04 LTS环境完整安装与验证

Kandinsky-5.0-I2V-Lite-5s部署教程&#xff1a;Ubuntu 22.04 LTS环境完整安装与验证 1. 环境准备与快速部署 Kandinsky-5.0-I2V-Lite-5s是一款轻量级图生视频模型&#xff0c;能够将静态图片转换为5秒左右的短视频。在开始之前&#xff0c;请确保你的系统满足以下要求&#…...

WuliArt Qwen-Image Turbo高清图展示:1024×1024下4K显示器100%缩放无模糊

WuliArt Qwen-Image Turbo高清图展示&#xff1a;10241024下4K显示器100%缩放无模糊 提示&#xff1a;本文所有展示图片均为WuliArt Qwen-Image Turbo模型直接生成&#xff0c;未经任何后期处理 1. 项目概述&#xff1a;重新定义个人GPU文生图体验 WuliArt Qwen-Image Turbo是…...

OpenClaw任务链设计:千问3.5-35B-A3B-FP8复杂流程自动化

OpenClaw任务链设计&#xff1a;千问3.5-35B-A3B-FP8复杂流程自动化 1. 为什么需要任务链自动化 上周我遇到一个典型的工作场景&#xff1a;需要从20份PDF报告中提取关键数据&#xff0c;整理成Excel表格&#xff0c;再根据这些数据生成分析图表&#xff0c;最后通过邮件发送…...

VL53L1X_mbed驱动开发:嵌入式ToF测距实战指南

1. VL53L1X_mbed 库深度解析&#xff1a;面向嵌入式工程师的ToF激光测距驱动开发指南VL53L1X 是 STMicroelectronics 推出的第二代飞行时间&#xff08;Time-of-Flight, ToF&#xff09;激光测距传感器&#xff0c;采用 940nm 不可见红外 VCSEL 光源与单光子雪崩二极管&#xf…...

【Python 教程15】-Python和Web

正则表达式&#xff1a;快准狠的“文本手术刀” 在 Python 的世界里&#xff0c;正则表达式&#xff08;Regular Expression&#xff0c;简称 Regex&#xff09;就像一把锋利的“手术刀”&#xff0c;能让你在杂乱无章的文本中&#xff0c;精准地切割、匹配、提取出你想要的部分…...

【数据结构与算法】第24篇:哈夫曼树与哈夫曼编码

一、基本概念1.1 带权路径长度在二叉树中&#xff1a;路径长度&#xff1a;从一个节点到另一个节点经过的边数带权路径长度(WPL)&#xff1a;所有叶子节点的权重 路径长度 之和示例&#xff1a;text叶子节点&#xff1a;A(7), B(5), C(2), D(4)普通树&#xff1a;15/ \7 8/…...

氢能多能利用调度系统 -NSGA-II多目标优化,实现氢能-电能-交通多能耦合系统的24小时优化调度,包含电解制氢、可再生能源、储氢、掺氢燃气轮机、氢燃料电池和氢电动汽车等关键设备研究(Matlab)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

LPD8806驱动库详解:SPI控制16位PWM LED灯带的嵌入式实践

1. LPD8806驱动库技术解析&#xff1a;面向嵌入式系统的PWM LED控制器深度实践1.1 芯片定位与工程价值LPD8806是凌阳&#xff08;Sunplus&#xff09;推出的16位恒流LED驱动IC&#xff0c;专为高密度RGB LED灯带、像素点阵及舞台灯光系统设计。其核心价值在于以极低成本实现精确…...

嵌入式滚动平均滤波库:SimpleSmooth轻量级实现

1. 项目概述 SimpleSmooth 是一个专为嵌入式系统设计的轻量级滚动平均值计算库&#xff0c;其核心目标是为模拟信号采集&#xff08;如 ADC 读数&#xff09;提供低开销、无动态内存分配、零依赖的数字滤波能力。该库并非从零构建&#xff0c;而是对 Arduino 官方示例中经典平…...

AnimateDiff与Three.js结合:Web端3D文生视频实践

AnimateDiff与Three.js结合&#xff1a;Web端3D文生视频实践 最近在折腾AI视频生成&#xff0c;发现一个挺有意思的事儿&#xff1a;AnimateDiff这类文生视频模型效果越来越好&#xff0c;但生成的东西大多还是“平面”的&#xff0c;想把它放到网页里&#xff0c;特别是做成有…...