Go语言基础系列-环境配置和 Hello world

简介:

Go语言基础系列-环境配置和 Hello world
前面几周陆陆续续写了一些后端技术的文章,包括数据库、微服务、内存管理等等,我比较倾向于成体系的学习,所以数据库和微服务还有后续系列文章补充。

最近工作上比较多的 Golang 编程,现在很多互联网公司都在转向 Golang 开发,所以打算写一写有关 Go 语言学习的系列文章,目标是从 Go 基础到进阶输出一系列文章,沉淀下这些知识同时也给大家做参考,力求做到通俗易懂,即使你是 Golang 小白也能看懂,如果你是老手也能温故知新。

本文将要和你分享 linux 下安装 Golang 环境,并且讲解如何通过配置 VSCode 远程开发调试 Golang 程序。

下载源码
你可以用系统自带的包管理工具比如 yum 或 apt-get 来安装Golang开发环境。不过,为了通用性,我选择通过源码的方式来安装和讲解,在官网下载源码,下载地址 https://golang.org/dl/

手动安装
解压安装
我这里下载下来的源码包 go1.14.2.linux-amd64.tar.gz 放到远程 Linux 服务器目录下。执行以下命令安装到 /usr/local 目录。

tar -zxvf -C /usr/local/ go1.14.2.linux-amd64.tar.gz
创建工作空间
工作空间是你Go项目的「工作目录」,挑选一个合适目录,执行下面操作:

mkdir GoPath
mkdir -p GoPath/src
mkdir -p GoPath/bin
mkdir -p GoPath/pkg
三个目录含义:

src: 源码路径(例如:.go、.c、.h、.s 等)
pkg: 编译包时,生成的.a文件存放路径
bin: 编译生成的可执行文件路径
配置环境变量
安装过程中有这么几个环境变量需要配置,先来了解一下:

GOROOT:Go的安装路径,也就是前面我们解压到的目录 /usr/local/go。

GOBIN:Go项目的二进制文件存放目录。

GOPATH:Go的工作空间。前面有介绍的工作空间目录。

在 /etc/profile 文件追加以下内容完成设置。

export GOROOT=/usr/local/go
export GOPATH=/yourpath/GoPath # 设置你自己的GoPath路径
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin # 加入到PATH环境变量
export PATH=$PATH:$GOPATH/bin

source /etc/profile #立即生效

验证安装

go version #检查版本

go version go1.14.2 linux/amd64 # 输出版本号

如果看到版本信息就代表安装成功了!

远程开发
上面我们在 Linux 环境下安装好了 Golang 开发环境,但我不想每次打开终端登录服务器编写调试程序,怎么才能在本地PC开发调试Golang程序呢?

看过我上一篇Vscode远程开发的小伙伴应该能想到方法,我们就要用Vscode搭建Golang远程开发环境。具体的远程开发配置可以查看我的另一篇文章。

Golang开发插件
首先安装官方推荐的 Go 开发插件,如下,点他安装。

接着还会出现如下的提示,是因为缺少其他 Go 开发相关插件,点 install all 全都装上就行。

Hello World
编程界有个惯例,什么语言开始学习都是从 Hello World 开始。现在,我们就用 Golang 编写第一个 HelloWorld 程序吧。

上代码:

package main // 所有Go程序从main包开始运行

import "fmt" // 导入fmt包

func main() {

fmt.Print("hello world", " i am ready to go :)\n")
fmt.Println("hello world", "i am ready to go :)")

}
格式化 包
fmt 实现了类似 C++/C 语言的格式IO库功能。

Print 和 Println 都可用于打印输出,但是功能略有不同。可以看到我在Print 函数中,对后一个字符串加了空格和换行符,这样两个打印出来的结果是相同的。

Print
func Print(a ...interface{}) (n int, err error)
Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格。返回写入的字节数和遇到的任何错误。

Println
func Println(a ...interface{}) (n int, err error)
Println采用默认格式将其参数格式化并写入标准输出。总是会在相邻参数的输出之间添加空格并在输出结束后添加换行符。返回写入的字节数和遇到的任何错误。

