优点
- 内存自动回收;只需要new分配内存,不需要释放;gc垃圾回收
- goroute,轻量级线程;从语言层面支持并发;
- 管道;多个goroute之间通过channel进行通信;支持任何类型
- 多返回值
基本格式
第一个程序
package main
import(
"fmt"
)
func main(){
fmt.Println("hello world")
}
函数例子
func Add(a int,b int)int{
return a+b
}
//func 函数名(参数值 参数类型,...) 函数返回值类型{}
知识小结
-
每个程序只有一个main包
-
所有go源码以.go结尾
-
标识符以字母或下划线开头,大小写敏感
-
_(下划线)是特殊标识符,用来忽略结果。
-
关键字
-
var和const:变量和常量的声明
-
go:用于执行
-
defer:在函数退出之前执行 ;后进先出的方式执行
-
fallthrough:go语言的switch case函数中的break是已经存在的,但不显示出来
加了fallthrough,会直接运行下一个case或default语句,不论条件是否满足
a:=8 switch{ case a < 3: fmt.Println("小于3") case a < 10: fmt.Println("小于10") fallthrough // fmt.Println("值为8") default: fmt.Println("默认") } //若不加fallthrough,运行结果是 小于10 //加了fallthrough,运行结果是 小于10 // 默认 //在fallthrough语句后再写语句会报错
-
type:用于声明自定义类型
-
range:用于读取slice、map、channel数据
-
-
包访问控制规则:
- 大写意味着这个函数/变量是公有的
- 小写意味着这个函数/变量是私有的,包外部不能访问
-
go语言不存在隐式转换。(高转低会丢失精确度)
-
不支持重载;函数也可以赋值给变量
-
可变参数
func add(a int,b int,arg...int)int{} //2个或多个参数
-
cap容量
-
切片赋值时,slice的cap容量只是和开始索引有关系
cap=引用对象的cap - 开始索引
-
slice扩容时,容量会变成之前cap的两倍
扩容之后的slice,引用的已经不是原先的那个数组了
-