go語言一——基礎

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

參考《Go_web_編程.pdf》

See Also:

Go 語言簡介(上)— 文法

Go 語言簡介(下)— 特性

首先編寫一個簡單的指令碼hello.go

/** 定義包名*  main    表示可獨立運行*  [other] 編譯產生.a檔案*/package main/** 引入系統層級包 fmt*/import "fmt"// main.main 是每一個可執行程式的進入點func main() {        fmt.Printf("Hello, world or 你好,世界 or こんにちは世界\n")}

運行方式如下:

> go run hello.go #直接運行指令碼Hello World>> go build hello.go #編譯產生可執行檔或庫檔案//generate hello>> go clean #刪除

變數定義

package mainimport "fmt"// var vname type = value, 一般用var關鍵字定義全域變數var g_val1 int32 = 100//:= 賦值方式只能在函數體內用,不能用來建立全域變數//g_val2 := 100// 常量定義const cint = 1const cint2 int = 1const cstr string = "hello"const cstr2 = `hello` // 字串用雙引號或者反引號表示,不能用單引號// 聲明未使用全域變數編譯運行不報錯var bval boolfunc main(){        fmt.Printf("Global g_val1 = %v\n",g_val1)        // var vname1,vname2 type        var l_val1, l_val2 float32 = 1.2, 2.3        fmt.Printf("Local l_val1 = %v , l_val2 = %v\n",l_val1,l_val2)        // vname1,vname2 := value1,value2        l_val3, l_val4 := 2.3, 4        fmt.Printf("Local l_val3 = %v , l_val4 = %v\n",l_val3,l_val4)        // 聲明未使用局部變數在編譯階段會報錯        //var l_val5 int}

資料類型

package main//分組聲明import(        "fmt"        "errors")const(        i = 0        s = "測試")func main(){        //不同資料類型之間不能直接轉換,儘管長度一樣        var(                a int = 3                b int32                c rune = 4        )        b = a //error        b = c //ok        //cannot use a (type int) as type int32 in assignment        //字串拼接用"+"號        name := "你" + "好"        name = "世界"        fmt.Printf("name = %v\n",name)        //輸出"世界"        err := errors.New("自訂錯誤資訊\n")        if err != nil {                fmt.Print(err)                //輸出 "自訂錯誤資訊"        }}

Go 之所以會那麼簡潔,是因為它有一些預設的行為:
•大寫字母開頭的變數是可匯出的,也就是其它包可以讀取的,是公用變數;小寫字母開頭的就是不可匯出的,是私人變數。
•大寫字母開頭的函數也是一樣,相當於 class 中的帶 public 關鍵詞的公有函數;小寫字母開頭的就是有 private 關鍵詞的私人函數

數組操作

package main//分組聲明import(    "fmt"    //引用的包未使用時編譯會出錯    //"errors")func main(){    //數組聲明    var arr [10] int    arr[0] = 3    fmt.Printf("arr[0] = %v and arr[4] = %v\n",arr[0],arr[4])    //輸出 3 和 0    arr2 := [10]string{"name","age"}    arr2[0] = "nickname"    fmt.Printf("arr2[0] = %v and arr2[4] = %v\n",arr2[0],arr2[4])    //輸出 nickname 和 空    //多維陣列    doubleArray := [2][4]int{[4]int{1,2,3,4},[4]int{5,6,7,8}}    fmt.Printf("doubleArray[0][0] = %v\n",doubleArray[0][0])    easyArray := [2][4]int{{1,2,3,4},{5,6,7,8}}    fmt.Printf("easyArray[0][1] = %v\n",easyArray[0][1])    arr3 := [5]int{1,3,5,7,9}    //動態數組slice,定義時缺少長度    var sarr1,sarr2 []int    sarr1 = arr3[2:3] // sarr1 = {5}    sarr2 = arr3[1:] // sarr2 = {3,5,7,9}    fmt.Printf("sarr1[0] = %v\n",sarr1[0])    fmt.Printf("sarr2[0] = %v\n",sarr2[0])        fmt.Printf("len(sarr1) = %v\n",len(sarr1)) // 擷取數組長度    fmt.Printf("cap(sarr1) = %v\n",cap(sarr1)) // 擷取數組最大個數    sarr1 = append(sarr1,6) // 追加資料 sarr1 = {5,6}    fmt.Printf("sarr1[1] = %v\n",sarr1[1])    sarr2 = sarr2[:len(sarr2)-1] // 刪除末尾元素}

arr := []string{str1}

slice 有一些簡便的操作
• slice 的預設開始位置是 0,ar[:n]等價於 ar[0:n]
• slice 的第二個序列預設是數組的長度,ar[n:]等價於 ar[n:len(ar)]
• 如果從一個數組裡面直接擷取 slice,可以這樣 ar[:],因為預設第一個序列是 0,第二個是數組的長度,即等價於 ar[0:len(ar)]

package mainimport(        "fmt")func main(){        var (                m_val1 map[string] string        )        //聲明字典後需要調用make初始化        m_val1 = make(map[string] string)        m_val1["name"] = "ciaos"        m_val1["hobby"] = "game"        fmt.Printf("name is %v and hobby is %v\n",m_val1["name"],m_val1["hobby"])        m_val2 := make(map[string] int)        m_val2["first"] = 10        fmt.Println("字典內容為:","first => ", m_val2["first"])        // 輸出 "字典內容為: first => 10"        // 初始化一個字典        m_val3 := map[string] int{"A":1,"B":2,"C":3}        fmt.Println("length of m_val3 is",len(m_val3))        // 擷取指定key對應alue        num,ok := m_val3["D"]        if ok {                fmt.Println("m_val3[\"D\"] is ",num)        } else {                fmt.Println("m_val3[\"D\"] is invalid")        }        delete(m_val3,"B")}

使用 map 過程中需要注意的幾點:
• map 是無序的,每次列印出來的 map 都會不一樣,它不能通過 index 擷取,而必須通過 key 擷取
• map 的長度是不固定的,也就是和 slice 一樣,也是一種參考型別內建的 len 函數同樣適用於 map,返回 map 擁有的 key 的數量
• map 的值可以很方便的修改,通過 numbers["one"]=11 可以很容易的把 key 為 one的字典值改為 11
• map 的初始化可以通過 key:val 的方式初始化值,同時 map 內建有判斷是否存在 key 的方式
make 用於內建類型(map、slice 和 channel)的記憶體配置。new 用於各種類型的記憶體配置

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.