Go开发 入门以VSCode为例

一、Go环境搭建

1.1 安装

进入Golang官网 https://go.dev,点击 Download

若无法打开网页可以使用国内的Go语言中文网 https://studygolang.com/dl 进入下载

在这里插入图片描述
找到合适的平台点击链接下载即可(这里以Windows距离)
在这里插入图片描述

下载完成后 Next Next 安装即可,没有需要配置的地方。
在这里插入图片描述
安装位置保持默认即可。
在这里插入图片描述

点击Finish完成安装
在这里插入图片描述
安装后Go将自动设置环境变量,打开 终端 或 CMD窗口验证 Go命令是否可用。

go version

若安装成功,将输出Go的版本以及操作系统和指令集。
在这里插入图片描述

配置国内镜像

Go官方的SDK已经很好用了,但是在开发过程我还可能使用到一些三方的包来加快我们的开发速度。

Go在1.11 以后采用Go Module 来实现包管理,原理是采用以源代码的方式从远程仓库中拉取代码,大部分的开源项目仓库都位于Github,由于众所周知的原因Github的方式往往较忙,这时候我们就可以配置国内镜像的方式来加速依赖包的下载。

这一点Go开发团队也已经考虑到,我们只需简单的命令即可完成配置操作。

目前常用的国内镜像有:

  • https://goproxy.cn/
  • https://goproxy.io/

这里以 https://goproxy.cn 举例
在这里插入图片描述

我们按照网址教程执行命令即可:

在这里插入图片描述

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

在这里插入图片描述

接下来你可以通过下面命令运行是否配置成功

go env

若配置成功可以在结果中找到 GOPROXY为您刚才设置的值。
在这里插入图片描述

二、VSCode 开发准备

这里以VSCode为例说明如何开发Go语言程序,在执行该操作前请确保已经安装Go开发环境,方式详见上一章节内容。

打开VSCode,点击左侧的 Extensions 进入插件仓库

在这里插入图片描述
在 Search 框内输入 Go 按下回车搜索。
在这里插入图片描述
这里我们选第一个插件 Go 该插件式由Go官方团队开发的,点击右侧的 install 安装插件

在这里插入图片描述
安装完成后,我们 将搜索框中的关键字删除 返回Extensions界面,点击 INSTALLED 展开列表,就可以看到刚才安装Go插件了。

在这里插入图片描述

三、第一个Go程序

3.1 准备

接下来我们来写第一个Go程序,helloworld!

创建一个文件夹,命名为 helloworld

在这里插入图片描述
将刚才创建的helloworld文件夹拖 拽入VSCode窗口,或者使用 File-> OpenFolder… 打开也可以。
在这里插入图片描述

解下来打开终端,点击左下角 叉和感叹号。

在这里插入图片描述
在弹出的窗口中点击 TERMINAL 进入终端(也可以使用快捷点 CTRL + ` 直接打开)。
在这里插入图片描述

接下来我们初始化Go的Module

go mod init helloworld

命令格式为 go mod init 模块名称,这里就是helloworld

执行后将在项目目录中创建一个名为go.mod的文件,并输出提示语句go: creating new go.mod: module helloworld
在这里插入图片描述

3.2 编写main函数

接下来就可以开始编写我们的第一个Go程序了

点击文件创建图标创建文件
在这里插入图片描述
创建一个名为 main.go 的文件,按下 回车 确认。

回车

写入以下内容:

package mainimport "fmt"func main() {fmt.Println("Hello, World!")
}

在

package main

同其他语言一样,Go语言也是从main函数开始执行,特别的main函数必需得在main 包下。

import  "fmt"

表示我们导入了一个名为fmt的包。

接下来就是输出Helloworld部分,就不在赘述。

3.3 编译运行

首先打开终端(CTRL + `)运行下面命令安装 dlv调试工具:

dlv 可以简单理解为认为是Go的GDB,用于调试Go程序。
注意: dlv仅需安装一次! 不需要在每次编译时安装!

go install -v github.com/go-delve/delve/cmd/dlv@latest

在这里插入图片描述
安装完成后我们可以使用下面方式验证

dlv version

安装成功将输出dlv的版本号
在这里插入图片描述

接下来就可以关闭终端了。

