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

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

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

相关文章

js 对象总结

文章目录 1、创建对象的6种方式总结一、new 操作符 Object 创建对象二、字面式创建对象 2、js 如何判断对象是否为空3、获取对象长度4、js 遍历对象的 5 种方法1、for … in2、Object.keys(obj)3、Object.values(obj)4、Object.getOwnPropertyNames(obj)5、使用Reflect.ownKey…

C# OpenVINO Nail Seg 指甲分割 指甲检测

目录 效果 模型信息 项目 代码 数据集 下载 C# OpenVINO Nail Seg 指甲分割 指甲检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-29T16:41:28.273760 author&#xff1a;Ultralytics task&#xff1a;segment version&#…

VirtualBox虚拟机安装 Linux 系统

要想学习各种计算机技术&#xff0c;自然离不开Linux系统。并且目前大多数生产系统都是安装在Linux系统上。常用的Linux系统有 Redhat&#xff0c;Centos&#xff0c;OracleLinux 三种。 三者的区别简单说明如下&#xff1a; Red Hat Enterprise Linux (RHEL): RHEL 是由美国…

InnoDB锁介绍

本文主要介绍MySQL InnoDB引擎中的各种锁策略和锁类别&#xff0c;并针对记录锁做演示以便于理解。 以下内容适用于MySQL 8.0版本。 读写锁 处理并发读/写访问的系统通常实现一个由两种锁类型组成的锁系统。这两种锁通常被称为共享锁(shared lock)和排他锁(exclusive lock)&…

如何在Window系统部署BUG管理软件并结合内网穿透实现远程管理本地BUG

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

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

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

Linux零基础快速入门

Linux的诞生 Linux创始人:林纳斯 托瓦兹 Linux 诞生于1991年&#xff0c;作者上大学期间 因为创始人在上大学期间经常需要浏览新闻和处理邮件&#xff0c;发现现有的操作系统不好用,于是他决心自己写一个保护模式下的操作系统&#xff0c;这就是Linux的原型&#xff0c;当时他…

方格分割644--2017蓝桥杯

1.用dfs解决&#xff0c;首先这题的方格图形就很像一个走迷宫的类型&#xff0c;迷宫想到dfs&#xff0c;最中心点视为起点&#xff0c;起点有两个小人在这个方格里面对称行动&#xff0c;直到走出迷宫&#xff08;一个人走出来了另一个人就也走出来了&#xff0c;而走过的点会…

【力扣白嫖日记】550.游戏玩法分析IV

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 550.游戏玩法分析IV 表&#xff1a;Activity 列名类型player_idintdevice_idintevent_datedategames_played…

Python 从文件中读取JSON 数据并解析转存

文章目录 文章开篇Json简介Json数据类型Json硬性规则Json数据转化网站Json和Dict类型转换json模块的使用Python数据和Json数据的类型映射json.dumps1.字典数据中含有**存在中文**2.json数据通过缩进符**美观输出**3.对Python数据类型中键进行**排序输出**4.json数据**分隔符的控…

Python调用ChatGPT API使用国内中转key 修改接口教程

大家好&#xff0c;我是淘小白~ 有的客户使用4.0的apikey ,直接使用官方直连的apikey消费很高&#xff0c;有一位客户一个月要消费2万&#xff0c;想使用4.0中转的apikey&#xff0c;使用中转的apikey 需要修改官方的openai库&#xff0c;下面具体说下。 1、首先确保安装的op…

代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、 501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 题目链接/文章讲解&#xff1a; 代码随想录 视频讲解&#xff1a;二叉搜索树中&#xff0c;需要掌握如何双指针遍历&#xff01;| LeetCode&#xff1a;530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili 1.方法1 1.1分析及思路 了解到差值最小的数…