GO語言基礎教程:流程控制

    在開始一個新的章節之前先來回顧上一篇文章的部份,首先我們來看這段代碼:
   

package main
    import (
        "fmt"
    )
    func main(){
        var x,y int=1,2
        {
            var x int=2
            {
                var x int=3
                fmt.Println(x,y)    //首先輸出3,2 如果我把這行輸出語句注解掉,大家猜猜會如何?
            }
            fmt.Println(x,y)        //其次輸出2,2
        }
        fmt.Println(x,y)            //最後輸出1,2
    }

 


    執行結果我已經加到註釋內了,其實沒必要好奇,GO語言就是如此,這種突然出現的大括號構成了複合語句,大括號內的變量作用範圍只能在變量內部,這就涉及到變量的作用域了,在PHP中變量也是有作用域的,但是PHP遇到這種突然出現的大括號時不會構成這種複合語句,因此也就不會影響到變量的作用域,這一點請謹記
    其次我們在PHP中的function內使用全局變量的時候通常要用global把全局變量引入進來,但是在GO語言中不需要那麼麻煩,全局變量如果出現在function前邊就可以直接在function內使用,而不需要額外的描述,在GO語言中,全局變量的作用範圍是當前的package,局部變量的作用域被限制到了其所在的大括號內.

    上一篇文章我在介紹數據類型的時候有提到一個數據類型轉換的部份,在此跟大家說一下GO語言是如何轉換數據類型的.
    首先我們要清楚,GO語言是類型安全的,它不允許數據類型隱式轉換否則會造成精度丟失,在go語言中所有的類型轉換必須要顯式進行才可以.
    其顯式轉換方法其實非常簡單
    變量1=<變量1的類型>(<變量2>)
    例如:
    v1:=3.14
    var v2 int
    v2=int(v1)
    上例我把浮點型的v1顯式轉換成了int型.此時v2的值是3
    在顯式轉換的時候有幾點需要注意一下:
    int型可以轉為float型
    float型可以轉為int型
    string型可以轉為[]byte和[]int型
    []byte可以轉為string型
    []int可以轉為string型
    除此之外別的都不可以.
    這樣的類型轉換可以保障變量的類型是安全的,不會像PHP那樣類型被偷偷轉換了,例如:
    var_dump("5"+"0");
    這句代碼按理說應該是兩個string串接輸出string("50")才對,但是PHP的隱式轉換把他的類型給改了,變成了int(5),這種狀況在GO語言中是不會發生的.
    除了這種類型轉換方式之外GO語言還提供了一個標準的package用來對數據類型進行轉換,這個package的名字是strconv,它提供的方法有:
    Atoi(字符串) (bool,error)       接收字符串參數轉為Int型
    Itoa(Int型) (bool)              接收Int型參數轉為字符串
    FormatBool(bool) string             接收布爾參數轉為string型
    FormatFloat(float64,浮點格式,輸出精度,[位數32,64]) string       接收布爾參數轉為string型
    FormatInt(int64,[進制2,8,10,16]) string     接收int型參數根據進制轉為string型
    FormatUint(int64,[進制2,8,10,16]) string        同上,接收無符號int型參數根據進制轉為string型
    ParseBool(字符串) (bool,error)      接收字符串參數轉為bool型
    ParseFloat(字符串,[位數32,64]) (bool,error)     接收字符串參數轉為Float型
    ParseInt(字符串,[進制2,8,10,16],[位數0,8,16,32,64]) (bool,error)        接收字符串參數轉為Int型
    ParseUint(字符串,[進制2,8,10,16],[位數0,8,16,32,64]) (bool,error)       同上,接收字符串參數轉為無符號Int型

    這些方法在進行數據類型轉換的時候也是非常有用的,需要格外注意一下.

    那麼接下來的時間我們就主要介紹一下GO語言的流程控制,這個部份主要涉及到if;switch;和循環,
    首先我們來看一下if部份.首先我們看一下下邊這段代碼:
   

var a int
    a=xx()
    if a==1{
        fmt.Println("1")
    }else if a==2{
        fmt.Println("2")
    }else{
        fmt.Println("其他")
    }

 
    通過上邊的代碼不難發現其實GO語言的if寫法和別的編程語言幾乎沒有差別,但是要注意一點,那就是條件語句不能出現小括號,還有就是左大括號必須要出現在判斷語句的尾部,不能寫到新的一行.就像上邊的這個demo就不能這樣寫:
   

var a int
    a=xx()
    if(a==1)                //這是第一個錯誤
    {                       //這是第二個錯誤
        fmt.Println("1")
    }
    注意一下這兩點就差不多了,除了上邊說的這個注意事項之外還有一點需要注意的地方,請看下邊的代碼:
    if a:=xx();a==1{
        fmt.Println("1")
    }
    fmt.Println(a)          //這是錯誤的,因為變量a屬於if的區域變量

 
    在這個demo中變量a被放到了if同一行中,此時a就屬於這個if的區域變量
    總結一下,在GO語言中if在使用的時候要注意三點就足够了,分別是:1.條件語句不能有小括號,2.左大括號必須要放到語句的結尾,3.其他語句可以放到提交語句的左側,此時若有給變量賦值,那麼這個變量的作用範圍被局限在if內

    接下來我們看一下GO語言的switch用法,首先我們來看一下下邊的代碼:
   

