Go开发 入门以VSCode为例

news2025/2/22 11:04:38

一、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

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

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

相关文章

33. 【Linux教程】Linux 用户组

前面小节介绍了 Linux 用户相关的增删改查&#xff0c;本小节介绍 Linux 用户组&#xff0c;Linux 系统中采取了一种安全机制&#xff08;即用户组&#xff09;&#xff0c;用户组可以允许多个 Linux 用户共享同一种权限。 1. 用户组介绍 Linux 是多任务多用户的操作系统&…

Android Studio level过滤查看各个等级的日志

Android Studio level过滤查看各个等级的日志 旧版as可以在下方的日志输出框选择debug、info&#xff0c;warn、error日志&#xff0c;新版的需要通过在过滤框手动/联想输入 level:xxx&#xff0c;过滤相应等级的日志&#xff0c;如图&#xff1a; android studio/idea返回/前进…

价格战打响!阿里云服务器和腾讯云服务器价格对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器62元一年&#xff0c;2核2G3M、2核4G、4核8G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配置价格表…

Unity 使用脚本获取组件,代码生成预制体

代码获取组件 using System; using System.Collections; using System.Collections.Generic; using Unity.VisualScripting; using UnityEngine;// 必须要继承 MonoBehaviour 才是一个组件 // 类名必要与文件名一致public class c1 : MonoBehaviour {// 使用 public 初始变量时…

永磁同步电机无感FOC(龙伯格观测器)算法技术总结-实战篇

文章目录 1、ST龙伯格算法分析&#xff08;定点数&#xff09;1.1 符号说明1.2 最大感应电动势计算1.3 系数计算1.4 龙伯格观测器计算1.5 锁相环计算1.6 观测器增益计算1.7 锁相环PI计算&#xff08;ST&#xff09;1.8 平均速度的用意 2、启动策略2.1 V/F压频比控制2.2 I/F压频…

Redis---持久化

Redis是内存数据库&#xff0c;是把数据存储在内存中的&#xff0c;但是内存中的数据不是持久的&#xff0c;如果想要做到持久&#xff0c;那么就需要让redis将数据存储到硬盘上。 Redis持久化有两种策略&#xff1a; RDB > Redis DataBase RDB机制采取的是定期备份AOF …

Kaggle 竞赛入门

打比赛不用写算法源码&#xff0c;应用的时候不用自己写。学习的时候可以自己写。 Kaggle 竞赛入门 认识 Kaggle 平台Kaggle竞赛知识前提结构化数据前提图像数据文本数据 Kaggle竞赛套路一个赛题的完整流程 认识 Kaggle 平台 Kaggle 官网 主页&#xff0c;比赛&#xff08;数据…

Linux系统Docker部署Nexus Maven并实现远程访问本地管理界面

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具&#xff0c;用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关&#xff0c;可…

计算机网络原理--传输层

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 TCP/IP五层&#xff08;或四层&#xff09;模型 传输层 TCP和UDP的区别 UDP协议 校验和 如何…

配置前端项目到 github-pages

Quickstart for GitHub Pages - GitHub Docs

腾讯云优惠:2024云服务器租用价格表,买前必看

一张表看懂腾讯云服务器租用优惠价格表&#xff0c;一目了然&#xff0c;腾讯云服务器分为轻量应用服务器和云服务器CVM&#xff0c;CPU内存配置从2核2G、2核4G、4核8G、8核16G、4核16G、8核32G、16核32G、16核64等配置可选&#xff0c;公网带宽1M、3M、5M、12M、18M、22M、28M…

LINUX基础培训二十五之shell表达式与运算

一、条件表达式 条件表达式是用于判断条件是否满足的逻辑表达式&#xff0c;当条件为真&#xff0c;返回0&#xff0c;否则返回1。 常用语法&#xff1a; 1、test 测试表达式 2、[ 测试表达式 ] #两边需要有空格 3、[[ 测试表达式 ]] 4、(( 测试表达式 )) 第一种和第二种是等…

鸿蒙这么大声势,为何迟迟看不见岗位?最新数据来了

对于鸿蒙生态建设而言&#xff0c;2024年可谓至关重要&#xff0c;而生态建设的前提&#xff0c;就是要有足够的开发人才。与之对应的&#xff0c;今年春招市场上与鸿蒙相关岗位和人才旺盛的热度&#xff0c;一方面反应了鸿蒙生态的逐渐壮大&#xff0c;另一方面也让人们对鸿蒙…

Tomcat源码解析(二): Bootstrap和Catalina

Tomcat源码系列文章 Tomcat源码解析(一)&#xff1a; Tomcat整体架构 Tomcat源码解析(二)&#xff1a; Bootstrap和Catalina 目录 一、基础组件1、Lifecycle生命周期顶级接口2、组件的默认实现 二、启动类Bootstrap1、main2、init3、load与start 三、加载Catalina1、load2、s…

2024腾讯云优惠券免费领取_代金券查询和使用方法

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

工厂模式 详解 设计模式

工厂模式 其主要目的是封装对象的创建过程&#xff0c;使客户端代码和具体的对象实现解耦。这样子就不用每次都new对象&#xff0c;更换对象的话&#xff0c;所有new对象的地方也要修改&#xff0c;违背了开闭原则&#xff08;对扩展开放&#xff0c;对修改关闭&#xff09;。…

spring6学习笔记

1.环境准备 1.idea建立一个空项目&#xff0c;jdk要求是17 2.Maven配置&#xff08;和mybatis里一样&#xff09; 3.新建一个模块 2.ocp原则 3.依赖倒置原则&#xff08;DIP&#xff09; 什么是依赖倒置原则? 1.面向接口编程&#xff0c;面向抽象编程&#xff0c;不要面向…

Windows安装VNC连接工具并结合cpolar实现远程内网Ubuntu系统桌面

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

回溯【基础算法精讲 14】

视频地址 : 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 基本概念 1 . 例子 例如从abc和def(n 2)中各选出一个组成新的字符串? 如果n很大 , 这个时候for循环的表达能力有限 ; 2 . 原问题 和 子问题 3 . 增量构造答案 这个增量构造答案的过程就是回溯…

java之Bean对象

1. 什么是Bean&#xff1f; Bean被实例化的&#xff0c;是被Spring框架所管理的Java对象。 Spring容器会自动完成Bean的实例化。将所创建的的Bean自动注入到Ioc容器中以供调用。 spring框架中 IOC容器中管理的对象就是Bean对象 2. 第三方bean Bean 因为第三方bean&#xff0…