Go_语言入门
Hello word示例
package main // 定义包名, main声明是一个可独立执行的程序, 每个 Go 应用程序都包含一个名为 main 的包。 import "fmt" // 导入包 func main() { // 入口函数 fmt.Println("hello word") // 调用打印方法 }
常量变量
常量 : 运行过程中不可被改变
只能修饰 布尔值, 数字(整数, 浮点数, 复数)和字符串
// 声明方式 const 标识符 [type] = value // [] 代表可选, go语言会自动判断类型 // 示例 const b string = "hello word" const b = "hello word" const Pi = 3.1415936 // 简写 const( a = 0 b = 1 c = 2 ) // 对于这种自增的, 常量声明, go内置了iota关键字, 每次出现时他的值都会变为0 const ( a = iota // 初始值0 b // 1 c // 2 )
变量: 代号, 在go中可被重新赋值相同的数据类型
变量可定义为各种类型
// 声明方式1, 只声明,使用该类型的默认值 var 标识符 type // 声明方式2, 声明且赋值, 省略var关键字, 会根据值的类型自动设置类型 var 标识符 = 值 // 声明方式3, 声明且赋值, 省略var关键字, 会根据值的类型自动设置类型 标识符 := 值 // 声明方式4, 多个同类型变量声明 var 标识符1, 标识符2 type // 声明方式5, 多个变量声明(省略var关键字, 且可不同类型), 且赋值(接收函数的多返回值) 标识符1, 标识符2 := 值1, 值2 // 声明方式6, 多个变量声明 Var( a int b string )
代码示例
package main import "fmt" func main() { var name0 string fmt.Println(name0) // 空串 var name1 = "富强 民主 文明 和谐" fmt.Println(name1) // 富强 民主 文明 和谐 name2 := "你好 世界" fmt.Println(name2) // 你好 世界 var name3, name4 string fmt.Println(name3, name4) // 空串 name5, age := "魏自由", 18 fmt.Println(name5, age) // 魏自由 18 var( name6 = "平等" age2 = 19 ) fmt.Println(name6, age2) //平等 0 }
注意事项
方法内声明变量一定要使用,否则无法通过编译
语句一定要在方法内, 像下面这种赋值存在于全局是不被允许的, 全局变量只能通过 = 来声明并且赋值
package main var a int a = 10
变量类型
值类型: 基本数据类型int, float, bool, string以及数组和struct, 内存通常在栈中分配
引用类型: 指针, slice, map, chan等, 内存通常在堆上分配.通过GC回收
变量的声明周期
在函数外部声明的变量叫做全局变量, 声明周期作用域整个包, 如果是公开的,则作用于整个程序
在函数内部声明的变量叫做局部变量, 生命周期仅限于函数
另外还有函数中代码块内的变量
package main import "fmt" func main() { for i:=0;i<3;i++{ fmt.Println(i) } fmt.Println(i) // 无法找到i变量 }
流程控制
条件分支
if - else if - else, 不用过多赘述, 就是多选一的关系
package main import "fmt" func main() { var b = 66 var a int fmt.Scanf("%d", &a) if a < b{ fmt.Println("猜小了") }else if a > b{ fmt.Println("猜大了") }else{ fmt.Println("猜对了") } }
switch case语句: 计算switch后的语句, 与case后的值比较.(与其他语言不同, go的switch语句默认不会穿透, 也就是说不用break, 如果要穿透就要使用关键字fallthrough)
package main import "fmt" func main(){ var a int = 10 switch a { case 0, 1, 2: // 特性: case多值 fmt.Println("a = 0") case 10: fmt.Println("a = 10") // 此条打印 default: fmt.Println("a is equal default") } }
穿透示例(只会穿透到下一个执行, 如果下一个没有穿透就会终止)
package main import "fmt" func main(){ var a int = 0 switch a { case 0, 1, 2: // 多值 fmt.Println("a = 0") // 打印 fallthrough case 10: fmt.Println("a = 10") // 打印 default: fmt.Println("a is equal default") } }
另一个特性: case 条件
var i = 0 switch { case i > 0 && i < 10: fmt.Println("0-10") case i >= 10 && i<20: fmt.Println("10-20") }
goto: 最好不要去使用
package main import "fmt" func main(){ var age int gotolabel: //标识符: 定义了一个位置 fmt.Printf("未满18周岁禁止访问!\n"); fmt.Printf("请输入你的年龄:\n"); fmt.Scanf("%d", &age); if (age < 18) { goto gotolabel; //跳转到gotolabel }else { fmt.Printf("正在进入!\n"); } }
循环语句
go语言只提供了for循环这一种用法, 以及for range去遍历容器类型
经典for循环
/* for 初始操作; 结束条件; 每次的操作{ 代码块 } */ package main import "fmt" func main(){ for i:= 0; i<10;i++{ fmt.Println(i) } }
break : 循环终止
continue : 不再执行后面的代码, 执行结束操作再从头开始
示例:
package main import "fmt" func main(){ for i:= 0; i<10;i++{ if i==7{ continue } fmt.Println(i) } }
for range
package main import "fmt" func main(){ str := "hello world" for i, v := range str{ // i 索引, v unicode fmt.Println(i, v, string(v)) } }