概述
Go语言是由 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go语言的设计目标是将静态语言的安全性和性能与动态语言的易用性相结合。Go语言在语言层面提供了对协程的支持,特别适合编写高并发的项目。随着使用Go语言开发的Docker、Kubernetes、Isito等容器化技术的兴起,Go语言越来越被广大开发者所青睐,一度从TIOBE编程语言排行榜的榜上无名打入到了第8名,而且上升势头还正盛,而且Go的生态也越来越庞大,所以现在学习Go语言,是一个不错的选择,以后的工作岗位需求也会越来越多。
安装Go开发环境
在ubuntu、debian、raspberry中安装go
jagitch@5509e97c27ae:~$ ARCH=$(dpkg --print-architecture)jagitch@5509e97c27ae:~$ GO_VERSION="go1.22.3"jagitch@5509e97c27ae:~$ wget https://go.dev/dl/${GO_VERSION}.linux-$ARCH.tar.gz \ && sudo rm -rf /usr/local/go \ && sudo tar -C /usr/local -xzf ${GO_VERSION}.linux-$ARCH.tar.gz \ && export PATH=$PATH:/usr/local/go/bin \ && echo 'export PATH=$PATH:/usr/local/go/bin' >> .bashrc \ && rm ${GO_VERSION}.linux-$ARCH.tar.gz
在windows中安装go
去官网下载安装包安装即可 https://go.dev/dl/
在macOS中安装go
去官网下载安装包
https://go.dev/dl/go1.22.3.darwin-arm64.pkg
https://go.dev/dl/go1.22.3.darwin-amd64.pkg
设置GoProxy为国内代理服务器,加快Go包的下载速度
go env -w GOPROXY="https://goproxy.cn,direct"
聊聊Go的模块化
目前的Go语言,程序是组织在一个Go Module中的(入门课程先忽略过时的GOPATH组织代码的方式),所以创建项目的时候,首先要初始化一个模块。一个模块中可以创建Package
(包),包是由同一个目录下多个文件组成的,包中可以定义变量、常量、函数、结构体、接口、类型以及导入别的包,这种模块化的方式易于维护和重用。
学习Go语言的第一个程序Hello World
我们从一个Hello World程序开始,来讲解Go项目的创建、编码以及运行、发布。开发环境我使用的是web版的vscode环境(基于Ubuntu系统和go1.22.2),它可以让我们使用手机、平板就可以浏览代码且可以进行开发调试,保存书签就可以快速打开项目进行开发,且此开发环境可以秒级部署、秒级启动,并且可以在Windows中使用Ubuntu环境(比WSL更轻量高效),如需搭建,请参考《搭建Golang在线开发环境(随时随地码代码)》
打开web版的vscode,浏览器访问http://127.0.0.1:8080/?folder=/home/coder/workspace
如果vscode还没安装Go扩展程序请安装
安装完Go扩展后,还需打开vscode的命令面板,执行Go:Install/Update Tools
安装Go的工具链
在终端输入命令创建项目文件夹,使用Linux系统后就习惯使用命令(比使用鼠标操作没直接输入命令快)
jagitch@4d7a018f5ea9:workspace$ mkdir go-hellojagitch@4d7a018f5ea9:workspace$ cd go-hellojagitch@4d7a018f5ea9:go-hello$
创建Go Module(一定要创建,否则启动不了项目),会新建一个go.mod
文件
jagitch@4d7a018f5ea9:go-hello$ go mod init go-hellogo: creating new go.mod: module go-hellojagitch@4d7a018f5ea9:go-hello$ lsgo.mod
创建main.go文件
jagitch@4d7a018f5ea9:go-hello$ touch main.go
在main.go文件中输入如下代码
package mainimport "fmt"func main() { fmt.Println("Hello World")}
package main声明了一个main包,每一个go文件都必须声明属于哪一个包,且同一个目录中的多个文件只能声明为同一个包,但是测试包(包名以_test
结尾)除外
import "fmt"
是导入语句,导入了go语言库中的fmt包,一个包可以导入到个包来调用那些包的功能
func main() {}
定义了一个函数,函数的作用是将同一个功能的代码封装到一起以供需要此功能的地方进行函数调用,每一个可执行的Go程序都需要一个main包中定义一个main函数,这是可执行程序的入口(严格来说应该是我们自己写的代码的运行入口,Go程序的真正入口在runtime中)。
main函数的大括号中称为函数体,函数体中就是实现函数功能的语句的集合,语句的数量没有限制,可以没有语句,可以只有一条,也可以有很多条,此main函数,就只有一条语句fmt.Println("Hello World")
,该语句调用fmt包中的Println函数,"Hello World"
叫做字符串(有字符组成的串),字符串中可以有没有字符,叫空字符串""
,"Hello World"当作函数的参数传递给fmt.Println
函数,作用是把这个字符串输出到标准输出(这里会显示在终端)并换行。
运行
jagitch@4d7a018f5ea9:go-hello$ go run main.goHello Worldjagitch@4d7a018f5ea9:go-hello$
编译,Go编译器可以直接将源码编译成目标架构的二进制可执行程序
jagitch@4d7a018f5ea9:go-hello$ go build main.gojagitch@4d7a018f5ea9:go-hello$ lsgo.mod main main.go main_test.gojagitch@4d7a018f5ea9:go-hello$ ./mainHello World
Go编译器还支持交叉编译(在宿主机中编译其他架构的二进制程序),例如我们在ubuntu中将程序编译为windows系统下的可执行程序
jagitch@4d7a018f5ea9:go-hello$ GOARCH=amd64 GOOS=windows go build main.gojagitch@4d7a018f5ea9:go-hello$ lsgo.mod main main.exe main.go main_test.go
可以发现,在Ubuntu系统下我们成功编译出Windows系统下的可执行程序main.exe
总结
本文首先介绍了以下Go语言的由来以及基本特点与应用,我们也知道它是一门很有生命力的编程语言,才发展10多年就已经在TIOBE排名第八,而且还正在往上发展。接着介绍了Go语言的开发环境的搭建,讲解了Go Module和Go Package的作用和使用,最后从零搭建并运行了一个Hello World程序,这个Hello World项目虽小,但是已经包含了Go项目大部分的知识点了,大项目都是在这个基础上发展而来的。最后介绍了Go很强的一个功能:交叉编译
,只需一台主机,就可以开发适合于多个平台下的程序,说明Go是一门非常适合开发跨平台软件的一门开发语言。Go也还有很多非常棒的特性,如函数支持多个返回值、语言层面支持协程(非常适合快速开发高并发程序)等,这些内容以后有时间都会写博客分享给大家,你们的鼓励就是我写作的动力,如果本博文对您有所启发和帮助,希望您给个一键三连,感谢!如果对本文以及Go语言有任何疑问的地方,欢迎评论区留言。
推荐阅读
1.【Go零基础系列】003:Go语言中的变量详解
2.【Git从入门到精通】系列课程02:从0开始为项目使用git进行版本控制
3. 十分钟带你入门PostgreSQL数据库开发
4. Ubuntu24.04怎么更换软件源/Ubuntu安装软件很慢怎么解决