-
go基础语法
-
变量
类型推导:有时我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化
短变量声明:在函数内部,可以使用更简略的
:=
方式声明并初始化变量m := 10
匿名变量:在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable),使用一个下划线
_
表示。匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。注意事项:
(1) 函数外的每个语句都必须以关键字开始(var、const、func等)
(2) :=不能使用在函数外
(3) _多用于占位,表示忽略值
-
常量
iota是go语言的常量计数器,只能在常量的表达式中使用。iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次。
-
基本数据类型
布尔值:
(1) 布尔类型变量的默认值为false
(2) Go语言中不允许将整形强制转换为布尔型
(3) 布尔型无法参与数值运算,也无法与其他类型进行转换
字符串:
s3 := ` 多行字符串 两个反引号之间的内容会 原样输出 \t \n `
字符:
byte: uint8的别名 只能表示ASCII码
rune: int32的别名
-
运算符
++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符
-
流程控制语句
(1) if
Go语言规定与if匹配的左括号{必须与if和表达式放在同一行,{放在其他位置会触发编译错误。与else匹配的{也必须与else写在同一行,else也必须与上一个if或else if右边的大括号在同一行。
if判断特殊写法:在if表达式之前添加一个执行语句,再根据变量值进行判断
if score := 65;score >= 90 { fmt.Println("A") } else if score > 75{ fmt.Println("B") } else{ fmt.Println("C") }
上文if判断中用到的变量只在if代码块中生效
(2) for
类似其他语言while用法:
var i = 10 for i > 0{ fmt.Println(i) i-- }
无限循环
for{ fmt.Println("Hello!") }
for range遍历
for index, value := range cityArray{ fmt.Println(index,value) }
-
函数 go语言中函数传参全部是值拷贝
闭包:闭包指的是一个函数和与其相关的引用环境组合而成的实体。简单来说,
闭包=函数+引用环境
。func adder() func(int) int { var x int return func(y int) int { x += y return x } } func main() { var f = adder() fmt.Println(f(10)) //10 fmt.Println(f(20)) //30 fmt.Println(f(30)) //60 f1 := adder() fmt.Println(f1(40)) //40 fmt.Println(f1(50)) //90 }
变量
f
是一个函数并且它引用了其外部作用域中的x
变量,此时f
就是一个闭包。 在f
的生命周期内,变量x
也一直有效。 -
并发
Go语言中使用 goroutine 非常简单,只需要在函数或方法调用前加上
go
关键字就可以创建一个 goroutine ,从而让该函数或方法在新创建的 goroutine 中执行。go f() // 创建一个新的 goroutine 运行函数f
匿名函数也支持使用
go
关键字创建 goroutine 去执行。go func(){ // ... }()
一个 goroutine 必定对应一个函数/方法,可以创建多个 goroutine 去执行相同的函数/方法。
-