Golang基础 | 青训营笔记

117 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记。

做笔记的目的其一是为了巩固所学的知识,温故而知新,其二是希望能有些许贡献于互联网之开源。

go test

  • 所有测试文件以_test.go结尾
  • 测试函数命名格式:func TestXxx (*testint.T)
  • 初始化逻辑放到TestMain中

import

如何在PackageA中导入PackageB呢?这是我一开始写Go语言遇到的问题。

首先,需要先介绍一下Go项目的布局。众所周知,目前go代码是使用go mod管理。一个module其实就是package的集合,而package是源文件的集合。go.mod所在的目录称为module的根目录。

回到之前的问题,在同一个module中,不同的包如何导入另一个包呢?导入一个包,我们需要知道它的包路径。包路径是唯一的,类似于文件路径。包名也类似于文件名。如D:\Desktop\Go语言学习及面经,这是文件“Go语言学习及面经”的文件路径。"go-learn/test/testSun"则是package testSun的包路径,其中go-learn则是module name.

总结,如果需要导入一个包,我们必须得知道它的包路径。包路径类似于文件路径,可以唯一地标识某个资源。包路径以module name开头,后面跟的是“包的路径”。如go-learn/test/testSun表示的是,在module go-learn中,test包中的testSun包。

需要注意的是,在go语言中,每个package互相独立,互不影响。一方面,即testSun不是test的子包!如果想在testSun中使用test包中的代码资源,仍然需要导入test包,导入路径为“go-learn/test”. 另一方面,package互相独立意味着提供了独立的命名空间,甚至包名都可以一样!比如testSun可以改名为test!改名过后他的导入路径则是:go-learn/test/test.

新的问题出现:如果导入了两个或多个同名的包,该如何使用它们呢?起别名!如:

import(test1 "go-learn/test" test2 "go-learn/test/test")

package

前文说到,package是源文件的集合。那么在一个package中的源文件如何访问其他源文件的代码呢?所有在函数外的声明(类型,变量,常量),包括函数本身(不包括方法),它们的标识符对应的作用域是整个包!也就是说在包里的任何源文件,都可以引用它们!仿佛所有代码都位于同一个文件中!

学习感悟

踏入一个新的领域时,我们不需要一上来就沉浸在某个技术的实现细节上,而应首先鸟瞰其全貌。简而言之,克制对技术的诱惑,慢即是快,日拱一卒,不期速成!