Go语言编程笔记1:Hello World

Go语言编程笔记1:Hello World

Go语言编程笔记1:Hello World_第1张图片

图源:golang.google.cn

环境安装

Go语言的官网是https://golang.org/,遗憾的是因为某些不可抗力,是没法正常访问的。幸运的是Google提供了一个大陆地区特供版官网,提供一些下载等基本功能,其地址是https://golang.google.cn/dl/。

Go语言编程笔记1:Hello World_第2张图片

这里选择对应的版本即可。

具体的安装过程没啥可说的,相当的朴实无华,连个选项都没有,我几乎没有见过类似的程序语言环境安装包。

安装完后同样需要将安装目录加入环境变量Path

Go语言编程笔记1:Hello World_第3张图片

重启命令行窗口后通过以下命令可以验证是否安装成功:

go version
go version go1.17.2 windows/amd64

Hello world

Go语言和PHP、Python之类的动态语言不通,是需要经过编译后才能执行的静态语言,我们可以通过官方提供的环境组件中的编译工具进行编译和执行。

先用文本编辑器创建我们第一个Go语言程序:

package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

保存为hello.go

在命令行执行:

go run hello.go
Hello world!

这会调用编译器对源码编译,然后执行。比较奇怪的是通过run命令执行后并不会产生编译后的可执行文件,这意味着再次执行程序就需要重新编译(即使源码没有任何改变),对于编译型语言来说这显然是不可接受的。

当然我们也可以通过go build命令直接编译源码并产生可执行文件:

go build hello.go
❯ ls -al
hello.exe
hello.go

可以看到产生了一个可执行文件hello.exe,现在我们就可以直接通过该文件执行程序:

❯ ./hello
Hello world!

其它环境设置

Go语言的工具包还提供类似pip那样从网上下载第三方库的功能,前提是先要设置一下工作区目录:

Go语言编程笔记1:Hello World_第4张图片

这里需要将环境变量中的GOPATH修改为你打算用作Go开发的工作目录。

基于同样不可描述的原因,还需要设置下载资源的镜像站:

go env -w GOPROXY=https://goproxy.cn,direct

可以用下面的命令测试一下:

go get golang.org/x/tour
go: downloading golang.org/x/tour v0.1.0

配置VSC

在VSC中使用快捷键CTRL+SHIFT+P打开命令行,输入go install update tools

Go语言编程笔记1:Hello World_第5张图片

在弹出的插件列表中勾选全部:

Go语言编程笔记1:Hello World_第6张图片

如果安装顺利,VSC的控制台最后会出现All tools successfully installed. You are ready to Go. :)字样。

Go语言编程笔记1:Hello World_第7张图片

学习资料

在介绍Go相关的学习资料时我必须先说明:在选择编程书籍或者学习资料的时候,不要盲目相信权威或者资深开发者,一定要真正阅读部分内容后自行判断该书籍是否适合自己,并不存在某本书籍适合所有人学习这种情况。同样的,也并非所有人都适合同样的学习方式,比如我个人就比较喜欢读纸质书,而非电子版或者看视频,着同样是一个因人而异的事情,所以以下仅供参考,请选择适合自己的方式进行学习。

纸质书

  • 《Go程序设计语言》

    《Go程序设计语言(英文版)》的中文版,由七牛云的员工协作翻译。目前看了80%,感觉翻译质量一般,个别句子感觉生涩,需要反复阅读,但总体来说结合示例代码不会影响理解,毕竟编程学习代码依然是最重要的。总之这本书依然是其它语言程序员转Go语言的首选推荐读物,介意翻译质量的可以阅读原版,或者访问https://book.itsfun.top/gopl-zh/,这是网络上该书的一个开源翻译成果。

    该书的示例代码可以在https://github.com/adonovan/gopl.io中找到。方便起见我从Github克隆了代码到Gitee:https://gitee.com/icexmoon/gopl-io。

  • 《Head First Go语言程序设计》

    饱受好评的[Head First]系列丛书出品,依然延续该书系幽默风趣、图文并茂的特点,基本涵盖了Go语言的绝大多数内容。但无论从内容的广度、深度,抑或是代码的实用性上要略逊于《Go程序设计语言》。该书更适合0基础入门学习Go语言的读者。顺带一提,该书中文版是20年第1版,相当新。

  • 《Go Web 编程》

    这本书我买了,但还没看。从网上一些评论和书籍介绍中可以看出,该书不借助其它框架,只使用Go语言自带的包,实现了一个完整Web应用,借此阐述了Go语言Web编程所需的相关技能和知识点。学习Go语言基础后可以阅读此书作为Go Web 编程的进阶学习资料。

  • 《Go程序设计语言(英文版)》

    Go语言学习的最权威教材,又被称为“Go语言圣经”(我并不喜欢这种花里胡哨的称呼)。两位作者分别是Google资深开发者和"C语言圣经"的作者。内容字字珠玑,几乎没有废话。但同样的,无论是对语言特性和机制的深入剖析还是一些实用的示例,理解起来都会有一些难度。所以并不适合新手阅读。