var a int
    a=xx()
    switch a{
        case 1:
            fmt.Println("1")
        case 2,3:
            fmt.Println("2或3")
        case 4:
            fmt.Println("4")
            fallthrough
        case 5:
            fmt.Println("5")
        default:
            fmt.Println("其他")
    }
    fmt.Println("結束")

 
    在上邊的這個demo中如果您仔細看的話您會發現GO語言的switch用法和其他語言差異不大,但是每一個case都沒有break,這是因為GO語言默認情況下是不需要加break的,在上邊的例子中如果a的值等於1,那麼會輸出"1結束",看到沒有根本就不需要加入break就能自動跳出switch,那麼如果當a的值等於4的時候會輸出"45結束",這是因為fallthrough的緣故,fallthrough可以讓case能夠被穿越,初次之外GO語言的switch還有一種更高級的用法,至少這種用法以前我沒有在其他語言中見過,這種用法讓switch可以當if用,看下邊的demo:
   

a:=xx()
    switch {                    //左大括號必須要和switch同一行
        case a<0:
            fmt.Println("負數")
        case (a>0) && (a<=10):
            fmt.Println("1-10")
        case (a>10) && (a<=20):
            fmt.Println("11-20")
        default:
            fmt.Println("其他")
    }

 
    看上邊的例子,在switch后沒有了判斷語句,而判斷語句被拿到了case後邊,這就是我上邊所講的switch拿來當if用.
    那麼我們來總結一下switch的注意事項吧:1.左大括號必須要和switch同一行,2.不需要使用break跳出case,3.如果需要穿透case就必須要加fallthrough,4.可以不加判斷語句把其當if來用.

    最後我們說一下GO語言的循環,在GO語言中只有一個for用來循環,其他語言中常見的white;do..while;do..loop;foreach;while等循環方式都沒了,這一系列亂七八糟的循環方式在GO語言中只需要for就足够了.接下來我們通過幾個demo來逐一講解for是怎麼做到這些的.看代碼
   

for i:=0;i<10;i++{      //注意不要加小括號,左大括號必須要在同一行
        fmt.Println(i)
    }

 
    這是常見的一種用法了,除了不要加小括號和左大括號必須要出現在行尾之外,跟別的編程語言沒有任何差異,因此針對這種循環方式我就不再細說了.接下來我們看第二種用法:
   

i:=0
    for ;i<10;i++{
        fmt.Println(i)
    }
    fmt.Println("繼續輸出:",i)

 
    在這個例子中變量i被拿到了for循環之外定義,所以在for上我就不需要在對其進行額外的定義動作了,只需要一個分號就够了,等到for循環結束之後我還可以輸出變量i的值,因為此時的變量不再專屬於for.再接著看
  

 i:=0
    for i<10{
        fmt.Println(i)
        i++
    }
    fmt.Println("繼續輸出:",i)

 
    在這個例子中第三個條件語句也沒了,被我拿到了for內部,所以我就可以把條件語句中的分號都給省略掉.是不是很有意思,其實這就已經能夠取代while了.或許您還感覺不過癮,那好接下來我們弄個更狠的
  

 i:=0
    for {
        if i>10{
            break
        }
        fmt.Println(i)
        i++
    }
    fmt.Println("繼續輸出:",i)

 
    看到沒,do..loop或do..while之類的都被取代了.用這種循環方式時要注意控制跳出循環,要不然的話弄個死循環就不好了.啥你不知道怎麼寫死循環?好吧
   

for {
        fmt.Println("我是死循環")
    }

 
    看到沒就是這麼簡單就死循環了.如果您不信您可以自己執行試試就知道效果了.最后就只剩下foreach寫法了,看下邊的例子
  

 i:=[]string{"aa","bb","cc"}
    for k,v:=range i{
        fmt.Println(k,v)
    }

 
    通過這段代碼就能把數組的鍵名和值給逐行輸出

    接下來我們來總結一下GO語言的for循環需要注意的事項:1.條件語句不能加小括號,左大括要和for在同一行,2.如果條件語句超過兩個,則分號不能省略
    另外for循環會涉及到break和continue的用法,如有不懂的朋友可以自己上網搜一下,這個比較簡單在此我就不再贅述了.
    還有就是GO語言加了goto,說實話我很不建議大家用,在此順便一提,有興趣的朋友可以自己研究一下.


希望轉載文章的朋友能夠留一個文章出處,http://see7di.cnblogs.com 在此感激不盡!

