Golang


文章目录


1 if分支控制

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

1.1 单分支

语法

if 条件 {
执行代码
}

如输入一个年龄是否成年

package main
import "fmt"

func main(){

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

流程图
Golang控制语法_golang

1.2 多分支

语法

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

输入年龄判断是否成年

package main
import "fmt"

func main(){

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

流程图
Golang控制语法_流程图_02
注意事项:
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流程图
Golang控制语法_golang_03

注意事项
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的流程图
Golang控制语法_golang_04
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
...
}

流程图
Golang控制语法_流程图_05

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
...
}

流程图
Golang控制语法_流程图_06

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

流程图
Golang控制语法_for循环_07