Golang控制语法

Golang

1 if分支控制

分支控制有:单分支,双分支,多分支

1.1 单分支

语法

if 条件 {
	执行代码
}

如输入一个年龄是否成年

package main
import "fmt"

func main(){

	var age int
	fmt.Scamln(&age)
	if age > 18{
		fmt.Println("成年")
	}
}

流程图
在这里插入图片描述

1.2 多分支

语法

if 条件{
	执行代码
}else{
	执行代码
}

输入年龄判断是否成年

package main
import "fmt"

func main(){

	var age int
	fmt.Scamln(&age)
	if age > 18{
		fmt.Println("成年")
	}else{
		fmt.Println("未成年")
	}
}

流程图
在这里插入图片描述
注意事项:
1.else比如在}后面不可以另起一行,因为这个是Golang的规范
2.if后面的条件可以不带括号,最好不带,因为这也是Golang的规范
3.if和else后面必须有括号括起来。这也是Golang的规范。如果是java的话就可以不括起来

1.3 多分支

语法

if 条件 {
	执行语句
}else if 条件{
	执行语句
}else{
	执行语句
}

求解方程的解

package main
import (
	"fmt"
	"math"
)

func main(){
	var a float64 = 3.0
	var b float64 = 6.0
	var c float64 = -3.0

	m := b * b - 4 * a * c
	if m > 0 {
		  x1 := -b + math.Sqrt(m) / 2 * a * c
		  x2 := -b - math.Sqrt(m) / 2 * a * c
		  fmt.Println(x1,x2)
	}else if m == 0{
		x1 := -b /2 * a * c
		fmt.Println(x1)

	}else{
		fmt.Println("无解")
	}

}

主意事项
·1.else可以没有

2 switch分支结构

Golang中的switch的分支结构和其他语言的switch还是有很大区别的。
所以我想记录下Golang的switch结构

1…switch的key的类型要和case的类型一致
2…case后面可以有多个值。
3.switch后面不带表达式 - 相当与if-else
4.case后面可以为范围

package main
import (
	"fmt"
)

func main(){
	//1.switch的key的类型要和case的类型一致
	//2.case后面可以有多个值。

	var a int32 = 20
	var b int32 = 10
	switch a{
	case b,10:
		fmt.Println("3")
	}
	//switch后面不带表达式
	switch {
	case a == 20:
		fmt.Println("1")
	case a == 10:
		fmt.Println("2")
	}

	//case后面可以为范围
	switch{
	case a <= 20:
		fmt.Println(a)
	}
}

5.case的表达式如果是常量的话则要求不可以重复。如果是变量的话可以骗过编译器

	switch c:= 30;{
	case c > 20:
		fmt.Println("20")
	default:
		fmt.Println("30")
	}

Golang的switch流程图
在这里插入图片描述

注意事项
1.switch的表达式也可以为声明,要加上分号
2.switch的key可以是表达式,常量,变量
3.case的表达式类型要和switch表达式的类型要一致
4.case的表达式可以有多个。
5.case的表达式如果是常量的话则要求不可以重复。如果是变量的话可以骗过编译器
6.case的表达式也可以做判断。
7.switch后面也可以不带表达式。 相当与if-else
8.default不是必须的
9.switch穿透:fallthrough:只可以穿透一层

switch还可以判断类型
这是其他语言没有的功能

func main(){
	//判断类型
	var x interface{}
	var y = 10.0
	x = y
	switch x.(type){
	case float64:
		fmt.Println("float64")
	}
}

swithc可以赋值,但是要有分号

func main(){
	switch age := 80;{
	case age > 70:
		fmt.Println("大")
	case age <= 70:
		fmt.Println("小")
	default:
		fmt.Println("错误")
	}
}

switch穿透:fallthrough

func main(){
	switch age := 80;{
	case age > 70:
		fmt.Println("大")
		fallthrough
	case age <= 70:
		fmt.Println("小")
	default:
		fmt.Println("错误")
	}
}

穿透相当于直接执行下一层的内容。但是只可以穿透一层

3 for循环控制

语法

for 循环初始化;循环条件;循环变量迭代{
	循环语句
}

for的流程图
在这里插入图片描述
for的第一种表示方法

func main(){
	//第一种for循环
	for i:=0;i < 10 ;i++{
		fmt.Println("ok")
	}
}

for的第二种表达形式

func main(){
	var j int = 0
	for j < 10 {
		fmt.Println("no")
		j++
	}
}

for的死循环

func main(){
	k := 1
	for{
		if k < 10{
			fmt.Println("yes")
		}else{
			break
		}
		k++
	}
}

用for去遍历字符串

传统的方法遍历

func main(){
	//传统方法遍历
	var str string = "hello"
	for i := 0;i < len(str);i++{
		fmt.Printf("%c",str[i])
	}
}

for-range的方法遍历字符串

	//for - range 方法for循环遍历
	str = "wolrd"
	for index, val := range str{
		fmt.Printf("%d %c",index,val)
	}

如果有中文的话传统方法遍历会出现乱码
所以应该利用切片的方法去遍历

用for-range的方法去遍历有中文的字符串的话不会出现乱码

{
	fmt.Println()
	//如果有中文的话要用切片的方法
	var str1 string = "heello北京"
	var str2 = []rune(str1)
	for i := 0; i < len(str2);i++{
		fmt.Printf("%c",str2[i])
	}
}

for循环完成99乘法表

package main
import (
	"fmt"
)

func main(){

	for i:=1;i <=9;i++{
		for j:=1;j<=i;j++{
			fmt.Printf("%dx%d=%d ",j,i,i*j)
		}
		fmt.Println()
	}
}

在Golang中没有while与do-while语法,可以用for循环代替

4 break用法

语法

{
...
break
...
}

流程图
在这里插入图片描述

break可以加标签
很多语言也可以加标签:java,c

func main(){

	//可以break后面加标签
	lable2:
	for i:=0;i < 4;i++{
		for j:=0;j<10;j++{
			if j == 2 {
				break lable2
			}
			fmt.Println(j)
		}
	}
}

5 continue用法

语法

{
...
continue
...
}

流程图
在这里插入图片描述

func main(){

	//可以break后面加标签
	lable2:
	for i:=0;i < 4;i++{
		for j:=0;j<10;j++{
			if j == 2 {
				continue lable2
			}
			fmt.Println(j)
		}
	}
}

contunue和break一样也可以有标签来修饰

6 goto跳转控制

在go程序中一般不支持goto跳转控制,因为会造成代码混乱。
之前代码一度觉得goto这个语法有问题,但是后来澄清了认为是程序员的用法上
但是还是不支持用goto

语法

goto label
...
label:statment

流程图
在这里插入图片描述

发布了97 篇原创文章 · 获赞 12 · 访问量 5382

猜你喜欢

转载自blog.csdn.net/qq_43141726/article/details/104316605
今日推荐