剛成立了一個QQ群,有興趣討論GO語言的朋友可以加入:195112

转载于:https://www.cnblogs.com/see7di/p/3927109.html

Go 编程语言是一个使得程序员更加有效率的开源项目。Go 是有表 达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核 和网络应用,而新的类型系统允许构建有性的模块化程序。Go 编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行 时反射。它是快速的、静态类型编译语言,但是感觉上是动态类型 的,解释型语言。 1 简介 1 官方文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 前身. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 获得Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 在Windows 下获得Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 基础 6 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 编译和运行代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 本书使用的设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 变量、类型和保留字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 运算符和内建函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Go 保留字. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 控制结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 内建函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 array 、slices 和map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3 函数 30 作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 多值返回. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 命名返回值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 延迟代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 变参. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 函数作为值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 回调. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 恐慌(Panic)和恢复(Recover). . . . . . . . . . . . . . . . . . . . . . . 36 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4 包 48 标识符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 包的文档. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 测试包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 常用的包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5 进阶 58 内存分配. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 定义自己的类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 ----------------------- 页面 5----------------------- ii Chapter: Contents 转换. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 6 接口 70 方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 接口名字 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 简短的例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7 并发 82 更多关于channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 8 通讯 90 io.Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 一些例子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 命令行参数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 执行命令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 网络. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 练习. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 答案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 A 版权 106 贡献者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 许可证和版权 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 B 索引 108 C Bibliography 110 ListofFigures 1.1 Go 编年史. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2.1 array 与slice 对比 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1 一个简单的LIFO 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6.1 使用反射去除层次关系. . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 ListofCodeExamples 2.1 Hello world . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Declaration with . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Declaration with : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4 Familiar types are still distinct . . . . . . . . . . . . . . . . . . . . . . . . . . 9 ----------------------- 页面 6----------------------- ListofCodeExamples iii 2.5 array 和slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.6 Simple for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.7 For loop with an array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.8 Fizz-Buzz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.9 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.10 Runes in strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.11 Reverse a string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.1 函数定义 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.2 递归函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3 局部作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.4 全局作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.5 当函数调用函数时的作用域. . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.6 没有defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.7 With defer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.8 函数符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.9 带参数的函数符号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.10 在defer 中访问返回值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.11 匿名函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.12 使用map 的函数作为值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.13 Go 中的平均值函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.14 stack.String() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.15 有变参的函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.16 Go 编写的斐波那契函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.17 Map 函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 3.18 冒泡排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.1 A small package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.2 even 包的使用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.3 even 包的测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.4 包里的Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.5 Push/Pop 测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.6 逆波兰计算器. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.1 Use of a pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2 获取指针指向的值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.3 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5.4 Go 中更加通用的map 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . 67 5.5 cat 程序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 6.1 定义结构和结构的方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6.2 用空接口作为参数的函数. . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.3 实现接口失败. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 6.4 扩展内建类型错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.5 扩展非本地类型错误. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 6.6 使用反射自省. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 6.7 反射类型和值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.8 私有成员的反射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.9 公有成员的反射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.10 通用的计算最大值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.1 Go routine 实践 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 7.2 Go routines 和channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 7.3 使用select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 7.4 Go 的channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 ----------------------- 页面 7----------------------- iv Chapter: Contents 7.5 添加额外的退出channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 7.6 Go 的斐波那契函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 8.1 从文件读取(无缓冲) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 8.2 从文件读取(缓冲). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 8.3 Processes in Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 8.6 uniq(1) 的Perl 实现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 8.4 Go 中的进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 8.5 wc(1) 的Go 实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 8.7 uniq(1) 的Go 实现. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 8.8 一个Go quine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 8.9 简易echo 服务器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 8.10 数字游戏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 8.11 finger 守护进程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 ListofExercises 1 (1) 文档. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 (0) For-loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 (0) FizzBuzz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 4 (1) Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5 (1) Average . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 6 (0) 平均值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 7 (0) 整数顺序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8 (1) 作用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 9 (1) 栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 10 (1) 变参. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 11 (1) 斐波那契. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 12 (1) Map function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 13 (0) 最小值和最大值. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 14 (1) 冒泡排序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 15 (1) 函数返回一个函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 16 (0) stack 包. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 17 (2) 计算器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 18 (1) 指针运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 19 (2) 使用interface 的map 函数 . . . . . . . . . . . . . . . . . . . . . . . . . 65 20 (1) 指针. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 21 (1) 链表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 22 (1) Cat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 23 (2) 方法调用. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 24 (1) 接口和编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 25 (1) 指针和反射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 26 (2) 接口和max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 27 (1) Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 28 (2) 斐波那契II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 29 (2) 进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 30 (0) 单词和字母统计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 31 (0) Uniq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 32 (2) Quine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 33 (1) Echo 服务. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 ----------------------- 页面 8----------------------- ListofExercises v 34 (2) 数字游戏. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 35 (1) *Finger 守护进程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值