前言

每一门新语言的学习都是从“hello, world”开始的。

开发环境

安装go环境

按照官网的下载及安装文档就很简单集成go开发环境。 Mac和Windows提供了可视化的图形安装方式,还是非常人性化的。 安装成功后,可通过如下命令进行查看,并判断是否安装成功。

go version



gotenberg国内镜像_代码风格

建议配置国内的镜像服务器:

配置国内镜像代理(使用阿里云镜像)
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
验证
go env|grep GOPROXY
IDE

首先推荐知名JetBrains针对Go语言推出的GoLang,这对Java开发同学或者Android同学非常友好;

当然如果是前端同学想要学习Go语言开发,那么就首推微软开源的跨语言源码编辑器VS Code了,添加对应的Go插件即可。



gotenberg国内镜像_gotenberg国内镜像_02

(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中可以直接点击图中的绿色按钮进行编译



gotenberg国内镜像_gotenberg国内镜像_03

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上也没有绿色的小按钮了。

gotenberg国内镜像_程序人生_04

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 文件中记录的不一致,就会被拒绝构建。

总结

  1. Go 包是 Go 语言的基本组成单元。一个 Go 程序就是一组包的集合,所有 Go 代码都位于包中;
  2. Go 源码可以导入其他 Go 包,并使用其中的导出语法元素,包括类型、变量、函数、方法等,而且,main 函数是整个 Go 应用的入口函数;
  3. Go 源码需要先编译,再分发和运行。如果是单 Go 源文件的情况,我们可以直接使用 go build 命令 +Go 源文件名的方式编译。不过,对于复杂的 Go 项目,我们需要在 Go Module 的帮助下完成项目的构建。

参考资料 极客时间《Go语言第一课》