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 main

import "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 main

import "fmt"

func main() {
	total := 0
	for 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 main

import (
	"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)用于设置目标编译的操作系统,如windowslinuxdarwin(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无效。

CMD

SET 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

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

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

相关文章

rabbitmq重编辑版本

消息队列RabbitMQ详细使用 文章目录 消息队列RabbitMQ详细使用MQ 的相关概念什么是MQ为什么要用MQMQ 的分类MQ 的选择 RabbitMQRabbitMQ 的概念四大核心概念各个名词介绍安装RabbitMQWeb管理界面及授权操作Docker 安装Hello world简单示例 Work Queues轮训分发消息消息应答自动…

【数据分享】2001-2022年我国省市县镇四级的逐日平均降水量数据(免费获取\excel\shp格式)

降水数据是我们在各项研究中最常用的气象指标之一&#xff01;之前我们给大家分享过来源于国家青藏高原科学数据中心发布的1961—2022年全国范围的逐日降水栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是2001-2002年我国省市县镇四个…

基础!!!吴恩达deeplearning.ai:卷积层

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 回顾——密集层 Dense Layer卷积层 Convolutional Neural Network定义优势具体说明心电图卷积层搭建 到目前为止&#xff0c;你使用的所有神经网络层都是密集层类型&#xff0c;这…

瑞_23种设计模式_组合模式

文章目录 1 组合模式&#xff08;Composite Pattern&#xff09;1.1 介绍1.2 概述1.3 组合模式的结构1.4 组合模式的分类1.5 组合模式的优点1.6 组合模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 &#x1f64a; 前言&#xff1a;本文章为瑞_系列…

AI大模型-启航

文章目录 什么是大模型&#xff1f;&#xff08;大体现在参数量巨大&#xff09;大模型将会改变那些行业&#xff08;大模型有哪些作用&#xff1f;&#xff09;如何搞数据训练模型&#xff1f;LangChain带来的技术变革LangChain架构 什么是大模型&#xff1f;&#xff08;大体…

网络编程作业day2

1.将TPC和UDP通信模型各敲两遍 &#xff08;1&#xff09;TPC通信模型&#xff1a; 服务器代码&#xff1a; #include <myhead.h> #define SERVER_IP "192.168.125.136" #define SERVER_PORT 1314 int main(int argc, const char *argv[]) {//1、创建用于监…

信号系统之滤波器比较

比较 1&#xff1a;模拟与数字滤波器 大多数数字信号源自模拟电子设备。**如果需要对信号进行滤波&#xff0c;是在数字化之前使用模拟滤波器&#xff0c;还是在数字化后使用数字滤波器更好&#xff1f;**将通过两个对比来回答问题。 目标是提供 1 kHz的低通滤波器。模拟端是…

八股文打卡day24——数据库(1)

面试题&#xff1a;左连接和右连接的区别&#xff1f; 我的回答&#xff1a; 左连接的SQL语句是&#xff1a;左表 left join 右表 on 连接条件&#xff0c;表示以左表为基础&#xff0c;将左表的的所有记录与右表进行连接。即使右表中没有与左表匹配的记录&#xff0c;左连接…

ROS 2基础概念#2:节点(Node)| ROS 2学习笔记

ROS 2节点简介 节点是执行计算的进程。节点组合在一起形成一个图&#xff08;graph&#xff09;&#xff0c;并使用主题&#xff08;topic&#xff09;、服务&#xff08;service&#xff09;和参数服务器&#xff08;paramter server&#xff09;相互通信。这些节点旨在以细粒…

力扣-H指数

问题 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一名科研人员的 h 指数 是指他&#xff08;她&#xff09…

Tomcat服务部署

1、安装jdk、设置环境变量并测试 第一步&#xff1a;安装jdk 在部署 Tomcat 之前必须安装好 jdk&#xff0c;因为 jdk 是 Tomcat 运行的必要环境。 1. #关闭防火墙 systemctl stop firewalld systemctl disable firewalld setenforce 02. #将安装 Tomcat 所需软件包传到/opt…

数据结构与算法 - 数组与二分查找 + Leetcode典型题

1. 什么是数组 数组是存放在连续内存空间上的相同类型数据的集合。 数组可以方便的通过下标索引的方式获取到下标下对应的数据。 C中二维数组在地址空间上也是连续的。 需注意&#xff1a; 数组的下标从0开始。数组内存空间的地址是连续的。数组的元素是不能删的&#xff0c…

c#打印BarTend标签提示:具名数据源没有cuckoo*具名数据(解决)

c#打印BarTend标签提示&#xff1a;具名数据源没有cuckoo*具名数据&#xff08;解决&#xff09; 今天咕咕更新打印模板的时候遇到的问题&#xff0c;就是在模版中配置了字段名&#xff0c;但是启动c#应用&#xff0c;后端发送json数据打印的时候c#报错提示&#xff0c;没有在…

ywtool ssh命令

一.SSH免密登陆介绍 这个功能就是通过脚本对本机器和其他机器配置SSH密钥&#xff0c;并将自己的密钥放到其他机器上(确保运维的机器要安全)&#xff0c;这样可以不用输入密码就能登陆&#xff1b;通过scp拷贝文件也不需要输入密码。此功能也可以设置机器root用户只用密钥登陆…

【办公类-22-07】周计划系列(3-2)“信息窗+主题知识(优化)” (2024年调整版本)

作品展示&#xff1a; 背景需求 前文对“2023年2月”的一套信息窗主题知识的文件系列&#xff0c;进行第一次的提取。获得基础模板。 【办公类-22-07】周计划系列&#xff08;3-1&#xff09;“信息窗主题知识&#xff08;提取&#xff09;” &#xff08;2024年调整版本&…

前端-BOM和DOM的区别和用法

首先上图&#xff0c;这是整个JAVASCRIPTD 结构&#xff0c;因此我们可以得出一个关系等式 JavaScript ECMAscript BOM DOMECMAscript&#xff1a; 是一种由 ECMA国际&#xff08;前身为欧洲计算机制造商协会&#xff09;通过 ECMA-262 标准化的脚本程序设计语言&#xff0…

【笔记】深度学习入门:基于Python的理论与实现(五)

卷积神经网络 卷积神经网络(Convolutional Neural Network&#xff0c;CNN) 整体结构 CNN 中新出现了卷积层(Convolution 层)和池化层(Pooling 层)&#xff0c;之前介绍的神经网络中&#xff0c;相邻层的所有神经元之间都有连接&#xff0c;这称为全 连接(fully-connected) …

GPT-SoVITS音色克隆-模型训练步骤

GPT-SoVITS音色克隆-模型训练步骤 GPT-SoVITS模型源码一个简单的TTS后端项目 基于模型部署和训练教程&#xff0c;语雀 模型部署和训练教程 启动模型训练的主页面 1. 切到模型路径 /psycheEpic/GPT-SoVITS进入Python虚拟环境&#xff0c;并挂起执行python脚本 conda activ…

fastAdmin表格列表的功能

更多文章&#xff0c;请关注&#xff1a;fastAdmin后台功能详解 | 夜空中最亮的星 FastAdmin是一款基于ThinkPHP5Bootstrap的极速后台开发框架。优点见开发文档 介绍 - FastAdmin框架文档 - FastAdmin开发文档 在这里上传几张优秀的快速入门图: 一张图解析FastAdmin中的表格列…

【python】Python Turtle绘制流星雨动画效果【附源码】

在这篇技术博客中&#xff0c;我们将学习如何使用 Python 的 Turtle 模块绘制一个流星雨的动画效果。通过简单的代码实现&#xff0c;我们可以在画布上展现出流星闪耀的场景&#xff0c;为视觉带来一丝神秘与美感。 一、效果图&#xff1a; 二、准备工作 &#xff08;1)、导入…