七天学习Go语言,从0到0.03

愉快地周末过去了,今天给大家打来的是–“流程控制语句”

if-else

用于判断某个条件,条件成立,执行if 后边大括号里的内容,不成立则执行后续代码

 if a > 10 {
    
    
      return 1
} else {
    
    
      return 2
}

当然了, else if 在这里同样生效

if a > 10 {
    
    
    return 1
} else if a == 10 {
    
    
    return 2
} else if {
    
    
    return 3
}

完整示例代码:

package main
​
import (
    "fmt"
)
​
func GetA() (a int) {
    
    
    a = 1
    if a > 10 {
    
    
        return 1
    } else {
    
    
        return 2
    }}
​
func main() {
    
    
    var b = GetA()
    fmt.Println("返回: ", b)
}

在这里插入图片描述

这里说一下我的踩坑经验,因为我也是初学者,所以并不了解Go语言的规则,书中也没有写,此次记录如下:

  1. 任何内容必须写在函数体内
    在这里插入图片描述

  2. 主main函数不可返回return值
    在这里插入图片描述
    3.不可缺少主main函数
    在这里插入图片描述

for 循环

Go语言仅支持for循环,没有while和do-while循环

product := 1for i := 1; i < 5 ; i ++ {
    
    
​
        product *= i
​
}

在这里插入图片描述

for if 嵌套

i := 0
for{
    
    
    i ++
    if i > 50 {
    
    
          break
    }
}

在这里插入图片描述

需要注意的是

  1. 左大括号“{”必须和 for同一行

  2. Go语言的for循环允许在循环条件内定义初始化变量,不支持多个值逗号间隔,必须平行赋值多个变量

  3. ​Go语言支持continue 和 break来控制循环,更支持break中断哪一个循环
    在这里插入图片描述

循环作用域

这里的作用域,大家可以理解为类似于局部变量和全局变量的区别,当初始化变量写在for循环中的时候,他的作用于尽在循环内生效,若是写在循环外部,则会全局生效,他的作用域大于循环内的作用于,示例代码如下

1.内部作用变量a

for a :=0 ; a < 5 ; a++{
    
    
		fmt.Println(a)
}

2.外部作用变量a

a := 0
for ; a < 5 ; a++{
    
    
		fmt.Println(a)
}

大家可以看见,第二种方式初始化为空,但是依然需要使用分号来进行隔断,这是必须有的格式

省略表达式

大家可以看见,中间部位a<5 为判断条件,当条件符合时,会一直执行,当条件不符合时,则停止循环,若是将之去掉省略,循环会默认死循环,即无限循环,可以配合if进行填写

a := 0
	JumpLoop
	for ; ; a++ {
    
    
		if a > 5 {
    
    
			break JumpLoop
		}
	}

当然了,甚至连 a ++ 都可以省略,他会默认每次都调用此条件,使代码进一步简洁,并且美观,无需再使用分号进行占位

a := 0
	for {
    
    
		if a > 5 {
    
    
			break
		}
		a++
	}

再次简写

a := 0
	for a < 5 {
    
    
		a++
	}

当然了,甚至连 a ++ 都可以省略,他会默认每次都调用此条件,使代码进一步简洁,并且美观,无需再使用分号进行占位

a := 0
	for {
    
    
		if a > 5 {
    
    
			break
		}
		a++
	}

再次简写

a := 0
	for a < 5 {
    
    
		a++
	}
}

在这里插入图片描述

for-rang 循环

for-rang循环结构是go语言特有的一种迭代结构,可以遍历数组、切片、字符串、map及通道

一般形式如下

for key, value := range 复合变量值{
//逻辑语句
}

for position, char := range str {
//逻辑语句
}

每个rune字符和索引在for-range循环中的值是一一对应的,他能自动根据UTF-8规则识别Unicode编码 的字符

for-range遍历的返回值规律如下

1.数组、切片、字符串返回索引和值
2.Map返回键和值
通道(channel)只返回通道内的值

遍历切片

案例如下:key和value分别代表切片的下标及下标对应的值

package main

import (
	"fmt"
)

func main() {
    
    
	for key, value := range []int{
    
    0, 1, -1, -2} {
    
    
		fmt.Printf("key:%d value:%d\n", key, value)
	}

}

在这里插入图片描述
需要注意的是,这里使用的是pringf,而非println

遍历字符串案例

package main

import (
	"fmt"
)

func main() {
    
    
	var str = "hi"
	for key, value := range str {
    
    
		fmt.Printf("key:%d value:0x%x\n", key, value)
	}

}

