ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 基本语法 * * * * * --: 作者:jsh 时间:2018年8月30日 * * * * * ### 常量 常量使用关键字 const 定义,用于**存储不会改变的数据**。 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 ~~~ const PI = 3.1415926 ~~~ 在 Go 语言中,你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。 * 显式类型定义: const b string = "abc" * 隐式类型定义: const b = "abc" 常量的值必须是能够在编译时就能够确定的;你可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。 * 正确的做法:const c1 = 2/3 * 错误的做法:const c2 = cc() // const initializer cc() is not a constant **因为在编译期间自定义函数均属于未知,因此无法用于常量的赋值,但内置函数可以使用,如:len()。** 当常量定义多个,可以定义一个常量组。例如: ~~~ const ( a = "123" b = 456 c = len(demo) ) ~~~ ### 变量 声明变量的一般形式是使用 var 关键字:var identifier type。 ~~~ var a int var b boolean var c string ~~~ 声明变量组 ~~~ var ( a int b boolean c string ) ~~~ 当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil。记住,所有的内存在 Go 中都是经过初始化的。 变量的命名规则遵循骆驼命名法,即首个单词小写,每个新单词的首字母大写,例如:numShips 和 startDate。但如果你的全局变量希望能够被外部包所使用,则需要将首个单词的首字母也大写 变量作用域:一个变量(常量、类型或函数)在程序中都有一定的作用范围,称之为作用域。如果一个变量在函数体外声明,则被认为是全局变量,可以在整个包甚至外部包(被导出后)使用,不管你声明在哪个源文件里或在哪个源文件里调用该变量。 Go语言中,使用大小写来决定常量、变量、类型、接口、结构体或函数,是否可以被外部包所调用 根据约定: * 函数名首字母 小写即为private * 函数名首字母 变量赋值 ~~~ var a int // 声明变量 func main() { a = 10 // 变量赋值 } ~~~ ### 选择结构 思考:三种结构? Go语言中if....else....语法如下: ~~~ if 表达式 { 条件成立---输出 } else { 条件不成立--输出 } ~~~ ~~~ // 流程控制 a := 10 if a := 1; a < 2 { fmt.Println(a) // 变量作用域 考虑此时变量会输出多少 } ~~~ switch.......case......使用 ~~~ func chose(i int) (y string){ switch i { case 1: return "a" case 2: return "a" case 3: return "b" fallthrough default: return "c" } } ~~~ fallthrough作用 :指定fallthrough 是继续检查sencond Go语言提供了标签的使用 标签的名称是大小写敏感的,为了提升可读性,一般建议使用全部大写字母 ~~~ LABEL1: for { for i := 0; i <= 10; i++ { a++ fmt.Println(a) break LABEL1 } } ~~~ ~~~ LABEL1: for { for i := 0; i <= 10; i++ { a++ fmt.Println(a) go to LABEL1 } } ~~~ ### 循环结构 Go语言与其它语言一样,也提供了for的使用 ~~~ for 初始化语句; 条件语句; 修饰语句 {} ~~~ ~~~ package main import "fmt" func main() { for i := 0; i < 5; i++ { fmt.Printf("This is the %d iteration\n", i) } } ~~~ 无限循环 ~~~ for { for i := 0; i <= 10; i++ { a++ fmt.Println(a) break LABEL1 } } ~~~ for...range循环 ~~~ m1 := map[int]string{1: "a", 2: "b", 3: "c", 4: "d", 5: "e"} m2 := make(map[string]int) for k, v := range m1 { m2[v] = k } ~~~ 循环结构学会了吧,那就写一个乘法口诀表吧!!! break和continue ~~~ for { i = i - 1 fmt.Printf("The variable i is now: %d\n", i) if i < 0 { break } } ~~~ 因此每次迭代都会对条件进行检查(i < 0),以此判断是否需要停止循环。如果退出条件满足,则使用 break 语句退出循环。 思考:以下程序输出什么: ~~~ func main() { for i:=0; i<3; i++ { for j:=0; j<10; j++ { if j>5 { break } print(j) } print(" ") } } ~~~ 一个 break 的作用范围为该语句出现后的最内部的结构,它可以被用于任何形式的 for 循环(计数器、条件判断等)。但在 switch 语句中,break 语句的作用结果是跳过整个代码块,执行后续的代码。 ~~~ func main() { for i := 0; i < 10; i++ { if i == 5 { continue } print(i) print(" ") } } ~~~ 关键字 continue 忽略剩余的循环体而直接进入下一次循环的过程,但不是无条件执行下一次循环,执行之前依旧需要满足循环的判断条件。 课后作业: 请输出: ~~~ * *** ***** ******* ********* ******* ***** *** * ~~~