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
流程图