1.数据类型
package main
import "fmt"
func main() {
// 数据类型集合
// bool类型 布尔类型 只能是常量const
var v1 bool = false
var v2 = true
// int类型 整型和浮点型 数字的形式
var v3 int = 123
var v4 = 888
// string类型 字符串型 字符串的形式 “123”, 'test'
var v5 string = "123" // 单引号‘’ 双引号“” 都是可以的
var v6 = "this is string type"
// float型 浮点型 float32/float64 1.122, 2.333
var v7 float32 = 1.2222
var v8 float64 = 1.222222222
// 其他类型 其他类型用到百度即可
fmt.Printf("v1 : %t | type=%T\nv2 : %t | type=%T\nv3 : %d | type=%T\nv4 : %d | type=%T\nv5 : %s | type=%T\nv6 : %s | type=%T\nv7 : %f | type=%T\nv8 : %f | type=%T\n", v1, v1, v2, v2, v3, v3, v4, v4, v5, v5, v6, v6, v7, v7, v8, v8)
}
输出结果
2.变量定义
package main
import "fmt"
// 全局变量
var v1 string = "golang very good~"
var v2 int = 123
var v3 = "golang"
// v4 := 123 全局中不可使用的方式
var v4 = 123
// 可以简写为:
var (
v1 string = "golang very good~"
v2 int = 123
v3 = "golang"
v4 = 123
)
// 或者
var v1, v2, v3, v4 = "golang very good~", 123, "golang", 123
func main() {
// 局部变量 变量所在的未知对于不同的作用域,比如局部变量不能在全局中被调用
var name int = 1 // 声明变量指定数据类型并赋值
var user = "alinx" // 声明变量自动识别数据类型
passwd := "123456" // 直接声明自动识别数据类型
// 输出变量,变量类型
fmt.Printf("变量类型: %d = %T %s = %T %s = %T) \n", name, name, user, user, passwd, passwd)
fmt.Printf(" v1 = %s\n v2 = %d\n v3 = %s\n v4 = %d\n", v1, v2, v3, v4)
}
编译后输出结果
3.流程语句
package main
import "fmt"
func main() {
// if 条件控制语句
var v1 = true
if v1 {
// 当if v2的结果为true 执行结果为真
fmt.Println("结果为真")
} else {
// 当if v2的结果为false 执行结果为假
fmt.Println("结果为假")
}
var v2 = false
if v2 {
// 当if v2的结果为false 执行结果为假
fmt.Println("结果为假")
} else {
// 当if v2的结果为true 执行结果为真
fmt.Println("结果为真")
}
// else if 语句 多分支判断流程语句
v3 := 80
// 如果匹配执行如下语句
if v3 >= 90 {
fmt.Println("很优秀哦")
// 如果匹配执行如下语句 匹配项
} else if v3 >= 80 {
fmt.Println("要加油哦")
// 如果匹配执行如下语句
} else if v3 >= 70 {
fmt.Println("你怎么有点笨呢")
// 如果以上都没有条件匹配那么执行如下语句
} else {
fmt.Println("不努力怎么赚钱?")
}
// 对于else if 语句 而言, else if 可以有多个,else只能有一个
// switch-case 选择语句
// 根据输入的条件选择对于的执行代码体
operate := "add"
// 针对 operate 对象匹配方式
switch operate {
// 如果输入值为: add 执行如下语句
case "add":
fmt.Println("添加数据")
// 如果输入值为: del 执行如下语句
case "del":
fmt.Println("删除数据")
// 如果输入值为: update 执行如下语句
case "update":
fmt.Println("更新数据")
// 如果输入值为: query 执行如下语句
case "query":
fmt.Println("查询数据")
// 如果以上都不匹配执行如下默认项
default:
fmt.Println("默认操作,以上选项都不匹配")
}
// switch-case 表达式的方式
// score := 80
// switch { 可简写为
switch score := 80; {
// 根据条件选择对于的值进行执行
case score >= 90:
fmt.Println("优秀")
// 根据条件选择对于的值进行执行
case score >= 80:
fmt.Println("不错")
fallthrough // 默认执行完语句后就退出流程了,如果加此声明,可以继续执行下一条件
// 根据条件选择对于的值进行执行
case score >= 70:
fmt.Println("要加油了 继续执行的语句 fallthrough 效果")
// 默认语句
default:
fmt.Println("不努力以后怎么开豪车,牵美女?")
}
// for 循环语句
/* for 循环语句分为三部分组成
初始化语句 条件语句 后置语句
i := 1 i <= 3 i++
*/
for i := 1; i <= 3; i++ {
fmt.Println(i) // 直到条件为 false 才会停止执行
}
// 打印99乘法表
// 定义初始化值,并自增
for h := 1; h <= 9; h++ {
// 输出换行符
fmt.Println("")
// 与上一个循环对比,并输出相乘的结果; 自增,并小于外层循环体的值
for s := 1; s <= h; s++ {
// 格式化输出 数字的形式
fmt.Printf("%d * %d = %d\t", h, s, (h * s))
}
}
fmt.Println("") // mac问题加换行 非mac无视
// for break 语句
for i := 1; i < 5; i++ {
if i == 2 { // 条件如果匹配则跳出循环
break //break 如果条件匹配则 跳出并结束循环语句
}
fmt.Println("break 如果条件匹配则 跳出并结束循环语句")
}
// for continue
for a := 1; a > -3; a-- {
if a == -1 {
fmt.Println("条件匹配")
continue // 跳出当前循环 继续执行剩余循环语句
fmt.Println("执行我吗?") // 此语句由于continue语句无法执行
}
fmt.Println(a)
}
// 类 while 循环
var sum = 0
i := 1
for i <= 100 {
sum += i
i++
}
fmt.Printf("高斯求和: %d\n", sum)
// 死循环
i = 0
for {
i++
if i == 5 { // 省略此break 即为死循环
break
}
fmt.Println(i)
}
// 使用control + c 停止
// 可以结合break使用
// for-range 遍历
// 用于遍历可迭代对象的每一个元素,例如字符串,数组,切片,映射,通道等
text := "I love golang"
for i, e := range text {
fmt.Printf("%d %s\n", i, e)
}
/*
针对包含Unicod e 字符的字符串遍历是 需要使用 for range range 返回两个元素分别为字
节索引 和 rune 字符, 可通过空白标识符忽略 需要 接收的 变量
*/
// label 与 goto
// 可以通过goto 语句任意跳转到当前函数指定的label位置
sums := 0
ii := 1
START: // 定义START标签
if ii > 100 {
goto END // 跳转END标签
} else {
sums += i
i++
goto START // 跳转到START标签
}
END: // 定义END标签
fmt.Println(sums)
// break continue 也是可以在语句中结合使用的
}
流程语句执行结果