1. 程式人生 > >Go語言編程

Go語言編程

面向 std 通信 andro ont 3.4 man 並發 arr

第1章 初識Go語言

  1.1 語言簡史

  1.2 語言特性

    1.2.1 自動垃圾回收

    1.2.2 更豐富的內置類型

    1.2.3 函數多返回值

    1.2.4 錯誤處理

    1.2.5 匿名函數和閉包

    1.2.6 類型和接口

    1.2.7 並發編程

技術分享圖片
package main

import "fmt"

func sum(values []int,resultChan chan int) {
    sum := 0
    for _,value := range values {
        sum += value
    }
    resultChan 
<- sum } func main() { values := []int {1,2,3,4,5,6,7,8,9,10} resultChan := make(chan int,2) go sum(values[:len(values)/2],resultChan) go sum(values[len(values)/2:],resultChan) sum1,sum2 := <-resultChan,<-resultChan fmt.Println("Result:",sum1,sum2,sum1+sum2) }
paracalc

    1.2.8 反射

技術分享圖片
package main

import (
    "fmt"
    "reflect"
)

type Bird struct {
    Name string
    LifeExpectance int
}

func (b *Bird) Fly() {
    fmt.Println("I am flying...")
}

func main() {
    sparrow := &Bird{"Sparrow",3}
    s := reflect.ValueOf(sparrow).Elem()
    typeOfT :
= s.Type() for i := 0; i < s.NumField(); i++ { f := s.Field(i) fmt.Printf("%d: %s %s = %v\n",i,typeOfT.Field(i).Name,f.Type(),f.Interface()) } }
reflect

    1.2.9 語言交互性

技術分享圖片
package main

/*
#include <stdio.h>
*/
import "C"
import "unsafe"

func main() {
    cstr := C.CString("Hello,World")
    C.puts(cstr)
    C.free(unsafe.Pointer(cstr))
}
cprint

  1.3 第一個Go程序

技術分享圖片
package main

import "fmt"

func main() {
    fmt.Println("Hello,World")
}
Hello World

    1.3.1 代碼解讀

    1.3.2 編譯環境準備

$go version

    1.3.3 編譯程序

  1.4 開發工具選擇

  1.5 工程管理

技術分享圖片

技術分享圖片
package main

import "os"
import "fmt"
import "simplemath"
import "strconv"

