# 包管理 1. 一个文件夹可以称为一个包 2. 在文件夹(包)中可以创建多个文件 3. 在同一个包下的文件中,必须指定包名称,且包名称要相同 **重点**:关于包的分类 - main包 - 非main包 如果是main包,必须写一个main函数,此函数就是项目的入口(main主函数),编译生成的就是一个可执行文件 非main包,用来将代码分类,分别放在不同的包和文件中 文件夹中编写功能是,功能(方法)的名字要大写 = >这样才能让外部调用 小写的只能内部调用 注意: - 调用其他包的功能,需要先 import 导入,然后再使用;调用自己包中的功能时,直接调用即可(无需导入) - 文件中的函数首字母是小写,表示此函数只能被当前包内部文件调用。首字母是大写,则意味着任何包都可以调用。 # 输出 在终端将想要展示的数据显示出来,例如:欢迎登录、请输入用户名等 - 内置函数 - print - println - fmt包(推荐) - fmt.Print - fmt.Println 扩展:进程里有 stdin/stdout/stderr ## 注释 单行,多行 # 数据类型 - 整型,整数 - 字符串,文本 - 布尔型,真假 ```go package main import "fmt" func main() { // 整型 fmt.Println(666) fmt.Println(6 + 9) fmt.Println(6 - 9) fmt.Println(6 * 9) fmt.Println(16 / 9) // 商 fmt.Println(16 % 9) // 余数 // 字符串类型,特点:通过双引号 fmt.Println("lihui") fmt.Println("钓鱼要掉刀鱼,刀鱼到岛上钓") fmt.Println("lihui" + "SB") //fmt.Println("lihui" + 666) fmt.Println("lihui" + "666") // 对比 fmt.Println("1" + "2") // 结果:"12" fmt.Println(1 + 2) // 结果:3 // 布尔类型,真假 fmt.Println(1 > 2) // false 假 fmt.Println(1 < 2) // true 真 fmt.Println(1 == 2) fmt.Println(1 >= 2) fmt.Println("lihui" == "sb") // 超前 if 2 > 1 { fmt.Println("叫爸爸") } else { fmt.Println("孙子") } } ``` # 变量 可以理解为昵称。 - 声明 + 赋值 ``` var sd string = "老男孩lihui" fmt.Println(sd) var age int = 73 fmt.Println(age) var flag bool = true fmt.Println(flag) ``` - 先声明后赋值 ``` // 声明了一个字符类型变量 sd var sd string // 给sd变量赋值 sd = "老男孩lihui" fmt.Println(sd) ``` ## 变量名要求 1. 只包含字母、数字、下划线 2. 不能数字开头 3. 不能使用关键字 ```go break、default、func、interface、select、case、defer、go、map、struct、chan、else、goto、package、switch、const、fallthrough、if、range、type、continue、for、import、return、var ``` ## 建议 1. 见名知意 2. 驼峰命名 ## 变量简写 `name:= "lihui"` go编译器会认为声明变量不使用 就是耍流氓,声明必须使用,否则报错 ## 作用域 如果我们定义了大括号,那么在大括号中定义的变量。 - 不能被上级使用。 - 可以在同级使用。 - 可以再子级使用。 全局变量,未写在函数中的变量称为全局变量;不可以使用`v1:=xx`方式进行简化;可以基于因式分解方式声明多个变量;项目中寻找变量时最后一环。 局部变量,编写在函数{}里面的变量;可以使用任意方式简化;可以基于因式分解方式声明多个变量; ## 赋值及内存相关 ```go name := "lihui" ``` ![image-20250613150030868](assets/day1/image-20250613150030868.png) ```go name := "lihui" nickname := name ``` ![image-20250613150121048](assets/day1/image-20250613150121048.png) ```go name := "lihui" nickname := name name = "lihuibear" ``` ![image-20250613150428962](assets/day1/image-20250613150428962.png) #### 注意事项 使用int、string、bool这三种数据类型时,如果遇到变量的赋值则会拷贝一份。【值类型】 # 常量 ## const 可以定义局部,可以定义全局 ## iota 计数 ```go package main import "fmt" func main() { // iota // 示例1 const ( v1 = 1 v2 = 2 v3 = 3 v4 = 4 v5 = 5 ) fmt.Println(v1, v2, v3, v4, v5) // 示例2 /* const ( v1 = iota v2 v3 v4 v5 ) fmt.Println(v1, v2, v3, v4, v5) */ // 示例3 /* const ( v1 = iota + 2 v2 v3 v4 v5 ) fmt.Println(v1, v2, v3, v4, v5) */ // 示例4: /* const ( v1 = iota + 2 _ v2 v3 v4 v5 ) fmt.Println(v1, v2, v3, v4, v5) */ } ``` # 输入 让用户输入数据,完成项目交互。 - fmt.Scan - fmt.Scanln - fmt.Scanf # 条件语句 ## 最基本 ```go if 条件 { 成立后,此代码块执行 }else{ 不成立,此代码块执行 } ``` ## 多条件 ```go package main import "fmt" func main() { var length int fmt.Print("请输入你的长度:") fmt.Scanln(&length) if length < 1 { fmt.Println("没用的东西,还特么是坑") } else if length < 6 { fmt.Println("刚刚能用") } else if length < 18 { fmt.Println("生活和谐") } else { fmt.Println("太特么大了") } } ``` ## 嵌套 ``` go package main import "fmt" func main() { fmt.Println("欢迎致电10086,1.话费相关;2.业务办理;3.人工服务。") var number int fmt.Scanln(&number) if number == 1 { fmt.Println("话费服务,1.交话费;2.查询。") var n1 int fmt.Scanln(&n1) if n1 == 1 { fmt.Println("缴话费啦") } else if n1 == 2 { fmt.Println("查话费了") } else { fmt.Println("输入错误") } } else if number == 2 { fmt.Println("业务办理") } else if number == 3 { fmt.Println("人工服务") } else { fmt.Println("输入错误") } // 建议:条件的嵌套不要太多 } ```