Golang学习 Day_05

1、循环控制

1.1for循环

for i := 1; i < 10; i++ {
        fmt.Println("hello world!", i)
    }

语法:

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

循环操作(语句)

}

循环变量四要素:

  1. 循环变量初始化

  1. 循环条件

  1. 循环体

  1. 循环变量迭代

细节
  1. 循环条件是返回一个布尔值的表达式

  1. for循环的第二种使用方式

for 循环判断条件 {

循环执行语句

}

j := 1
for j < 10 {
        fmt.Println("hello world!", j)
        j++
    }

将变量初始化和变量迭代写到其他位置

  1. for循环的第三种使用方式

for{

循环执行语句

}

等价于for;;{}是一个无限循环,通常需要配合break语句使用。

k := 1
for {
        if k <= 10 {
            fmt.Println("ok~")
        } else {
            break
        }
        k++
    }
  1. Golang提供for-range的方式,可以方便遍历字符串和数组

//字符串遍历方式1-传统方式
var str string = "hello world!北京"
str2 := []rune(str)    //就是把str转成[]rune
for i := 1; i < len(str); i++ {
        fmt.Printf("%c\n", str[i])
    }


//字符串遍历方式2-for-range
str = "abc~ok,上海"
for index, val := range str {
        fmt.Printf("index=%d,val=%c\n", index, val)
    }

对应for-range遍历方式而言,是按照字符方式遍历,因此如果有字符串有中文,也是ok的

1.2多重循环控制

  1. 将一个循环放在另一个循环体内,就形成了嵌套循环。在外面的for称之为外层循环在里面的for循环称为内层循环

  1. 实质上,嵌套循环就是把内层循环当成外层循环的循环体,当只有内层循环的循环条件为false是,才会完全跳出内层循环,才可结束外层的当次循环,开始下一此的循环

  1. 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n==mn次

for i := 1; i < 10; i++ {
    for j := 1; j <= i; j++ {
            fmt.Print(j, "*", i, "=", i*j)
            fmt.Print("  ")
        }
    fmt.Println()
}

2、跳转控制语句-break

随机生成1-100的一个数,知道生成了99,看看一共用了几次

编写一个无限循环控制,然后不停的随机生成数,当生成了99时,就跳出循环。

var count int = 0
for {
        rand.Seed(time.Now().UnixNano())
        a := rand.Intn(100) + 1
        count++
        fmt.Println(a)
        if a == 99 {
            break
        }
    }
fmt.Println("生成99一共使用了", count)

break语句用于终止某个语句块的执行,用于中断当前for循环或跳出switch语句

细节
  1. break语句出现在多层嵌套的语句块中,可以通过标签指明要终止的时那一层语句块

  1. 标签的基本使用

for i := 0; i < 4; i++ {
    for j := 0; j < 10; j++ {
        if j == 2 {
            break
        }
        fmt.Println("j=", j)
    }
}

3、跳转控制语句-continue

  1. continue语句用于结束本次循环,继续执行下一次循环

  1. continue语句出现在多层嵌套的循环语句中时,可以通过标签指明要跳过的是那一层循环,这个和前面的标签的使用规则一样

for i := 0; i < 4; i++ {
    for j := 0; j < 10; j++ {
        if j == 2 {
            continue
        }
        fmt.Println("j=", j)
    }
}

4、跳转控制语句-goto

  1. Go语言的goto语句可以无条件地转移到程序中指定的行

  1. goto语句通常与条件语句配合使用,可用来实现条件转移,跳出循环体等功能

  1. 在Go程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,是理解和调试都产生困难

5、函数和方法

未完成某一功能的程序指令的集合,成为函数。

在Go中,函数分为:自定义函数,系统函数。

语法

func 函数名 (形参列表)(返回值类型列表){

执行语句...

return 返回值列表

}

  1. 形参列表:表示函数的输入

  1. 函数中的语句:表示为了实现某一功能代码块

  1. 函数可以有返回值,也可以没有

package main


import "fmt"


func cal(n1 float64, n2 float64, operator byte) float64 {
    var res float64
    switch operator {
    case '+':
        res = n1 + n2
    case '-':
        res = n1 - n2
    case '*':
        res = n1 * n2
    case '/':
        res = n1 / n2
    default:
        fmt.Println("操着符号错误...")
    }
    return res
}
func main() {
    var n1 float64 = 1.2
    var n2 float64 = 2.7
    var operator byte = '-'
    result := cal(n1, n2, operator)
    fmt.Println(result)
}

6、包

包的本质实际上就是创建不同的文件夹,来存放程序文件

go的每一个文件都是属于一个包,也就是说go是以包的形式来管理文件和项目目录结构的

作用:

  1. 区分相同名字的函数、变量等标识符

  1. 当程序文件很多事,可以很好的管理项目

  1. 控制函数、变量等访问范围,及作用域

细节
  1. 再给一个文件打包时,该包对应一个文件夹,文件的包名通常和文件躲在的文件夹名一致,一般为小写字母

  1. 当一个文件要使用其它包函数或变量时,需要先引入对应的包。

  1. 引入方式:import "包名"

  1. import (

"包名"

)

  1. package指令在文件第一行,然后是import指令

  1. 在import包时,路径是从$GOPATH的src下开始,不用带src,编译器会自动从src下开始引入

  1. 为了让其他报的文件,可以访问到本报的函数,则该函数的首字母需要大写

  1. 在访问其他包时,语法是 包名.函数名

  1. 如果包名较长,Go支持给包取别名,注意细节,取别名后,原来的包就不能使用了

  1. 在同一包下,不能有相同的函数名,否则报重复定义

  1. 如果要编译成一个可执行文件,就需要将这个包声明为main,及package main,如果你要写一个库,包可以自己定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值