1.初识包管理
关于包管理的总结:
一个文件夹可以称为一个包。
在文件夹(包)中可以创建多个文件。
在同一个包下的每个为文件中必须指定 包名称且相同
重点:关于包的分类
main包,如果是main包,则必须写一个main函数,此函数就是项目的入口(main主函数)。 编译生成的就是一个可执行文件。
非main包,用来将代码进行分类,分别放在不同的包和文件中。
注意:
调用其他包的功能,需要先 import 导入,然后再使用;调用自己包中的功能时,直接调用即可(无需导入)
文件中的函数首字母是小写,表示此函数只能被当前包内部文件调用。首字母是大写,则意味着任何包都可以调用。
2.输出
在终端将想要展示的数据显示出来,例如:欢迎登录、请输入用户名等。。。
内置函数(不推荐)
println
fmt包(推荐)
fmt.Print
fmt.Println
扩展:进程里有 stdin/stdout/stderr 。
package main import "fmt" func main() { // 基于内置函数(不推荐) //print("你好 \n") //print("我是马云 \n") //println("你好") //println("我是马云") // fmt包(推荐) //fmt.Print("你好 \n") //fmt.Print("我是马云 \n") //fmt.Println("你好") //fmt.Println("我是马云") //fmt.Println("我叫", "马云", "我媳妇", "是个", "....") //fmt.Println("我叫马云我媳妇是个....") // fmt包 扩展:格式化输出 // %s,占位符 "文本" // %d,占位符 整数 // %f,占位符 小数(浮点数) // %.2f,占位符 小数(保留小数点后2位,四舍五入) // 百分比 fmt.Printf("老汉开着%s,去接%s的媳妇,多少钱一次?%d块。嫂子给打折吧,%.2f怎么样?小哥哥包你100%%满意", "车", "老男孩", 100, 3.889) }
3.注释
- 单行注释, //
- 多行注释, /* */
快捷:contrl + ?
4.初识数据类型
- 整型,整数
- 字符串,文本
- 布尔型,真假
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("好人") fmt.Println("离离原上草,一岁一枯荣") fmt.Println("aaa" + "sss") //fmt.Println("alex" + 666) fmt.Println("aaa" + "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("AAA" == "aaa") // 超前 if 2 > 1 { fmt.Println("222") } else { fmt.Println("111") } }
5.变量
可以理解为昵称。
- 声明 + 赋值
var sd string = "wowoow" fmt.Println(sd) var age int = 73 fmt.Println(age) var flag bool = true fmt.Println(flag)
先声明后赋值
// 声明了一个字符类型变量 sd var sd string // 给sd变量赋值 sd = "wowoow" fmt.Println(sd)
5.1 声明变量的意义?
- 编写代码省事
// 文本,请将文本输出3次:"伤情最是晚凉天,憔悴斯人不堪怜。" var message string = "伤情最是晚凉天,憔悴斯人不堪怜。" fmt.Println(message) fmt.Println(message) fmt.Println(message)
存储结果,方便之后使用
// 存储结果,方便之后使用 var v1 int = 99 var v2 int = 33 var v3 int = v1 + v2 var v4 int = v1 * v2 var v5 int = v1 + v2 + v3 + v4 fmt.Println(v1, v2, v3, v4, v5)
存储用户输入的值
var name string fmt.Scanf("%s", &name) // 用户输入字符串并赋值给name变量 if name == "sss" { fmt.Println("用户名输入正确") } else { fmt.Println("用户名输入失败") }
5.2 变量名要求
- 【要求】变量名必须只包含:字母、数字、下划线
var %1 string,错误 var $ string,错误
【要求】数字不能开头
var 1 string 错误 var 1name string 错误 var _ string 正确
【要求】不能使用go语言内置的关键字
var var string = "南通州北通州南北通州通南北" 错误
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
- 建议
- 变量名见名知意:name/age/num ; v1、v2、v3
- 驼峰式命名:myBossName / startDate
练习题:
var n1 int var data bool var _9 string
5.3 变量简写
- 声明+赋值
var name string = "我" var name = "我" name := "我" // 推荐
先声明再赋值
var name string var message string var data string var name,message,data string name = "我" message = "中奖了" data = "中了5000w"
因式分解,例如:声明5个变量,分别有字符串、整型
var ( name = "李白" age = 18 hobby = "吟诗作对" salary = 1000000 gender string // 只声明但不赋值,有一个默认: "" length int // 只声明但不赋值,有一个默认: 0 sb bool // 只声明但不赋值,有一个默认: false ) fmt.Println(name, age, hobby, salary, gender,length,sb)
扩展:go编译器会认为声明变量不使用 就是浪费资源。
5.4 作用域
如果我们定义了大括号,那么在大括号中定义的变量。
- 不能被上级使用。
- 可以在同级使用。
- 可以再子级使用。
package main import "fmt" func main() { name := "韩信" fmt.Println(name) if true { age := 18 name := "alex" fmt.Println(age) fmt.Println(name) } fmt.Println(name) }
全局变量和局部变量
- 全局变量,未写在函数中的变量称为全局变量;不可以使用
v1:=xx
方式进行简化;可以基于因式分解方式声明多个变量;项目中寻找变量时最后一环。 - 局部变量,编写在{}里面的变量;可以使用任意方式简化;可以基于因式分解方式声明多个变量;
package main import "fmt" // 全局变量(不能以省略的方式) var school string = "清华大学" // 可以 //var school = "清华大学" // 可以 //school := "清华大学" // 不可以 var ( v1 = 123 v2 = "你好" v3 int ) func main() { name := "露娜" // 局部变量 fmt.Println(name) if true { age := 18 // 局部变量 name := "tom" // 局部变量 fmt.Println(age) fmt.Println(name) } fmt.Println(name) fmt.Println(school) fmt.Println(v1, v2, v3) }
5.5 赋值及内存相关
示例1:
name := "妲己"
示例2:
name := "wwwwww" nickname := name
注意:这一点与 python 不同。
package main import "fmt" func main() { name := "小乔" nickname := name fmt.Println(name, &name) fmt.Println(nickname, &nickname) }
示例3:
name := "甄姬" nickname := name name = "luna"
package main import "fmt" func main() { name := "www" nickname := name fmt.Println(name, &name) fmt.Println(nickname, &nickname) name = "wwwwww" fmt.Println(name, &name) fmt.Println(nickname, &nickname) }
注意事项
使用int、string、bool这三种数据类型时,如果遇到变量的赋值则会拷贝一份。【值类型】
name := "大乔" nickname := name
提示:后续在数据类型中会详细再讲解。
阶段练习题
package main
的作用?- 单行注释和多行注释分别是什么?
- 下面声明变量的方式错误的有哪些?
var name = "武松" var age int = 18 hobby = "嫂子" nickName string = "一米八大高个" webSite := "我在景阳冈打老虎"
var age int = 18 age = 19
下面声明变量的方式正确的有哪些?
var v1,v2,v3 int var ( v6 = 123 v7 string ) var v4,v5 = 11,22 v4,v5 = 11,22 v4,v5 := 11,22
- 变量名规范。
- 看代码写结果
package main import "fmt" var number = 9999 func main() { number := 666 fmt.Println(number) }
看代码写结果
package main import "fmt" var number = 99 func main() { number := 66 if true { number := 33 fmt.Println(number) } fmt.Println(number) }
看代码写结果
package main import "fmt" var number = 99 func main() { number := 66 if true { number := 33 fmt.Println(number) } number = 88 fmt.Println(number) }
看代码写结果
package main import "fmt" var number = 99 func main() { if true { fmt.Println(number) } number = 88 fmt.Println(number) }
看代码写结果
package main import "fmt" var number = 99 func main() { number := 88 if true { number = 123 fmt.Println(number) } fmt.Println(number) }
看代码写结果
package main import "fmt" var number = 99 func main() { fmt.Println(number) number := 88 if true { number = 123 fmt.Println(number) } fmt.Println(number) }