(一)go包
- 包的概念:golang语言中方便组织代码的单元
- main包:一个golang工程中包含main包时,表示这是一个可执行的程序,main包中必须包含一个main函数(且只能在main包中),表示程序的入口。
- init函数:每个包中可以包含多个init函数,如果程序引用的包中包含init函数,则init函数会先于main函数执行,一般用于做初始化工作。
重命名:导入的包可以重命名,只需在导入包路径前面加上命名即可,如
import(
xxx “net/http”
)(二)go 命令
- go build:编译工程生成可执行文件
- go install:编译工程并把生成的可执行文件或库文件放到 GOPATH/bin或 GOPATH/pkg中
- go run:编译生成并运行,并不会保存生成可执行文件
- go clean:清除编译生成的文件
- go env:显示环境信息
- go get:从代码仓库中下载包
- go fmt:格式化代码
- go test:单元测试,测试文件以_test.go结尾
- go doc:
go doc
godoc -http=:8080
(三)数据类型
数组:存储某一类型的数据集合,数组长度固定,在存储中地址是连续的
func main() {
var aa [5]int64
for i, _ := range aa {
fmt.Printf(“%p\n”, &aa[i])
}
}
输出:
0xc042039f80
0xc042039f88
0xc042039f90
0xc042039f98
0xc042039fa0指针数组: [5]*int
数组指针:*[5]int
遍历数组:for …range
数组参数:数组很大时,可考虑使用数组指针传递,但存在数组值被修改的可能行
作为参数传递:会复制一个副本,在函数内的操作不会影响原数组的值切片:可理解为动态数组,底层基于数组,包含3个字段的数据结构,一个是指向底层数组的指针,一个切片的长度(len),一个是切片的容量(cap)
初始化:make格式:make([]type,len,cap),cap>=len
例如:slice:=make([]int,5,10)
slice2:=[]int{1,2,3,4,5}//len=capnil切片:指向底层数组的指针为nil,即没有指向任何内存空间
var slice []int
空切片:指向底层数组的指针是个地址,地址对应的内存为0
slice:=[]int{}
append:切片追加,返回的切片可能是原来的切片也可能是新的切片,如果追加的内容
作为参数传递:会复制一个切片副本(三个字段,指针,len和cap),但是还是共用一个底层数据,在函数内的操作会影响原来切片的值
map:key-value对集合,无序
初始化:
//使用make初始化
person := make(map[string]interface{})
person[“name”] = “dawing”
person[“age”] = 20
fmt.Println(person)
//或者直接初始化
person:=map[string]interface{}{“name”:”dawing”,”age”:20}
//如果不知道初始值,则为一个空的map
person:=map[string]interface{}{}
使用map
//获取map值(如果该键值不存在,则返回nil)
name:=person[“name”]
//判断某个键值是否存在
_, exists := person2[“name”] //exists为true表示存在,false表示不存在
//修改值(如果该键值不存在,则会创建)
person[“name”]=”dazuming”
//删除键值
delete(person,”name”)
作为参数传递:传递的不是副本,在函数内的操作会影响原来的值
(四)go类型
基础类型
包括:数值(整形、浮点型)、字符型、布尔型
引用类型
包括:切片、map、接口、函数类型、chan
实际操作中使用的是一个指向底层的指针,修改该指针指向的值,会改变原来的值
自定义类型(结构类型)
包括:结构体
type person struct {
age int
name string
}