终于可以开始编译和运行Go程序了。

点击顶部导航栏中的 Run -> Run Without Debugging (也可直接按下 CTRL + F5)

在这里插入图片描述
稍等片刻后,程序编译完成后将弹出终端,并输出 “Hello,World!”,至此我们的第一个程序就运行成功了。

在这里插入图片描述

四、断点调试

当程序变得越来越复杂,我们往往需要对程序进行调试,断点调试是一种非常不错的方式。

例如我们有如下程序

package mainimport "fmt"func main() {total := 0for i := 0; i < 10; i++ {total += i}fmt.Println("Finished total:", total)
}

假设我们需要知道在一轮循环中 total的数值,我们就可以使用断点。

将鼠标移动至需要打断点的行的行号左侧,将会浮现红色点,点击左键 就可以打上断点。

在这里插入图片描述
点击后断点将以 红色高亮 显示
在这里插入图片描述
接下来我们就可以开始调试。

点击顶部导航栏中的 Run -> Start Debugging (也可直接按下 F5)

在这里插入图片描述
启动调试后将进入调试窗口,程序将运行并在一第一个断点处停住,行左侧的箭头表示当前执行的代码行,如下:

在这里插入图片描述

我们可以在 左侧的 WATCH窗口 处添加点击 + 添加一个观察变量,并 输入 total ,按下回车就就可以完成添加。
在这里插入图片描述
添加后我们就可以在窗口中观察变量的值。

在这里插入图片描述

如果我们需要继续执行程序,可以在调试控制窗口中的点击播放图标,也可以按下 F5。

如果你不需要特别观察某个变量可以查看 VARIABLES 中 Locals窗口,这个窗口中显示当前运行环境下的变量。

在这里插入图片描述
例如在运行至fmt.Println("Finished total:", total)行时,可以看到 Locals窗口中的 total 值为 45。

五、引入外部依赖

程序开发往往需要很多的外部三方开源库,他们提高了我们的开发速度,例如:

  • 数据库操作框架:https://gorm.io/index.html
  • Web服务器框架:https://gofiber.io/
  • 等

如何使用这些框架呢?

通常来说我们都是采用Go Module来实现三方库的管理。

