前言
每一门新语言的学习都是从“hello, world”开始的。
开发环境
安装go环境
按照官网的下载及安装文档就很简单集成go开发环境。
Mac和Windows提供了可视化的图形安装方式,还是非常人性化的。
安装成功后,可通过如下命令进行查看,并判断是否安装成功。
go version
建议配置国内的镜像服务器:
配置国内镜像代理(使用阿里云镜像)
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
验证
go env|grep GOPROXY
IDE
首先推荐知名JetBrains针对Go语言推出的GoLang,这对Java开发同学或者Android同学非常友好;
当然如果是前端同学想要学习Go语言开发,那么就首推微软开源的跨语言源码编辑器VS Code了,添加对应的Go插件即可。
(Hello,world)你好,世界
可以直接通过IDE,或者创建普通文件的形式就行学习第一个go程序。建议创建一个用于包含所有练习项目的文件件,方便学习管理。
1. 创建一个demo.go文件,内容如下
package main
import "fmt"
func main() {
fmt.Println("Hello, world")
fmt.Println("你好, 世界")
}
2. 执行go编译命令
go build demo.go
或者在IDE中可以直接点击图中的绿色按钮进行编译
3. 输出结果如下
Hello, world
你好, 世界
知识点
1. package main
这一行代码定义了 Go 中的一个包 package。包是 Go 语言的基本组成单元,通常使用单个的小写单词命名,一个 Go 程序本质上就是一组包的集合。
main包在Go中是一个特殊的包,整个Go程序中仅允许存在一个名为 main 的包。
main包中的主要代码就是这个main()函数,这是go可执行程序的入口函数。
func main() {
fmt.Println("Hello, world")
fmt.Println("你好, 世界")
}
如果不是package main包,那么这个main()函数知识一个普通函数,那么再ide上也没有绿色的小按钮了。
2. Gofmt
Go语言内置了一套Go社区约定俗称的代码风格,并随安装包提供了一个名为Gofmt的工具,这个工具可以帮助你将代码自动格式化为约定的风格。
因此,作为Go开发人员,请在提交你的代码前使用Gofmt格式化你的Go源码。
对于使用Mac的小伙伴可以直接使用快捷键【command+option+l】快速格式化程序代码。
3. 标准 Go 代码风格使用 Tab 而不是空格来实现缩进的
4. 导包及函数调用
- import “fmt” 一行中“fmt”代表的是包的导入路径(Import),它表示的是标准库下的 fmt 目录,整个 import 声明语句的含义是导入标准库 fmt 目录下的包;
- fmt.Println 函数调用一行中的“fmt”代表的则是包名。
在 Go 语言中,只有首字母为大写的标识符才是导出的(Exported),才能对包外的代码可见;如果首字母是小写的,那么就说明这个标识符仅限于在声明它的包内可见。
5.所见即所得
Go源码文件本身采用的是Unicode字符集,而且用的是UTF-8标准的字符编码方式;因此不会存在像Python那样存在中文的编码问题,需要在在文件开头加入 # -- coding: UTF-8 -- 或者 # coding=utf-8,比如下面这样
#!/usr/bin/python
# -*- coding: UTF-8 -*-
print( "你好,世界" )
6.编码中分号是可选的
编译
使用go build命令编译后生成二进制可执行文件,通过ls命令可以进行查看
go build demo.go
MacBook-Pro-5:awesomeProject demo$ ls
demo demo.go go.mod
demo文件即为可执行文件(Windows系统下为demo.exe,其余系统下为demo)
Go是一种编译型语言,这意味着只有你编译完Go程序之后,才可以将生成的可执行文件交付于其他人,并运行在没有安装Go的环境中。
当然也可以不经过编译,直接运行查看结果,使用 go run 命令,这通常用在开发调试阶段。
MacBook-Pro-5:awesomeProject demo$ go run demo.go
Hello, world
你好, 世界
go.mod依赖管理
Go module构建模式是在Go1.11版本正式引入的,为的是彻底解决 Go 项目复杂版本依赖的问题,在 Go1.16版本中,Go module 已经成为了 Go 默认的包依赖管理机制和Go源码构建机制。
Go Module的核心是一个名为 go.mod 的文件,在这个文件中存储了这个 module 对第三方依赖的全部信息,相当于flutter中的pubspec.yaml文件, ReactNative项目中的package.json文件。
go.mod文件的内容示例如下,
module hellomodule
go 1.16
require (
github.com/valyala/fasthttp v1.38.0
go.uber.org/zap v1.22.0
)
题外话
可以使用go mod tidy
添加所有第三方依赖, 与此同时也会生成一个go.sum文件。
go.sum文件,这个文件记录了 hellomodule 的直接依赖和间接依赖包的相关版本的 hash 值,用来校验本地包的真实性。在构建的时候,如果本地依赖包的 hash 值与 go.sum 文件中记录的不一致,就会被拒绝构建。
总结
- Go 包是 Go 语言的基本组成单元。一个 Go 程序就是一组包的集合,所有 Go 代码都位于包中;
- Go 源码可以导入其他 Go 包,并使用其中的导出语法元素,包括类型、变量、函数、方法等,而且,main 函数是整个 Go 应用的入口函数;
- Go 源码需要先编译,再分发和运行。如果是单 Go 源文件的情况,我们可以直接使用 go build 命令 +Go 源文件名的方式编译。不过,对于复杂的 Go 项目,我们需要在 Go Module 的帮助下完成项目的构建。
参考资料
极客时间《Go语言第一课》
本文参与了思否技术征文,欢迎正在阅读的你也加入。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。