golang运算符&流程控制
运算符#
算数运算#
func main() {
var a int = 10
var b int = 8
var c = 3.14
var d = 5.15
fmt.Println(a + b) // 18
fmt.Println(a - b) // 2
fmt.Println(a * b) // 80
fmt.Println(a / b) // 1, Go中,如果运算的都是整数,相除后 会默认去掉小数,保留整数部分,
fmt.Println(c / d) // 0.6097087378640776 ,运算的是浮点数正常计算
fmt.Println(a % b) // 2
}
自增和自减#
在Go中,++和--是单独的语句,不和其他语言一样属于运算符
并且只能单独使用,不能进行赋值操作
var i int = 10
// 错误写法,不能赋值且没有前置符号语法
a = i++
a = i--
// 正确写法,
i++
i--
关系运算符#
逻辑运算符#
赋值运算符#
位运算符#
流程控制#
if else 语法#
func main() {
/* 语法一 */
var status1 = true
var status2 = false
// 表达式1
if status1 {
fmt.Println("分支1")
// 表达式2
} else if status2 {
fmt.Println("分支2")
// 否则
} else {
fmt.Println("分支3")
}
/* 语法二 */
// 和语法一的区别,语法1是区域内的全局变量,而语法二是自己结构内的局部变量
if age := 34; age > 20 {
fmt.Println(age)
}
}
循环#
for基本语法#
func main() {
/*
for 初始语句;条件表达式;结束语句 {
循环语句体
}
*/
// 语法一
for i := 1; i <= 10; i++ {
fmt.Println(i)
}
// 语法二 初始语句定义在外
num := 1
for ; num <= 10; num++ {
fmt.Println(num)
}
// 语法三 初始语句和结束语句都省略
number := 1
for number <= 10 {
fmt.Println(number)
number++ // 如果不写number++ 则Number一直=1,一直符合条件,则死循环
}
// 语法四,语句都省略,无限循环
n := 1
for {
if n <= 10 {
fmt.Println(n)
} else {
break // 死循环使用break跳出循环
}
n++
}
}
for range 键值循环#
for range可以遍历数组、切片、字符串、map及通道
通过for range遍历的返回值:
- 数组、切片、字符串返回索引和值
- map返回键值对
- 通道只返回通道内的值
func main() {
/*迭代字符串 */
var str = "你好golang"
// key接收索引,v接受值, 要迭代的字符串
for k, v := range str {
fmt.Printf("索引是%v--值是%c\n", k, v)
}
/* 迭代切片 */
var arr = []string{"python", "django", "go"}
for _, v := range arr {
fmt.Println(v)
}
}
switch case#
使用switch语句可方便的对大量的值进行条件判断,每个switch只能有一个default分支
基本语法:
func main() {
/* 语法一 */
file := ".html"
// 表达式
switch file {
// 判断是否相等
case ".css":
fmt.Println("css")
case ".html":
fmt.Println("html")
break // 可写可不写
// 相当于 if里面的 else
default:
fmt.Println("err")
}
/* 语法二 */
switch name := "li"; name {
case "li":
fmt.Println(name)
}
/* 语法三 一个Case可以有多个值,用英文逗号间隔*/
num := 5
switch num {
case 1, 3, 5, 7, 9:
fmt.Println("奇数")
case 2, 4, 6, 8, 10:
fmt.Println("偶数数")
}
/* 语法四 分支可以用使用表达式*/
var age int = 18
// 分支用表达式的时候,Switch后面不要跟判断的的变量
switch {
case age >= 18 && age <= 60:
fmt.Println("ok")
}
}
switch穿透:
fallthrough语法可以执行满足条件的case的下一个case
func main() {
var num = 10
// 会同时输出 10 和11
switch {
case num == 10:
fmt.Println("10")
fallthrough // 穿透到下一层case
case num == 11:
fmt.Println("11")
case num == 12:
fmt.Println("12")
}
}
break、continue、goto#
多重循环中,可以用标号label标出想break、continue的循环
func main() {
// 使用label标记外层循环
label1:
for j := 1; j <= 10; j++ {
for n := 1; n <= 10; n++ {
if n == 5 {
continue // 跳出本次循环开始下一次循环
} else if n == 6 {
continue label1 // 跳出label1的本次循环开始下一次循环
}
if n == 7 {
break // 跳出本次循环
} else if n == 8 {
break label1 // 跳出label1的循环
}
fmt.Println(n)
}
}
}
goto语句通过标签进行代码间的无条件跳转,可以快速跳出循环
func main() {
// 打印完a之后,goto到 label3 执行d,略过b和c
fmt.Println("a")
goto label3
fmt.Println("b")
fmt.Println("c")
label3:
fmt.Println("d")
}
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-02-19 2.Python封装练习及私有属性
2021-02-19 1.Python面向对象基础