3-go-函数、包、if-else语句、for循环、switch语句

发布时间:2023年12月21日

1 函数
2 包
3 if-else语句
4 for循环
5 switch语句

1 函数

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)  // 切片---》列表
}

2 包

# go 1.11 以后,go统一使用 go moduls管理包

# 包的作用
	相同功能的代码放到一起,便于管理
    以后使用,导入包,拿着  包.方法  调用
    
# 包在go中,如何使用
	-需要在go文件开头声明 属于哪个包
    -同一个文件夹下,包名必须一致
    -文件夹名跟包名没有必然联系,但是约定俗称,文件夹名就是包名
    -在同一个包下,所有资源共享
    	-变量,常量,方法,直接用名字调用即可
        -同一个包下,不同go文件中的变量,常量,方法。。不能重名
        -同一个包,你就当成是同一个go文件即可
    -在使用的位置,  导入路径, 按包名使用
    
    -首字母大写 变量 常量 函数 .. 表示导出---》其他包中可以使用
    
    -一个文件夹下 可不可以有多个包?
    	一个文件夹下包名必须一致
        -不同文件夹下,同名包,其实是两个包
        -文件夹下同级目录下,包名必须一致,属于同一个包,不同级目录下,是不同的包,即便包名一致
        -不同级下包名一致,在一个go文件中导入,会冲突
        	import lqz "go_day03/lqz/package01" // 给包重命名

3 if-else语句

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("不及格")
	}

}

4 for循环

// 只有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)

	}
}

5 switch语句

# 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("不知道输入了啥")
	}

}

文章来源:https://blog.csdn.net/weixin_44145338/article/details/135100035
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。