调试
终端调试
在终端命令行源码所在目录输入go run 运行程序。

go run HelloWorld.go

//输出
hello world i am ready to go :)
hello world i am ready to go :)
也可以先编译go build 得到可执行文件后再运行。

go build HelloWorld.go

ls

HelloWorld HelloWorld.go

./HelloWorld

hello world i am ready to go :)
hello world i am ready to go :)
Vscode调试
按F5启动调试,编辑与调试控制台输出如下:

命令行参数获取
命令行参数可以通过os 包的 Args 函数获取,代码如下:

package main

import (

"fmt"
"os"
"strconv"

)

func main() {

// 命令行参数获取,os.Args第一个参数是程序自身
fmt.Println(os.Args)
for idx, args := range os.Args {
    fmt.Println("参数"+strconv.Itoa(idx)+":", args)
}

}
终端设置
以下是带参数argv1 argv2 运行golang程序和输出。

go run basic.go argv1 argv2

输出

[/tmp/go-build441686724/b001/exe/basic argv1 argv2]
参数0: /tmp/go-build441686724/b001/exe/basic
参数1: argv1
参数2: argv2
VSCode设置
launch.json文件的 args 属性配置可以设置程序启动调试的参数。

设置之后,按F5 启动调试,就会在调试控制台输出配置的参数。

环境变量获取
命令行参数可以通过os 包的 Getenv 函数获取,代码如下:

package main

import (

"fmt"
"os"

)

func main() {

// 获取环境变量
fmt.Println(os.Getenv("type"), os.Getenv("name"), os.Getenv("GOROOT"))

}

VSCode设置环境变量
launch.json 文件的 args 属性配置可以设置 VSCode 调试的 Golang 程序环境变量。

设置的格式是:name:vaule 形式,注意都是字符串。

终端设置环境变量
终端的环境变量设置就是可以用 Linux 的 export 命令设置,之后就可以用 os.Getenv 函数读取。

比如我们最初设置 GOROOT 环境变量的命令

export GOROOT=/usr/local/go

就可以用 os.Getenv("GOROOT") 读取,比较简单,这里就不多说了。

总结
现在,你有了一个可以远程开发调试 Golang 的环境,赶紧去写个 hello world 体验一下吧!今天的分享就到这,下一篇文章讲解基础语法。

老规矩,感谢各位的阅读,文章的目的是分享对知识的理解,技术类文章我都会反复求证以求最大程度保证准确性,若文中出现明显纰漏也欢迎指出,我们一起在探讨中学习。今天的技术分享就到这里,我们下期再见。

Reference
设置GOPATH

Visual Studio Code变量参考

Golang 获取系统环境变量

os库获取命令行参数

原创不易,不想被白票,如果在我这有收获,就动动手指「点赞」和「转发」是对我持续创作的最大支持。

可以微信搜索公众号「 后端技术学堂 」回复「资料」「1024」有我给你准备的各种编程学习资料。文章每周持续更新,我们下期见!

作者:柠檬橙1024
出处:https://www.cnblogs.com/NanoDragon/

相关文章
|
7天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
26 2
|
6天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
15 2
|
6天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
19 2
|
10天前
|
程序员 Go
go语言中的控制结构
【11月更文挑战第3天】
86 58
|
9天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
6天前
|
Go
go语言中的 跳转语句
【11月更文挑战第4天】
14 4
|
6天前
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
20 1
|
10天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
10天前
|
Go 数据处理 调度
探索Go语言的并发模型:Goroutines与Channels的协同工作
在现代编程语言中,Go语言以其独特的并发模型脱颖而出。本文将深入探讨Go语言中的Goroutines和Channels,这两种机制如何协同工作以实现高效的并发处理。我们将通过实际代码示例,展示如何在Go程序中创建和管理Goroutines,以及如何使用Channels进行Goroutines之间的通信。此外,本文还将讨论在使用这些并发工具时可能遇到的常见问题及其解决方案,旨在为Go语言开发者提供一个全面的并发编程指南。
|
7天前
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。