在这里插入图片描述

此时出来的其实是十六进制的值,如果使用%d进行占位的话,默认是ascii值

遍历map

对于map类型,key和value分别代表map的索引建和值,只不过在输出的时候,输出的键是无序的,若是想要有序输出,需要对结果进行自排序

package main

import (
	"fmt"
)

func main() {
    
    
	m := map[string]int{
    
    
		"go":  100,
		"web": 100,
	}
	for key, value := range m {
    
    
		fmt.Println(key, value)
	}

}

在这里插入图片描述

遍历通道

通道可以通过for range进行遍历,在遍历通道的时候只输出一个值,即通道内类型对应的数据


// var.go
package main

import (
	"fmt"
)

func main() {
    
    
	c := make(chan int) //创建了一个整形类型的通道
	go func() {
    
             //启动了一个goroutine
		c <- 7 //将数据推进通道
		c <- 8
		c <- 9
		close(c)
	}()
	for v := range c {
    
    
		fmt.Println(v)
	}
}

在这里插入图片描述

匿名变量

下划线匿名变量可以将之理解为一种占位符,匿名变量不参与空间分配,也不会占用一个变量的名字
同样的,输出的内容也可以对key/value单独输出

package main

import (
	"fmt"
)

func main() {
    
    
	m := map[string]int{
    
    
		"go":  100,
		"web": 100,
	}
	for _, value := range m {
    
    
		fmt.Println(value)
	}
}

在这里插入图片描述

Switch-case语句

表达式的值不必为常量,甚至不用是整数。Case从上到下的顺序进行求值,直到找到匹配的项。Case与case之间是独立的代码块,不需要通过break来结束当前的代码块。Go语言规定,每个switch 只能有一个default分支

package main

import (
	"fmt"
)

func main() {
    
    
	var a = "love"
	switch a {
    
    
	case "love":
		fmt.Println("love")
	case "programing":
		fmt.Println("programing")
	default:
		fmt.Println("none")
	}
}

在这里插入图片描述
Go语言的一个分支多个支的写法:

package main

import (
	"fmt"
)

func main() {
    
    
	var language = "golang"
	switch language {
    
    
	case "golang", "java":
		fmt.Println("popular languages")
	}
}

在这里插入图片描述

分支表达式:

package main

import (
	"fmt"
)

func main() {
    
    
	var r int = 6
	switch {
    
    
	case r > 1 && r < 10:
		fmt.Println(r)
	}
}

在这里插入图片描述

Goto语句

Goto语句用来跳转至指定标签,进行代码间的无条件跳转。

package main

import (
	"fmt"
)

func main() {
    
    
	for x := 0; x < 5; x++ {
    
     //外循环
		for y := 0; y < 5; y++ {
    
     //内循环
			if y == 2 {
    
     //条件语句
				goto breakTag //跳转到标签
			}
		}
	}
	return
breakTag:
	fmt.Println("done")
}

在这里插入图片描述

此处 breakTag为自定义标签,return若是不手动返回,条件不成立也会执行breakTag代码
此处用法多用于,多次调用

break语句

Go标签中的break语句同样可以结束for、switch、和select代码块,此处在for循环中有介绍

// var.go
package main

import (
	"fmt"
)

func main() {
    
    
OuterLoop: //外层循环的标签
	for i := 0; i < 2; i++ {
    
     //外循环
		for j := 0; j < 5; j++ {
    
     //内循环
			switch j {
    
     //用switch进行数值分支j进行判断
			case 1: //条件满足 j=1时,结束标签
				fmt.Println(i, j)
				break OuterLoop //退出标签到对应的循环之外
			case 2:
				fmt.Println(i, j)
				break OuterLoop
			}
		}
	}
}

在这里插入图片描述

Continue语句

Continue语句用来结束当前循环,并开始下一次循环的迭代过程,它仅限在循环内部使用。若是在continue后添加标签,表示结束标签对应的语句的当前循环,并开启下一次的外循环。

package main

import (
	"fmt"
)

func main() {
    
    
OuterLoop:
	for i := 0; i < 2; i++ {
    
    
		for j := 0; j < 5; j++ {
    
    
			switch j {
    
    
			case 3:
				fmt.Println(i, j)
				continue OuterLoop
			}
		}
	}
}

在这里插入图片描述

今天的分享就到这了,一天学习十分钟,卷死别人​

猜你喜欢

转载自blog.csdn.net/weixin_48421613/article/details/123179417