以Web框架Fiber为例,运行下面命令就可以完成安装(详见https://docs.gofiber.io/):

go get github.com/gofiber/fiber/v2

其命令格式为:go get 仓库地址[@版本号]

安装后将会生成一个go.sum并且在go.mod中的require中加入很多依赖包,这里就是这个Go模块所需要的依赖包列表。

go.sum用于保存项目所使用所有依赖的详细版本和Hash,包依赖包的依赖。

在这里插入图片描述

接下来我们简单编写一个Fiber的demo

package mainimport ("log""github.com/gofiber/fiber/v2"
)func main() {app := fiber.New()app.Get("/", func(c *fiber.Ctx) error {return c.SendString("Hello, World!")})log.Fatal(app.Listen(":3000"))
}

接下来我们按下 CTRL + F5 运行程序,然后打开浏览器访问http://127.0.0.1:3000,就可以看到Helloworld页面!
在这里插入图片描述

六、编译为可执行程序

6.1 编译

当我们完成程序的开发后我们需要将我们的软件编译为可执行程序。

你可以这样做

在项目根目录(main函数所在目录)打开终端,运行下面语句进行编译

go build .

Go编译完成后将在当前目录下生成可执行程序,程序名称为当前目录的名称。

在这里插入图片描述
这样我们就完成了程序的编译。

6.2 交叉编译

当我们使用Windows x86环境开发,但是我们需要将程序部署到 Linux ARM64环境下时就需要使用Go的交叉编译功能。

Go提供环境变量(详见 https://go.dev/wiki/)

  • GOOS:GO操作系统(OS)用于设置目标编译的操作系统,如windows、linux、darwin(MacOS)
  • GOARCH:GO架构(Architecture)用于设置CPU所示使用的指令集,如amd64(x86)、arm64

Go (Golang) GOOS and GOARCH https://gist.github.com/asukakenji/f15ba7e588ac42795f421b48b8aede63

因此我们可以通过设置环境变量来选择编译的平台和指令集架构。

例如:编译Linux ARM64程序我们可以这样做

go env -w GOOS=linux
go env -w GOARCH=arm64
go build .

在这里插入图片描述

该种方式有个缺点每次都得将Go环境中的变量改回来,不然编译的程序将一直是指定的平台。

更加推荐的做法是使用临时的变量设置。

例如Windows CMD窗口可以这么做,首先得进入CMD不然SET无效。

CMDSET GOOS=linux
SET GOARCH=arm64
go build .

在这里插入图片描述
类Unix系统可以这样做(MacOS、Linux)

GOOS=windows GOARCH=amd64 go build .

参考文献

[1]. Golang . 2024 . https://go.dev
[2]. github . fiber . 2024. https://github.com/gofiber/fiber
[3]. github . vscode-go . 2024 . https://github.com/golang/vscode-go

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

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

相关文章

threejs 大场景下,对小模型进行贴图处理

接上篇小模型的删除☞threeJS 大模型中对小模型进行删除-CSDN博客 针对已有模型&#xff0c;根据数据状态进行贴图处理&#xff0c;例如&#xff1a;机房内电脑告警状态、电脑开关机状态下的不同状态贴图等 示例模型还是以丛林小屋为例&#xff1a;针对该模型中的树干进行贴图…

Android进阶之路 - RecyclerView停止滑动后Item自动居中(SnapHelper辅助类)

之前一直没注意 SnapHelper 辅助类的功能&#xff0c;去年的时候看到项目中仅通过俩行代码设置 RecyclerView 后就提升了用户体验&#xff0c;觉得还是很有必要了解一下&#xff0c;尝试过后才发现其 PagerSnapHelper、LinearSnapHelper 子类可以作用于不同场景&#xff0c;且听…

加速AI测试领域的进化,顶尖专家与名校教授强强联合,助你快速成为人工智能测试领域的精英

随着人工智能在各行各业的广泛应用&#xff0c;学习并掌握AI技术在软件测试中的应用变得至关重要。不仅能使你跟上行业的发展趋势&#xff0c;还能提升你的竞争力。而且&#xff0c;市场对具备AI测试技能的测试工程师的需求正日益增长&#xff0c;这使得掌握这些技能能够帮助你…

走进中国电车领跑企业“NI蔚来”丨共谋商业,共话ESG

期盼与热望将冬季的寒冷拂去&#xff0c;复旦大学-华盛顿大学EMBA项目迎来了一位新朋友——美国圣路易斯华盛顿大学奥林商学院的新任院长Michael Mazzeo教授。Mazzeo院长在上海进行了为期3天的访问。这里是 Mazzeo院长上任后国际访问交流之旅的第一站。      漫步校园&…

mysql锁的创建方式

在 MySQL 中,锁是用来控制多个用户对同一数据的访问。主要有两种类型的锁:表级锁和行级锁。MySQL 的锁定机制主要是通过 SQL 语句来实现的,而不是通过特定的锁定命令。下面是一些常见的锁相关的 SQL 操作方式:表级锁 MySQL 中,表级锁是最基本的锁策略,它会锁定整个表。一…

【Python_Zebra斑马打印机编程学习笔记(四)】ZPL的一些简单指令

ZPL的一些简单指令 ZPL的一些简单指令前言一、ZPL 介绍二、ZPL 语法解析1、标签开始、标签结束2、标签原点位置设置3、标签长度设置4、标签文本打印深度设置5、标签打印宽度设置6、标签方向设置7、标签元素定位8、标签绘制矩形9、标签输入字段10、标签设置字段字体、大小11、标…

Go 互斥锁的实现原理?

Go sync包提供了两种锁类型&#xff1a;互斥锁sync.Mutex 和 读写互斥锁sync.RWMutex&#xff0c;都属于悲观锁。 概念 Mutex是互斥锁&#xff0c;当一个 goroutine 获得了锁后&#xff0c;其他 goroutine 不能获取锁&#xff08;只能存在一个写者或读者&#xff0c;不能同时…

STM32 IIC协议基础概念

文章目录 前言一、IIC协议介绍二、IIC硬件框图和程序层次三、IIC协议1.IIC协议通信流程2.IIC的引脚为什么需要加入上拉电阻3.IIC的引脚为什么需要配置为开漏输出 四、STM32 IIC硬件结构总结 前言 本篇文章将带大家学习IIC通信协议的一些基础概念和使用。 一、IIC协议介绍 I2…

jsjiami.v7关于js加密运行环境的探索

浏览器环境、Node.js 环境和 vm2 环境之间存在一些区别&#xff0c;包括全局对象、核心模块和一些环境特定的 API。下面是一些区别的简要概述&#xff0c;以及一些代码示例来突显它们之间的不同。 1. 浏览器环境&#xff1a; 全局对象&#xff1a; 浏览器环境&#xff1a; 全…

数据结构·栈和队列

1. 栈 1.1 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一段称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守 后进先出 LIFO(Last In First Out)的原则&#xff0c;后进来的数…

YOLOv8 DeepSORT实现智能交通监控-改进yolo单目测距及速度测量-流量计数

YOLOv8 DeepSORT是一种基于目标检测和跟踪技术的智能交通监控系统。它基于YOLOv8&#xff0c;通过加入DeepSORT算法实现目标跟踪&#xff0c;同时还改进了YOLOv8的单目测距及速度测量技术和流量计数功能。 该系统可以通过摄像头或视频源实时捕获图像&#xff0c;并自动检测和跟…

web安全学习笔记【20】——信息打点(10)

信息打点-公众号服务&Github监控&供应链&网盘泄漏&证书图标邮箱资产 #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指纹…

【刷题】 Leetcode 1022.从根到叶的二进制数之和

刷题 1022.从根到叶的二进制数之和题目描述&#xff1a;思路一&#xff08;dfs深搜万能版&#xff09;思路二 &#xff08;栈迭代巧解版&#xff09;总结 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff…

SpringBoot 自定义注解实现操作日志记录

文章目录 前言正文一、项目结构介绍二、核心类2.1 核心注解2.1.1 CLog 日志注解2.1.2 ProcessorBean 处理器bean 2.2 切面类2.3 自定义线程池2.4 工具类2.4.1 管理者工具类 2.5 测试2.5.1 订单创建处理器2.5.2 订单管理者2.5.3 订单控制器2.5.4 测试报文2.5.5 测试结果 附录1、…

【Java题】调整奇数位于偶数之前(超简单版)

题目&#xff1a; 调整数组顺序使得奇数位于偶数之前。调整之后&#xff0c;不关心大小顺序。 如数组&#xff1a;[1,2,3,4,5,6,7,8,9] 调整后可能是&#xff1a;[1, 9,3,7,5, 6, 4, 8, 2] 代码&#xff1a; import java.util.Arrays;public class Main {public static voi…

将python程序打包为exe格式

1. 安装pyinstaller winr打开命令窗口 输入&#xff1a; pip install pyinstaller输入命令后会自动安装pyinstaller 2. 打包 进入你的代码所在位置&#xff0c;输入cmd 在弹出的窗口中输入 pyinstaller --onefile your_script.pyyour_script.py修改为你需要打包的程序名字 …

验证C++中 cout 输出情况的小程序

//这个小程序验证了C中cout输出char数组、char*指针变量、string对象、int数组、double类型的情况&#xff0c;并做了简单说明。具体代码及注释 #include<iostream> using namespace std; #include<string> #include<fstream> #include <iomanip> int…

ElasticSearch架构介绍及原理解析

ElasticSearch架构介绍及原理解析文章目录 一、Elasticsearch是什么&#xff1f;1.简介2.历史与发展3.有关概念1.cluster2.shards3.replicas4.recovery5.river6.gateway7.discovery.zen8.Transport 4.安装 二、ElasticSearch架构介绍及原理解析1.基本架构1.1 进程节点1.2 负载均…

系统运维-Linux配置C、C++、Go语言编译环境

C yum install gcc -y #安装gcc编译器 gcc --version #验证环境gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even f…

简述操作系统内存管理

这篇可是真枯涩啊&#xff0c;哈哈&#xff0c;老早在学操作系统的时候整理的文章&#xff0c;没加润色&#xff0c;单纯从个人网站迁移过来。 操作系统内存管理的目的是将线性物理地址用抽象的逻辑地址空间&#xff0c;从而保护物理地址。此外&#xff0c;可以独立地址空间&am…