一、if else语句

1.1 基本语法1

语法1

if condition {
//do something
}

语法2:

if condition {
//do something
} else {
//do something
}

语法3

if condition {
//do something
} else if condition {
//do something
} else {
//do something

1.2 练习1

package main

import (
"fmt"
) func main() {
num :=
if num% == {
fmt.Println("the number is even")
} else {
fmt.Println("the number is odd")
}
}

执行结果如下:

1.3 基本语法2

if statement(语句); condition {
}

1.4 练习2

package main

import (
"fmt"
) func main() {
if num := ;num% == {
fmt.Println("the number is even")
} else {
fmt.Println("the number is odd")
}
}

执行结果如下:

1.5 练习3

package main

import (
"fmt"
) func main() {
num :=
if num <= {
fmt.Println("number is less than or equal to 50")
} else if num >= && num <= {
fmt.Println("number is between 51 and 100")
} else {
fmt.Println("number is greater than 100")
}
}

执行结果如下:

二、 循环

2.1 Go语言中只有一种循环,就是for循环

基本语法:

for initialisation(初始化变量); condition(条件判断); post(变量修改) {
}

2.1 练习1

package main

import (
"fmt"
) func main() {
for i := ; i <= ; i++ {
fmt.Printf("%d", i)
}
}

执行结果如下:

2.3 break,终止循环

一句话说:break就是终止本层的循环

2.4 练习2(break)

package main

import (
"fmt"
) func main() {
for i := ; i <= ; i++ {
if i > {
break //loop is terminated if i > 5
}
fmt.Printf("%d ", i)
}
fmt.Printf("\nline after for loop")
}

执行结果如下:

2.5 continue,终止本次循环

一句话,continue是终止此次循环(跳过本次)。

2.6 练习3(continue)

package main

import (
"fmt"
) func main() {
for i := ; i <= ; i++ {
if i% == {
continue
}
fmt.Printf("%d ", i)
}
}

执行结果如下:

2.7 练习4

package main

import (
"fmt"
) func main() {
i :=
for ;i <= ; { // 初始化变量和变量修改也可以在这一行忽略,将初始化变量写到for循环外,变量修改写到for循环外,";"可以省略也可以写上
fmt.Printf("%d ", i)
i +=
}
}

执行结果如下:

2.8 练习5

package main

import (
"fmt"
) func main() {
for no, i := , ; i <= && no <= ; i, no = i+, no+ {
fmt.Printf("%d * %d = %d\n", no, i, no*i)
}

执行结果如下:

2.9 无限循环

就是for循环不写任何条件

2.10 练习6(无限循环)

package main

import (
"fmt"
) func main() {
for { //for循环不加任何条件即为无限循环
fmt.Printf("hello")
}
}

执行结果如下:

package main

import (
"fmt"
) func main() {
for { //for循环不加任何条件即为无限循环
fmt.Printf("hello")
}
}

执行结果如下:

尴尬的是:vscode也跑挂了。

三、 switch语句

3.1 switch语句语法

switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。。

switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break

基本语法是:

switch var1 {
case val1:
...
case val2:
...
default:
...
}

解释:

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。也可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。default是默认值,可以写也可以不写。

switch语句流程图如下:

3.2 练习1(不加default)

package main

import (
"fmt"
) func main() {
finger :=
switch finger {
case :
fmt.Println("Thumb") //此处写多行语句也可以
case :
fmt.Println("Index")
case :
fmt.Println("Middle")
case :
fmt.Println("Ring")
case :
fmt.Println("Pinky")
}
}

执行结果如下:

3.3 练习2(switch default)

package main

import (
"fmt"
) func main() {
switch finger := ; finger {
case :
fmt.Println("Thumb")
case :
fmt.Println("Index")
case :
fmt.Println("Middle")
case :
fmt.Println("Ring")
case :
fmt.Println("Pinky")
default: //default case,当上述case选项都不符合时,执行这里语句
fmt.Println("incorrect finger number")
}
}

执行结果如下:

3.4 练习3(case值为多个条件)

package main

import (
"fmt"
) func main() {
letter := "i"
switch letter {
case "a", "e", "i", "o", "u":
fmt.Println("vowel")
default:
fmt.Println("not a vowel")
}
}

执行结果如下:

3.5 练习4(case条件判断)

package main

import (
"fmt"
) func main() {
num :=
switch { // expression is omitted(表达式省略掉了)
case num >= && num <= :
fmt.Println("num is greater than 0 and less than 50")
case num >= && num <= :
fmt.Println("num is greater than 51 and less than 100")
case num >= :
fmt.Println("num is greater than 100")
}
}

执行结果如下:

3.6 练习4(fallthrough)

switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break,如果case1已经满足条件了,但是还想执行case2的话,我们可以通过使用fallthrough关键字,同理如果还想继续执行case3的话,那我们可以接着使用fallthrough

实例如下:

package main

import (
"fmt"
) func number() int {
num := *
return num
}
func main() {
switch num := number(); { //num is not a constant
case num < :
fmt.Printf("%d is lesser than 50\n", num)
fallthrough
case num < :
fmt.Printf("%d is lesser than 100\n", num)
fallthrough
case num < :
fmt.Printf("%d is lesser than 200", num)
}
}

执行结果如下:

四、 练习题

生成一个随机数,让一个用户去猜这个数是多少?

代码示例如下:

package main

import (
"fmt"
"math/rand" //math包中的rand函数可以用来生成随机数
"time"
) func main() {
var number int
/*
for i := 0;i < 10; i++ {
number = rand.Intn(100)
fmt.Printf("number:%d\n",number)
}
因为伪随机的存在,rand生成的随机数都有一个固定的序列,比如第一次生成1,第二次生成20等等,随机数的序列是固定,我们可以通过给其一个随机的总值,如果随机的总值不一样,那么伪随机数的序列也不一样。我们不给,他就是按照一个默认的随机总值,所以伪随机数序列永远是一样的。
*/
rand.Seed(time.Now().UnixNano()) //通过rand函数的Seed方法,来设置总值,这里我们以当前时间来设置总值,并且用的纳秒,十分精确了
number = rand.Intn() //随机数的范围是0-100,但不包括100
fmt.Printf("请猜一个数字,数字的范围是:[0-100)\n")
for { //因为并不知道用户什么时候输入正确,所以是没有限制条件的,我们只能做一个死循环,配合switch语句满足条件了即可退出;
var input int
fmt.Scanf("%d\n", &input) //Scanf表示让用户输入,Scanf从终端读取一个整数,并传值给input变量,&表示获取到该变量内存地址
var flag bool = false //通过设置flag变量,解决的是用户输入正确后可以退出
switch {
case number > input:
fmt.Printf("您输入的数字太小\n")
case number == input:
fmt.Printf("恭喜您,答对了!\n")
flag = true
case number < input:
fmt.Printf("您输入的数字太大\n")
}
if flag { //表示如果flag为真,则break退出这个for循环
break
}
}

执行结果如下:

补充:

Scanf哪里一定要加上\n,因为加上的话就已经表示以回车换行符为止,这样就已经保证了能够获取到用户输入的真正的数字,你如果不加\n,他就不行了,就会识别2次一个是你输入的数字,一个是回车。

4.2 补充1:

为什么等待用户输入的变量要加上&符号?

答:

如果我们去掉&,不传入地址的话,我们是修改不了input的变量的值,假如我传入一个test值进去,因为数据类型时int,其也就是值类型,这一次传值,其内部就相当于拷贝了一份,这一份我们就可以称其为b1,我们修改的仅仅是b1的值,并不是外面input变量的值,input变量的值并没有修改。

4.3 补充2:

针对Go语言中基本数据类型是值类型的实例:

package main

import (
"fmt"
) func main() {
var a int =
var b int
b = a
b =
fmt.Printf("a=%d,b=%d, a=%p, b=%p", a, b, &a, &b)
}

执行结果:

解释:

变量a赋值100,变量b暂未赋值,然后将a变量复制给b,此时b为100,下面又重新为b变量赋值200,最终输出结果a为100,b为200。因为a和b都是值类型,所以a和b的内存地址都是相互独立的,如果不是独立的,那么当b重新赋值为200时,a也应该是200了,但是a为100,也充分证明了,a和b的内存地址是相互独立的。

4.4 补充3

1)Go语言中的基本数据类型都是值类型。

值类型:定义一个变量a,在定义一个变量b,将 a=b(b赋值给a),对于值类型来说,此时虽然b赋值给a了,但是a和b依然是两块独立的内存地址

2)我们都知道设置变量是为了我们去方便操作内存,在底层其都是一个个内存地址,我们cpu寻址的话,都是通过内存地址去寻址的,打印出来的内存地址都是16进制的串。比如说变量a=100,在计算机内部,      我们是通过内存地址找到那块内存,然后那块内存是int类型,其占4个字节,找到那块内存,找到那4个字节,然后把100存进去就可以了,go语言就是这样比较原始。

Go语言基础之4--流程控制的更多相关文章

  1. 【C语言 基础】什么流程控制?

    流程控制就是控制程序执行的顺序 流程控制的分类: 1.顺序执行 2.选择执行 定义 某些代码可能执行也可能不执行,有选择的执行某些代码 3.循环执行

  2. PHP丨PHP基础知识之流程控制WHILE循环「理论篇」

    昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...

  3. Unit04: JavaScript 概述 、 JavaScript 基础语法 、 流程控制

    Unit04: JavaScript 概述 . JavaScript 基础语法 . 流程控制 my.js function f3() { alert("唐胜伟"); } demo1 ...

  4. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  5. Java基础语法(4)-流程控制

    title: Java基础语法(4)-流程控制 blog: CSDN data: Java学习路线及视频 1.程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定 ...

  6. Java基础语法与流程控制

    Java基础语法与流程控制 跟着狂神学Java的第二天O(∩_∩)O~,养成一个总结的习惯 志同道合的小伙伴可以一起学习狂神的视频 本节地址:https://www.kuangstudy.com/co ...

  7. Java基础语法02——流程控制

    流程控制:顺序结构.分支结构(if-else.switch-case).循环结构(for.while.do-while)

  8. Go语言系列(三)- 基础函数和流程控制

    一.strings和strconv的使用 1. strings.HasPrefix(s string, prefix string) bool:判断字符串s是否以prefix开头 . 2. strin ...

  9. 基础运算符补充,流程控制之if判断/while循环

    常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...

  10. Go语言学习之3 流程控制、函数

    主要内容: 1. strings和strconv使用2. Go中的时间和日期类型3. 指针类型4. 流程控制5. 函数详解 1. strings和strconv使用 //strings . strin ...

随机推荐

  1. [转] php foreach用法和实例

    PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误.有两种 ...

  2. 高性能MySQL笔记-第5章Indexing for High Performance-003索引的作用

    一. 1. 1). Indexes reduce the amount of data the server has to examine.2). Indexes help the server av ...

  3. debug---null Pointer Exception--一步步查找(2)

    添加PartyLocationRepository后,再次在Ubuntu中编译项目,再次报空指针异常. 直接在createDto处打断点,然后debug每个表达式的值,找出来到底是哪个为null. 经 ...

  4. Java泛型读书笔记 (三)

    泛型对于老代码的支持 Java的泛型设计成类型擦除的目的,很大一部分是为了兼容老老代码.如下的一段代码: void setLabelTable(Dictionary table) table的类型是非 ...

  5. ubuntu重新安装 apache2

    $ sudo apt-get --purge remove apache2 $ sudo apt-get --purge remove apache2.2-common $ sudo apt-get ...

  6. iTween插件使用

    itween插件 itween是一个动画库,作者创建它的目的就是最小的投入实现最大的产出.用它可以轻松实现各种动画,晃动,旋转,移动.褪色.上色.控制音频等. iTween原理: itween的核心是 ...

  7. Java NIO学习笔记

    Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执 ...

  8. 「JOI 2017 Final」JOIOI 王国

    「JOI 2017 Final」JOIOI 王国 题目描述 题目译自 JOI 2017 Final T3「 JOIOI 王国 / The Kingdom of JOIOI」 JOIOI 王国是一个 H ...

  9. [haut] 1281: 邪能炸弹 dp

    题目描述 正在入侵艾泽拉斯的古尔丹偶然间得到了一颗邪能炸弹,经过研究,他发现这是一颗威力极其巨大且难以控制的炸弹.但是精通邪能的古尔丹突然有了一个大胆的想法,他对炸弹进行了一些小小的改造.这使得炸弹需 ...

  10. 51nod1453(排列组合)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1453 题意: 中文题诶~ 思路: 因为最后一个球总是在编号比 ...