Go 语言学习手札 ━━ 基础语法

一、 关键字、标识符、注释及基础结构

常用关键字

Go 语言中保留的关键字只有 25 个:

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

预定义标识符

appendboolbytecapclosecomplex
complex64complex128uint16copyfalsefloat32
float64imagintint8int16uint32
int32int64iotalenmakenew
nilpanicuint64printprintlnreal
recoverstringtrueuintuint8uintper

程序中可能会使用到这些分隔符:(), [], {}
程序中可能会使用到这些标点符号:,, ,, ;, :, ...

注释形式

单行注释:使用双斜杠表示注释单行,如:// var a int = 1
多行注释:使用 /* ... */

基础结构

// 基础结构一
package main

func main() {
    // code
}
// 基础结构二
package main

// 导入依赖包
import "fmt"

// 定义常量 NAME
const NAME = "name"

// 定义变量 a
var a = "string"

func main() {
    b := 2
    fmt.Println(b)
}

二、 package 和 import

package

package 的作用是指明当前这个程序属于哪一个包,如:package main。在 Go 的源文件中,第一行非注释的代码必须是使用 package 指明当前程序属于哪个包,否则将编译失败。如果使用 package 当前程序属于 main 包,那么表示当前程序是一个可独立执行的程序,在日常开发中,每一个 Go 应用程序都包含一个名为 main 的包。

通常,在使用 package 声明所属程序包时,都会使用和当前项目目录名称保持一致。

如果需要生成可执行程序,项目中必须包含 main 包,且 main 包下必须包含 main() 方法,如:

package main

func main() {
    // code
}

必须同时满足以上两个条件才能使用 go build 命令生成可执行程序。

在同一路径下不能同时存在两个以上的包,例如:test 文件夹下有两个文件 a.go 和 b.go,如果 a.go 属于 main 包 (package main),b.go 属于 main2 包(package main2),在使用 go build 编译项目会编译失败。

同一路径下可以将一个包拆分成多个源文件,例如:test 文件夹下有两个文件 a.go 和 b.go,a.go 和 b.go 文件都属于 main 包(package main),可以正常编译项目,但是如果要编译这个项目,那么这两个文件中只能存在一个 main() 方法

小结

  • package 是最基本的分发单位和工程管理中依赖关系的体现
  • 每个 Go 语言源代码文件中第一行非注释代码必须是使用 package 声明当前源码文件属于哪个包
  • 要生成 Go 语言可执行程序,必须要有 mainpackage 包,且必须在该包下有 main() 函数
  • 同一个路径下只能存在一个 package, 一个 package 可以拆分成多个源文件组成

import

import 的作用是导入当前程序需要依赖的 package 包。

在 Go 应用程序中,不允许导入程序中未使用的 package,否则在编译时将会发生错误

import 主要有两种语法格式:

  • 单行导入:一行一个 import 关键字对应一个依赖包
  • 多行导入:一个 import 关键字对应多个依赖包,依赖包使用 () 将其包住,一行一个依赖包, 如:
import (
    "package1"
    "package2"
    ...
)

import 的工作原理

  • 如果一个 main 包导入其他包,包将被顺序导入。
  • 如果导入的包中依赖其他包(包 B),会首先导入包 B,然后初始化 B 包中的常量和变量,最后如果 B 包中存在 init() 方法,会自动执行 init() 方法。
  • 所有包导入完成后才会对 main 包中的常量和变量进行初始化,然后执行 main 包中的 init() 方法(如果 main 包中存在 init() 方法才会执行,否则不执行),最后执行 main 包中的 main() 方法。
  • 如果一个包被导入多次,那么该包只会被导入一次

import 特殊用法 ━━ 别名

import 别名操作的含义是:将导入的包命名为另一个容易记忆的别名,用法:import abc "fmt"

import 特殊用法 ━━ 点(.)操作

import 点(.)操作的含义是:点(.)标识的包导入后,调用该包中的函数时可以省略包前缀,用法:import . "fmt"

import 特殊用法 ━━ 下划线(_)操作

import 下划线(_)操作的含义是:导入该包,但不导入整个包,而是执行该包中的 init() 方法,因此无法通过包名来调用包中的其他函数。使用下划线(_)操作往往是为了注册包里的引擎,让外部可以方便的使用。用法:import _ "fmt"

标签:

About: Mr.zhang

成谜于写 bug 无法自拔~


发表评论

邮箱地址不会被公开。 必填项已用*标注