Go學習筆記

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

  • Go語言
    • 特性
      • 讚美之詞
    • Chapter1
      • tips
    • Chatper2 基本文法
      • 特殊保留關鍵字
      • tips
      • 變數申請
      • built-in types
      • 流程式控制制
        • if
        • for
        • break goto 都可支援標籤
        • switch
        • fallthrough
        • func函數定義
        • defer 延遲
        • panic recover try catch
        • import操作
        • struct 自訂類型

Go語言

特性:

極簡文法,原生多線程支援;

讚美之詞:

解釋性的靈活,動態類型語言的效率,靜態類型的安全性;

Chapter1:

GOPATH 為 go語言的工作目錄;
* 基本檔案——$GOPATH/src, pkg, bin
* go build :編譯,若有main package 組建目錄名相同的可執行檔
* go install 產生package
* go fmt 可自動格式化代碼風格;

tips:

  • array_linux.go array_darwin.go build 換選與當前系統內容相同的編譯;

Chatper2 ——基本文法

go 預設utf-8編碼;

特殊保留關鍵字:

chan, defer, fallthrough, map, range, select,

tips:

  1. fmt.Printf 不會自動換行;
  2. 而python的 print 會自動換行;
  3. _, b = 34, 35 ; # 賦值給 “_” 的變數會被丟棄
  4. 未使用的變數,會編譯錯誤(好強制);
  5. int32 與 int 64 不可加減(無cast);
  6. 支援複數: var c complex64 = 5 + 5i;
  7. 字串反引號 “ 括起來 為 raw_string, 不進行轉義;
  8. iota 每次賦值時,重設為0;
  9. 數組定長;
  10. slice 有個 cap 概念;當cap為0後,slice.append() 會開闢新的記憶體;

變數申請

var var1 typevar default_var1, default_var2 type = '1', '2'var notype_var1, notype_var2 = '1', '2'simple_var1, simple_var2 := '1', '2'

var variable type; 變數申明在最後;
提供預設值的時候可以不申明 type;
甚至不提供關鍵詞 var
var1, var2 := ‘1’, ‘2’
“:=” 賦值符號,相當於定義了這個變數;但僅針對局部變數;
全域變數必須用 var 顯式申明;

var 變數;
const 常量;

built-in types:

  1. bool: true, false
  2. int, uint; 以及各種定長 int32, int64; (各種int之間不可加減)
  3. string: 雙引號”“, 反引號“ 括起來;(無單引號) immutable;
    改變字串,必須變為 byte 數組,修改後,再 new_str = string(btye_array)
  4. error: 錯誤類型
  5. array: var arr [n]type;
  6. slice: 動態數組; var arr []type;
  7. map: 即 python dict; rating := map[string]float32 {“C”: 4.5, “GO”: 5}

go語言的記憶體配置——每個資料類型 一塊 獨立的地區;(因此不同Int之間無法賦值)

iota 枚舉值

const (    x = iota    y = iota    z = iota    w)        # x:0, y:1, z:2, w:3const t = iota   # 此時iota重設為0, t:0

convention:
大寫字母開頭的為 Public; 如 Sqrt
小寫字母開頭的為 Private; 如 calculate

流程式控制制:

if:

條件式左右 無 括弧 ()
條件是可 申明變數(局部變數,僅if語句塊內生效)

for

for i=0; i < 1000; i++ {}for ; sum < 1000; {    sum += 10}可簡寫為:for sum < 1000; {   sum += 10}# 其實就是 while(囧)

break, goto 都可支援標籤;

switch

每個 case 預設添加 break操作(終於不用寫那麼多 break 了)

fallthrough

強制 switch case 匹配後 繼續執行,不自動break;

func函數定義

func funcName(input1 type1, input2 type2) (output1 type1, output2 type2) {    return value1, value2}

感想:囧!為啥把傳回值放到 參數後面去了;
給傳回值命名,最大的好處是 func 內可見,可直接return;

defer (延遲)

在函數結束後,逆序執行;(先進後出)
常用於資源關閉;

panic + recover = try catch;

每個 package 建議有一個 init 函數(正如python package 中的 init.py 作用一樣)
main 函數僅在 main package裡有;

import操作:

import (    f "fmt"    . "net/http"    _ "github.com/ziutek/mymysql/godrv")# f 此時為 fmt 的別名; . 為目前的目錄的意思,http包裡函數可以直接使用;# 同python 中  from net.http import *# _ 不引入變數,僅執行 init 函數;

struct 自訂類型;

type Human struct {    name string    age int    weight int}type Student struct {    Human    speciality string}

匿名定義就相當於其他語言的繼承; Student預設包含Human的所有欄位;

# method 只需要在函數前面增加一個 receiver 即可;func (c Circle) area() float64 {   return c.radius * c.radius * math.Pi}

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.