go基础编程day3控制语句与数组array

控制语句

判断语句if

  • 条件表达式没有括号
  • 支持在条件语句汇总初始化表达式(可以是并行方式)(初始化的值只作用于if-else这个语句块,即使与语句块外面的变量重名也互不干扰)
  • 可以写在一行内,但是格式化时一样回变成标准格式
  • 左大括号必须和条件语句处于同一行
package main

import (
    "fmt"
)

func main() {
    a := 9

    if a > 10 {
        fmt.Println("a>10")
    } else if a < 10 {
        fmt.Println("a<10")
    } else {
        fmt.Println("a = 10")
    }
}

for语句

  • go只有一个循环语句关键词,但支持3种形式
  • 初始化和步进表达式可以事多个值
  • 条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量代替
  • 左大括号必须和条件语句在同一行

第一种

package main

import (
    "fmt"
)

func main() {
    a := 1
    // 第一种,直接循环
    for {
        a++
        if a > 3 {
            break
        }
        fmt.Println(a)
    }
    fmt.Println("over")

}

第二种

package main

import (
    "fmt"
)

func main() {
    a := 1
    // 第二种,for加判断,类似while
    for a <= 3 {
        a++
        fmt.Println(a)
    }
    fmt.Println("over")
}
/*
2
3
4
over
*/

第三种

package main

import (
    "fmt"
)

func main() {
    a := 1
    // 第三种,for加赋值判断
    for i := 0; i < 3; i++ {
        a++
        fmt.Println(a)
    }
    fmt.Println("over")
}

/*
2
3
4
over
*/

选择语句switch

  • 可以使用任何类型或表达式作为条件语句
  • 不需要写break,一旦条件符合自动终止
  • 如果希望继续执行下一个case,需要使用fallthrough语句
  • 支持一个初始化表达式(可以是并行方式),右侧需要跟分号
  • 左大括号必须和条件语句在同一行
package main

import (
    "fmt"
)
// 选择语句switch
func main() {
    a := 1
    switch a {
    case 0:
        fmt.Println("a=0")
    case 1:
        fmt.Println("a=1")
    }
    fmt.Println(a)
}
package main

import (
    "fmt"
)

// 选择语句switch
func main() {
    a := 1
    // 这里case条件语句的时候switch后面不需要再加变量名
    switch {
    case a >= 0:
        fmt.Println("a>=0")
        fallthrough
    case a >= 1:
        fmt.Println("a>=1")
    }
    fmt.Println(a)
}
package main

import (
    "fmt"
)

// 选择语句switch
func main() {
    // 再switch后跟随声明定义
    switch a := 1; {
    case a >= 0:
        fmt.Println("a>=0")
        fallthrough
    case a >= 1:
        fmt.Println("a>=1")
        fallthrough
    default:
        fmt.Println("none")
    }
}

goto,break,continue跳转语句

  • 三个语法都可以配合标签使用
  • 标签名区分大小写,若不使用会造成编译错误
  • break与continue配合标签可用于多层循环的跳出
  • goto是调整执行位置,与其他两个语句配合标签的结果并不相同
/* break */
func main() {
    // 定义标签
LABEL1:
    // 无限循环
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                // 指定跳出哪一层
                break LABEL1
            }
        }
    }
    fmt.Println("OK")
}  // OK 跳出了无限循环
/* 标签放在goto之后,利用goto跳出死循环 */
func main() {

    // 无限循环
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                // 指定跳到哪里
                goto LABEL1
            }
        }
    }
    // 定义标签
LABEL1:
    fmt.Println("OK")
}  // OK

continue不带标签的时候为跳过生下的循环体,直接进入下次循环

package main

import (
    "fmt"
)

func main() {
    // 定义标签
LABEL1:
    for i := 0; i < 10; i++ {
        fmt.Println(i)
        // 无限循环
        for {
            // 继续标签所在 循环
            continue LABEL1
        }
    }
    fmt.Println("OK")
}

数组array

  • 定义数组:var <varName> []<type>, n>=0
  • 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型
  • 注意区分指向数组的指针和指针数组
  • 数组在go中为值类型(切片为引用类型)
  • 数组之间可以使用==或!=进行比较,但不能使用>或<
  • 可以使用new来创建数组,此方法返回一个指向数组的指针
  • go支持多维数组
  • 长度相同数组才是类型相同,长度不同就是不同的类型,不能直接赋值
  • 数组声明之后也是存在零值的
/* 声明数组的几种方式 */
func main() {
    // var <ArrayName> [n]<type> 注意n>=0
    var a [2]int
    var b [2]int
    // 只有长度相同才可以直接赋值
    a = b
    // 另一种方式,大括号内跟准确的值
    c := [2]int{1, 1}
    //
    d := [2]int{1}
    // 索引赋值
    e := [20]int{19: 1}
    // 省略数组大小n
    f := [...]int{1, 2, 3, 4, 5, 6}
    g := [...]int{19: 1}

    fmt.Println(a) // [0 0]
    fmt.Println(b) // [0 0]
    fmt.Println(c) // [1 1]
    fmt.Println(d) // [1 0]
    fmt.Println(e) // [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
    fmt.Println(f) // [1 2 3 4 5 6]
    fmt.Println(g) // [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
}

使用new关键词来创建数组返回一个指向数组的指针

package main

import (
    "fmt"
)

func main() {
    p := new([10]int)
    fmt.Println(p) // &[0 0 0 0 0 0 0 0 0 0]
}

数组本身和指向数组的指针都可以直接通过索引修改数组

package main

import (
    "fmt"
)

func main() {

    a := [10]int{}
    a[1] = 2
    p := new([10]int)
    p[1] = 2
    fmt.Println(a) // [0 2 0 0 0 0 0 0 0 0]
    fmt.Println(p) // &[0 2 0 0 0 0 0 0 0 0]
}

多维数组

package main

import (
    "fmt"
)

func main() {
        // 这里同样可以支持索引赋值,最外层可以使用三个.来代替
    a := [2][3]int{
        {1, 2, 3},
        {4, 5, 6},
    }
    fmt.Println(a) // [[1 2 3] [4 5 6]]
}

go语言版本的冒泡排序:

package main

import (
    "fmt"
)

// go语言版本冒泡排序
func main() {
    a := [...]int{4, 8, 2, 7, 1, 9, 5, 6}
    // 打印排序前
    fmt.Println(a)
    // 获取长度,提前赋值如果放在循环中每次都要执行
    nums := len(a)
    for i := 0; i < nums; i++ {
        for j := i + 1; j < nums; j++ {
            // 从大到小
            if a[i] < a[j] {
                temp := a[i]
                a[i] = a[j]
                a[j] = temp
            }
        }
    }
    fmt.Println(a)
}
// [4 8 2 7 1 9 5 6]
// [9 8 7 6 5 4 2 1]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,175评论 1 44
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,145评论 0 13
  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,942评论 17 410
  • 啊啊啊!绝对不可以,让我嫁给他?死我也不嫁给他。 我一边跑一边对身后的母亲说,让我嫁给他?想得...
    那年的你和我阅读 157评论 1 0
  • 两天一共走了四万三千多步,今天不是四月一。就算是我送给自己半个小时后的生日礼物吧,没有蛋糕的甜,但有乏累后的梦。 ...
    PersistenceL阅读 200评论 0 0