package main
import "fmt"
func main() {
var a int = -1
if a > 0 {
fmt.Println("hello")
}else if a == 0{ //可以 if else if else 做条件判断
fmt.Println("world")
}else{
fmt.Println("haha")
}
}
func main() {
//if后面还可以跟操作
if err:=Connect();err != nil{
}
}
func main() {
var a string = "hello"
switch a {
//每个case均是字符串格式
case "hello":
fmt.Println(111)
case "world":
fmt.Println(222)
//每个switch 只能有一个default分支
default:
fmt.Println("无论如何都会执行的")
}
}
//一分支多个值,多个case要放到一起的时候
func main() {
var a = "hello"
switch a {
//每个case均是字符串格式,不同的case表达式用逗号分隔
//代表当a是 hello 或者 world 的时候,执行逻辑
case "hello","world":
fmt.Println(111)
case "other":
fmt.Println(222)
//每个switch 只能有一个default分支
default:
fmt.Println("无论如何都会执行的")
}
}
//分支表达式
//case后不仅仅可以是常量,还可以和if一样添加表达式
func main() {
var a = 11
switch { //注意的一点是,在switch后面不再加判断变量
case a>1:
fmt.Println(111)
case a > 1 && a < 20:
//case在第一个条件达成之后就跳出判断了,后面的判断将不再执行,假如前两个case都没有达成条件,将会执行最后的default
fmt.Println(222)
//每个switch 只能有一个default分支
default:
fmt.Println("无论如何都会执行的")
}
}
//case是一个独立的代码块,执行完毕后不会像C那样紧接着下一个case执行,
//为了兼容一些一直代码,便加入了 fillthrough关键字来实现这一功能 fillthrough之后,会执行下个case 不论是否匹配
func main() {
var s = "hello"
switch {
case s == "hello":
fmt.Println("hello")
fallthrough
case s!="world":
fmt.Println("紧接着要干的事")
}
}
//goto 通过标签进行代码间的无条件跳转。goto语句可以快速的跳出循环,避免重复
//使用goto退出多层循环
func main() {
// for 初始语句;条件表达式;结束语句
// 初始语句是在第一次循环前执行的语句,一般用于变量的初始化,如果在这里初始化了变量,那么变量的作用域会局限在这个for范围内
// 初始语句时可以被忽略的,但是初始语句后的 ; 必须写,
//for i := 1; i < 10; i++ {
i := 1 //在外部声明
for ; i < 10; i++ {
//循环体不停循环,知道条件表达式返回false自动退出循环,
fmt.Println("status", i)
if i == 3 {
break
//for循环可以通过break,goto,return,panic强制退出循环
}
if i == 9 {
fmt.Println("this is target")
}
}
}
// 无限循环,注意,需要有可控的退出循环的开关
func main() {
var i int
// 忽略for的所有语句,此时for循环就是无限循环
for {
if i == 3 {
break
}
// 将i++ 从for 的结束语句放到函数体的末尾,作用是一样的
i++
}
}
// 只有一个循环条件的循环,将if判断整合到for中
func main() {
var i int
//在for中使用if{}判断表达式进行判断,
//相当于其他语言中的whild,在while后添加一个判断条件表达式,满足条件的继续被执行,不满足就停止循环
for i >= 3 {
//if i == 3 {
// break
i++
}
}
//
//for的结束语句,每次循环结束时都会执行语句
//如过循环被break goto return panic 等语句强制退出,结束语句时不会被执行的
func main() {
var i int
//在for中使用if{}判断表达式进行判断,
//相当于其他语言中的whild,在while后添加一个判断条件表达式,满足条件的继续被执行,不满足就停止循环
for i >= 3 {
break
}
i++
//在i大于等于三的时候,i就不会自增了
}
/*键值循环,for range
for range
数组 切片 字符串返回索引和值
map 返回键和值
channel 只返回通道内的值*/
//遍历数组 切片 字符串
func main() {
for index, value := range []int{5, 4, 3, 2, 1} {
fmt.Printf("index:%d value:%d\n", index, value)
}
}
//遍历map
//遍历map,遍历输出的键值是无序的,如果需要有序的键值输出,需要对结果进行排序
func main() {
//键为string型 值为int型
m := map[string] int{
"yy":10,
"bb":12, //注意,这里的逗号必须有,不然会报错,和json数据结构正好相反,json是末尾加上,会报错
}
for key,value := range m{
fmt.Println(key,value)
//yy 10
//bb 12
}
}
//遍历chanel,只输出管道内的类型对应的数据
func main() {
//创建一个整型类型的通道
channel := make(chan int)
//启动一个goroutine,
go func() {
//给管道中填充数据
channel <- 1
channel <- 2
channel <- 3
//关闭管道
close(channel)
}()//声明完立马执行
//对管道进行遍历,知道管道关闭
for v:= range channel{
fmt.Println(v)
}
}
//总结:for 包含了初始化语句 条件表达式 结束语句三个部分 这三个部分均可省略
//在需要时,可以使用匿名变量对for range取到的值做取舍