程序实体是什么?在 Go 语言中,它是变量、常量、函数、结构体和接口的统称。
程序实体的名字被统称为标识符。标识符可以是任何 Unicode 编码可以表示的字母字符、数字以及下划线“_”,但是其首字母不能是数字。
代码包声明的基本规则总结:
1.同目录下的源码文件的代码包声明语句要一致。也就是说,它们要同属于一个代码包。这对于所有源码文件都是适用的。否则会报如下错误:
D:\go\src\github.com\xtao\goWeb\common\Logger.go:24:3: expected ')', found 'EOF'
D:\go\src\github.com\xtao\goWeb\server\Routes.go:9:2: found packages handler (RuncmdHandler.go) and handlers (UserHandler.go) in D:\go\src\github.com\xtao\goWeb\server\handler
错误: 进程退出代码 1.
如果目录中有命令源码文件,那么其他种类的源码文件也应该声明属于main包。这也是我们能够成功构建和运行它们的前提。否则会报如下错误:
can't load package: package gostudy/03_package/demo1:
found packages main (demo1.go) and demo1 (demo1_lib.go) in D:\Go_Work\src\gostudy\03_package\demo1
2.源码文件声明的代码包的名称可以与其所在的目录的名称不同。在针对代码包进行构建时,生成的结果文件的主名称与其父目录的名称一致。
导入包时,import是相对src的相对文件路径。
import的几种方式:
点操作
有时候会看到如下的方式导入包:
import( . "fmt" )
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的:
fmt.Println( "我爱北京天安门" )
可以省略的写成:
Println( "我爱北京天安门" )
别名操作
别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字:
import( f "fmt" )
别名操作调用包函数时前缀变成了重命名的前缀,即:
f.Println( "我爱北京天安门" )
下划线操作
这个操作经常是让很多人费解的一个操作符,请看下面这个 import
import ( “database/sql” _ “github.com/ziutek/mymysql/godrv” )
下滑线 “_” 操作其实只是引入该包。当导入一个包时,它所有的 init() 函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的 init() 函数被执行而已。这个时候就可以使用 “_” 操作引用该包了。即使用 “_” 操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其 init() 函数。
go语言import 关键字导入的 并不是 一个真正的包,而是一个文件夹的路径。如果库源码文件的包和所在的目录名称不一致,导入的时候写的文件夹的路径。
如果导入的两个包的最后一级是相同的,将产生冲突,解决冲突的方式:别名操作。