1.常量和变量
- 变量
- 概念:变量就是程序运行期间可以改变的量
- 声明: var a int
- 注意:局部变量声明后一定要使用,不然报declared and not used
- 赋值: a = 10
- 初始化: var a int = 10
- 自动推导类型: a := 10
- 区别:
package main
import "fmt"
func main() {
//初始化
var a int = 10
//赋值
a = 20
//自动推导
b := 30
//输出
fmt.Println(a, b)
}
- 多重赋值: a , b , c := 10 , 20 , 30
- 两值交换: a , b = b , a
- 匿名变量:a , _ = b , a
- 常量
- 概念:程序运行期间不可更改的量
- 声明:const a int
- 自动推导:const a = 10
- iota枚举
- 概念:常量自动生成器,每隔一行自动+1
- 注意:iota遇到const自动重置为0,如果同一行,值一样
2.基本数据类型
- bool初始值为false
- float64比float32存储更准确
- 以反斜杠\开头的字符为转义字符
- 内建函数
- len() : 求长度
- 字符串的取值:str[x]
- 复合类型内建函数
- 取实:real()
- 取虚:imag()
3.fmt包的格式化输入和输出
- 格式化:fmt.Print(“print = %d\n”,a)
- 输出:fmt.Print
- 输入:fmt.Scan
4.类型转换和别名
- 部分数据类型不能相互转换
- 类型别名相当重要
- 关键字 type
package main
import "fmt"
func main() {
//别名为bigInt
type bigInt int64
var a bigInt
a = 10
fmt.Println(a)
}
5.运算符
- 正常的运算
6.流程控制(选择,循环)
- 判断
- GO语言的switch默认每隔case都携带break,匹配成功后将不会执行下面的语句,但是可使用fallthrough强制执行,并且后面的无条件执行,他同样也支持初始化
package main
import "fmt"
func main() {
a, b := 1, 2
//选择
if a > b {
fmt.Println(">")
} else {
fmt.Println("<")
}
//支持初始化
if c := 10; c > a {
fmt.Println(">")
} else {
fmt.Println("<")
}
//多分支
if a == 0 {
fmt.Println("0")
} else if a == 1 {
fmt.Println("1")
} else {
fmt.Println("-1")
}
//选择
switch a {
case 0:
fmt.Println("0")
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
case 3,4,5:
fmt.Println(" 3 4 5 ")
case a > 10:
fmt.Println(">")
default:
fmt.Println("-1")
break
}
//fallthroug 强制执行
}
- 循环
- 关键字 for ,唯一的循环方式
package main
import "fmt"
func main() {
sum := 0
//计算0-99的总和
for i := 0; i < 100; i++ {
sum = sum + i
}
fmt.Println("sum:", sum)
//迭代
a := "Hello"
for i := 0; i < len(a); i++ {
fmt.Println("a:", a[i])
}
//返回两个参数 一个下标 一个值
for i, data := range a {
fmt.Println("i:", i, "data:", data)
}
}
- break:跳出最近的内循环
- continue:跳出本次循环
- goto可以使用在任何地方,但是不能跨函数
package main
import "fmt"
func main() {
fmt.Println("1")
goto End
fmt.Println("2")
End:
fmt.Println("3")
}