var Usage = func() {
    fmt.Println("USAGE: calc command [arguments] ...")
    fmt.Println("\nThe commands are:\n\tadd\tAddition of two values.\n\tsqrt\tSquare
        root of a non-negative value.")
}

func main() {
    args := os.Args
    if args == nil || len(args) < 2 {
        Usage()
        return
    }
    
    switch args[0] {
        case "add":
            if len(args) != 3 {
                fmt.Println("USAGE: cacl add <integer1><integer2>")
                return
            }
            v1,err1 := strconv.Atoi(args[1])
            v2,err2 := strconv.Atoi(args[2])
            if err1 != nil || err2 != nil {
                fmt.Println("USAGE: calc add<integer1><integer2>")
                return
            }
            ret := simplemath.Add(v1,v2)
            fmt.Println("Result: ",ret)
        case "sqrt":
            if len(args) != 2 {
                fmt.Println("USAGE: calc sqrt <integer>")
                return
            }
            v,err := strconv.Atoi(args[1])
            if err != nil {
                fmt.Println("USAGE: calc sqrt <integer>")
                return
            }
            ret := simplemath.Sqrt(v)
            fmt.Println("Result: ",ret)
        default:
            Usage()
    }
}
calcl 技術分享圖片
package simplemath

func Add(a int,b int) int {
    return a + b
}
add 技術分享圖片
package simplemath

import "testing"

func TestAdd1(t *testing.T) {
    r := Add(1,2)
    if r != 3 {
        t.Errorf("Add(1,2) failed.Got %d,expected 3.",r)
    }
}
add_test 技術分享圖片
package simplemath

import "math"

func Sqrt(i int) int {
    v := math.Sqrt(float64(i))
    return int(v)
}
sqrt 技術分享圖片
package simplemath

import "testing"

func TestSqrt1(t *testing.T) {
    v := Sqrt(16)
    if v != 4 {
        t.Errorf("Sqrt(16) failed.Got %v,expected 4.",v)
    }
}
sqrt_test

  1.6 問題追蹤和調試

    1.6.1 打印日誌

    1.6.2 GDB調試

  1.7 如何尋求幫助

    1.7.1 郵件列表

    1.7.2 網站資源

  1.8 小結

第2章 順序編程

  2.1 變量

    2.1.1 變量聲明

    2.1.2 變量初始化

    2.1.3 變量賦值

    2.1.4 匿名變量

  2.2 常量

    2.2.1 字面常量

    2.2.2 常量定義

    2.2.3 預定義常量

    2.2.4 枚舉

  2.3 類型

    2.3.1 布爾類型

    2.3.2 整型

    2.3.3 浮點型

    2.3.4 復數類型

    2.3.5 字符串

    2.3.6 字符類型

    2.3.7 數組

    2.3.8 數組切片

    2.3.9 map

  2.4 流程控制

    2.4.1 條件語句

    2.4.2 選擇語句

    2.4.3 循環語句

    2.4.4 跳轉語句

  2.5 函數

    2.5.1 函數定義

    2.5.2 函數調用

    2.5.3 不定參數

    2.5.4 多返回值

  2.6 錯誤處理

    2.6.1 error接口

    2.6.2 defer

    2.6.3 panic()和recover()

  2.7 完整示例

    2.7.1 程序結構

    2.7.2 主程序

    2.7.3 算法實現

    2.7.4 主程序

    2.7.5 構建與執行

  2.8 小結

第3章 面向對象編程

  3.1 類型系統

    3.1.1 為類型添加方法

    3.1.2 值語義和引用語義

    3.1.3 結構體

  3.2 初始化

  3.3 匿名組合

  3.4 可見性

  3.5 接口

    3.5.1 其他語言的接口

    3.5.2 非侵入式接口

    3.5.3 接口賦值

    3.5.4 接口查詢

    3.5.5 類型查詢

    3.5.6 接口組合

    3.5.7 Any類型

  3.6 完整示例

    3.6.1 音樂庫

    3.6.2 音樂播放

    3.6.3 主程序

    3.6.4 構建運行

    3.6.5 遺留問題

  3.7 小結

第4章 並發編程

  4.1 並發基礎

  4.2 協程

  4.3 goroutine

  4.4 並發通信

  4.5 channel

    4.5.1 基本語法

    4.5.2 select

    4.5.3 緩沖機制

    4.5.4 超時機制

    4.5.5 channel的傳遞

    4.5.6 單向channel

    4.5.7 關閉channel

  4.6 多核並行化

  4.7 出讓時間片

  4.8 同步

    4.8.1 同步鎖

    4.8.2 全局唯一性操作

  4.9 完整示例

    4.9.1 簡單IPC框架

    4.9.2 中央服務器

    4.9.3 主程序

    4.9.4 運行小程序

  4.10 小結

第5章 網絡編程

  5.1 Socket編程

    5.1.1 Dial()函數

    5.1.2 ICMP示例程序

    5.1.3 TCP示例程序

    5.1.4 更豐富的網絡通信

  5.2 HTTP編程

    5.2.1 HTTP客戶端

    5.2.2 HTTP服務端

  5.3 RPC編程

    5.3.1 Go語言中的RPC支持與處理

    5.3.2 Gob簡介

    5.3.3 設計優雅的RPC接口

  5.4 JSON處理

    5.4.1 編碼為JSON格式

    5.4.2 解碼JSON數據

    5.4.3 解碼未知結構的JSON數據

    5.4.4 JSON的流式讀寫

  5.5 網站開發

    5.5.1 最簡單的網站程序

    5.5.2 net/http包簡介

    5.5.3 開發一個簡單的相冊網站

  5.6 小結

第6章 安全編程

  6.1 數據加密

  6.2 數字簽名

  6.3 數字證書

  6.4 PKI體系

  6.5 Go語言的哈希函數

  6.6 加密通道

    6.6.1 加密通信流程

    6.6.2 支持HTTPS的Web服務器

    6.6.3 支持HTTPS的文件服務器

    6.6.4 基於SSL/TLS的ECHO程序

  6.7 小結

第7章 工程管理

  7.1 Go命令行工具

  7.2 代碼風格

    7.2.1 強制性編碼規範

    7.2.2 非強制性編碼風格建議

  7.3 遠程import支持

  7.4 工程組織

    7.4.1 GOPATH

    7.4.2 目錄結構

  7.5 文檔管理

  7.6 工程構建

  7.7 跨平臺開發

    7.7.1 交叉編譯

    7.7.2 Android支持

  7.8 單元測試

  7.9 打包分發

  7.10 小結

第8章 開發工具

  8.1 選擇開發工具

  8.2 gedit

    8.2.1 語法高亮

    8.2.2 編譯環境

  8.3 Vim

  8.4 Eclipse

  8.5 Notepad++

    8.5.1 語法高亮

    8.5.2 編譯環境

  8.6 LitelIDE

  8.7 小結

第9章 進階話題

  9.1 反射

    9.1.1 基本概念

    9.1.2 基本用法

    9.1.3 對結構的反射操作

  9.2 語言交互性

    9.2.1 類型映射

    9.2.2 字符串映射

    9.2.3 C程序

    9.2.4 函數調用

    9.2.5 編譯Cgo

  9.3 鏈接符號

  9.4 goroutine機理

    9.4.1 攜程

    9.4.2 攜程的C語言實現

    9.4.3 協程庫概述

    9.4.4 任務

    9.4.5 任務調度

    9.4.6 上下文切換

    9.4.7 通信機制

  9.5 接口機理

    9.5.1 類型賦值給接口

    9.5.2 接口查詢

    9.5.3 接口賦值

Go語言編程