概述
一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言
常识
-
每个go源代码文件的开头都是一个package声明,表示该go代码所属的包;包是go语言中最基本的分发单位,也是工程管理中依赖关系的体现。要生成go可执行程序,必须建立一个名为main的package,并且在该package中包含一个叫main()的函数;
-
Go语言的main()函数不能带参数,也不能定义返回值,传入的命令行参数在os.Args变量中保存;
-
在包声明之后,是一系列的import语句,用于导入改程序所依赖的包,但不能导入在源代码文件中没有用到的包,否则Go编译器会报错;
-
Go语言中,语句不用以分号结束;
-
同一文件夹下的所有.go文件的package 必须一样.不一定和文件夹名相同
文件夹下可以有子文件夹,体现了package直接的上下级关系
import 导入的路径是从src 子目录,到该包的实际存储位置的相对路径
定义多个工作区
- linux定义方法
export GOPATH="/home/ferghs/gowork:/home/ferghs/gowork/src/project1"
- windows定义方法
GOPATH=f:/gopath1;f:/gopath2;
-
go get 默认是下载到第一个workspace
-
import包,按顺序从第一个到最后一个寻找
目录名为internal的特殊性
- internal(指目录名为internal,不要求包名也是internal)代码包中声明的公开程序实体仅能被该代码包的直接父包及其子包中的代码引用
import 另外一个用法
- import . “xxx”
那么就会让这个“xxx”包中公开的程序实体被当前源码文件中的代码,视为当前代码包中的程序实体
{} 含义
- 空的代码块
- 表示不包含任何内容的数据结构(或者说数据类型)
1.1 interface{} 不包含任何方法定义的、空的接口类型
1.2 struct{} 代表了不包含任何字段和方法的、空的结构体类型 - 表示其值不包含任何元素
比如空的切片值[]string{},以及空的字典值map[int]string{}
类型别名与类型声明的区别
-
type Alias = int // 类型别名
-
type NewType int // 类型声明
-
类型别名和原类型完全一样,只不过是另一种叫法而已,而类型定义和原类型是不同的两个类型
package main
import "fmt"
type Alias = int
type NewType int
func main() {
v := 100
var a Alias = v // 编译不报错
var n NewType = v // 编译报错,Cannot use 'v' (type int) as type NewType in assignment
fmt.Println(a)
fmt.Println(n)
}