1 函数
2 包
3 if-else语句
4 for循环
5 switch语句
package main
import "fmt"
func main() {
// 函数高级
//var f=test02("xxx")
//f()
//test03(func() {
// fmt.Println("xxxx")
//})
//fmt.Println(1, 2, 3, 4)
//var i MyInt =10
//var i1 int=9
//fmt.Println(i+i1) // 类型不匹配
test04(1, 2, 3, 4, 54, 5, 6, 7, 8, 8)
}
// 1 匿名函数---》 定义在函数内部---》没有名字
// go (python)语言中,函数是一等公民---》只要函数能赋值给一个变量
// 头等函数
func test01() {
// 定义匿名函数:要么是用来调用,要么用来返回,当参数传递
func() {
fmt.Println("我是匿名函数")
}()
}
// 2 闭包函数:定义在函数内部 对外部作用域有引用
func test02(name string) func() {
//var name ="lqz"
f := func() {
fmt.Println(name)
fmt.Println("我是匿名函数")
}
return f
}
// 3 函数当参数传递
func test03(f MyFunc) {
f()
}
// 4 重命名类型
//type MyFunc func() // 只是重命名
type MyFunc = func()
type MyInt = int // 只是重命名,它们还是同一个类型,允许运算
//type MyInt int // 重新定义了一个类型 MyInt 跟int 不是同一个类型,不能运算
// 5 不定长参数 可以传任意长度int类型
func test04(a ...int) {
fmt.Println(a) // 切片---》列表
}
# go 1.11 以后,go统一使用 go moduls管理包
# 包的作用
相同功能的代码放到一起,便于管理
以后使用,导入包,拿着 包.方法 调用
# 包在go中,如何使用
-需要在go文件开头声明 属于哪个包
-同一个文件夹下,包名必须一致
-文件夹名跟包名没有必然联系,但是约定俗称,文件夹名就是包名
-在同一个包下,所有资源共享
-变量,常量,方法,直接用名字调用即可
-同一个包下,不同go文件中的变量,常量,方法。。不能重名
-同一个包,你就当成是同一个go文件即可
-在使用的位置, 导入路径, 按包名使用
-首字母大写 变量 常量 函数 .. 表示导出---》其他包中可以使用
-一个文件夹下 可不可以有多个包?
一个文件夹下包名必须一致
-不同文件夹下,同名包,其实是两个包
-文件夹下同级目录下,包名必须一致,属于同一个包,不同级目录下,是不同的包,即便包名一致
-不同级下包名一致,在一个go文件中导入,会冲突
import lqz "go_day03/lqz/package01" // 给包重命名
package main
import "fmt"
// if 判断
func main() {
var score int
fmt.Print("请输入分数:")
fmt.Scan(&score)
if score >= 90 {
fmt.Println("优秀")
} else if score > 60 && score < 90 {
fmt.Println("及格")
} else {
fmt.Println("不及格")
}
}
// 只有for循环---》没有while循环关键字,但有while循环的功能
package main
import "fmt"
func main() {
// 循环打印出0--9
// 1 基于索引的循环--完整方式 ---》分号分割的三部分,每部分都可以省略
//for i := 0; i < 10; i++ {
// fmt.Println(i)
//}
// 2 省略第一个部分 定义放在外面 i的作用域范围 大了
//var i int = 0
//for ; i < 10; i++ {
// fmt.Println(i)
//}
// 3 省略第三部分 自增省略,放到循环体内部
//for i := 0; i < 10; {
// fmt.Println(i)
// i++
//}
// 4 省略第一和第三部分
//i := 0
//for i < 10 {
// fmt.Println(i)
// i++
//}
// 5 以上,简写成---》就是while循环---》for 条件 {循环体}
//i := 0
//for i < 10 {
// fmt.Println(i)
// i++
//}
//6 三部分都省略---死循环
//for {
// fmt.Println("死循环")
//}
// 7 range 循环 基于迭代的循环 python 中range 是内置函数,go中是关键字 for func package 一类
//a := [3]int{1, 2, 3}
//for _, item := range a {
// fmt.Println(item)
//}
// 8 break 和continue跟所有语言都一样
for i := 0; i < 10; i++ {
if i == 5 {
continue
}
fmt.Println(i)
}
}
# python 3.10 后支持--》优雅的替换掉 if-else
key = 'lqz'
match key:
case 'lqz':
print('是lqz')
case 'justin':
print('justin')
case _:
print('默认情况')
# go 支持 switch
package main
import "fmt"
// switch--->优雅的替换掉if else
func main() {
// 1 基本用法
//var i int
//fmt.Scan(&i)
//switch i {
//case 9:
// fmt.Println("您输入了9")
//case 8:
// fmt.Println("您输入了8")
//default:
// fmt.Println("不知道输入了啥")
//
//}
//2 多表达式
//var i int
//fmt.Scan(&i)
//switch i {
//case 1, 3, 5, 7, 9:
// fmt.Println("您输入了奇数")
//case 2, 4, 6, 8:
// fmt.Println("您输入了偶数")
//default:
// fmt.Println("不知道输入了啥")
//}
// 3 无表达式
//var i int
//fmt.Scan(&i)
//switch {
//case i == 1 || i == 3:
// fmt.Println("您输入了奇数")
//case i == 2 || i == 4:
// fmt.Println("您输入了偶数")
//default:
// fmt.Println("不知道输入了啥")
//}
// 4 fallthrough
var i int
fmt.Scan(&i)
switch i {
case 1:
fmt.Println("您输入了1")
fallthrough // 只要执行到它,无条件执行下一个case
case 2:
fmt.Println("您输入了2")
fallthrough
case 3:
fmt.Println("您输入了3")
fallthrough
default:
fmt.Println("不知道输入了啥")
}
}