更多的编程类书籍推荐可以关注我的豆瓣书单编程。

网络资料

  • Go语言圣经(中文版)

    《Go程序设计语言(英文版)》的网络开源翻译项目产物,据说翻译质量是优于纸质中文版的。但版权存疑,可以用于自学,请不要制作成其他版本并传播。

  • Go社区Wiki

    一个以Wiki形式组织的Go语言学习资料,Go语言介绍、环境安装等部分内容相当丰富,但似乎还在完善内容中。

  • Go 简易教程

    Go社区Wiki翻译的一个开源书籍,用最短的篇幅介绍了Go的一些特性,不过因为太简短的缘故,我认为该教程并不容易理解,且可能导致一些误解,并不推荐。

  • 官方文档

    因为某些原因,并不能直接访问。但幸运的是,我们可以在本地安装并部署,像访问一个部署在本地的网站那样进行访问:

    go generate golang.org/x/tools/godoc/staticgo install golang.org/x/tools/cmd/godoc
    

    执行上边命令后在你的$GOPATH目录中的bin目录下应该能看到godoc.exe这样的可执行文件,此时将该目录加入系统环境变量Path后在命令行执行:

    ❯ godoc -http=:6060
    

    一切都正常的话你就可以通过浏览器访问本地的官方文档了:

    Go语言编程笔记1:Hello World_第8张图片

语言风格

Go语言是从C语言衍生而来,所以语言风格上是和C语言很相似的,不同的是Go在语言格式化上做的相当激进。

最显著的是在缩进和换行上,Go语言都有严格要求。此外在变量使用和包导入上,同样非常严格。

在Python中,如果引用了没有使用的包或者是有变量没有使用,是不会影响到程序的执行的,比如:

from typing import NamedTuple

message = 'How are you!'
print('hello world')

# hello world

其中的包NamedTuple和变量message都是不必要的,但这些都不会阻止程序的正常执行。当然可能会造成性能浪费,优秀的IDE也会通过颜色高亮来提醒你这些是可以删除的部分。但无论怎么说,大多数编程语言(如C++/Java/PHP等)都不会强制要求开发者剔除不必要的引用或者变量,但Go语言会:

package main

import "fmt"

func main() {
	message := "How are you!"
	fmt.Printf("Hello World")
}

// Build Error: go build -o C:\Users\70748\AppData\Local\Temp\__debug_bin2433955485.exe -gcflags all=-N -l .\hello.go
// # command-line-arguments
// .\hello.go:6:2: message declared but not used (exit status 2)

这里message变量虽然声明并初始化,但在后续程序中并没有真正使用,所以是无效的代码,这里直接会被编译器提示message declared but not used进而中断编译过程。事实上无效的导入也会造成同样的后果。

不过导入方面的问题不需要开发者操心,Go提供官方自动导入工具,VSC之类的IDE会自动调用该工具导入需要的包或者删除不必要的包。

在这方面Go语言是相当极端的,这样做优点和缺点同样明显。

优点是保证代码的干净高效,剔除不必要的无效代码,且可以在编译阶段发现一些不必要的bug,同时保持一致性的代码风格,让Go语言源码都具有很高的可读性。缺点是扼杀了代码的个性,可能一部分程序员初次接触后会相当的不习惯。

参考资料

  • Go 文档和加速:Go 国内加速镜像
  • Go 语言环境安装

你可能感兴趣的:(Go语言,golang,开发语言,后端)