go語言學習小結(一)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。學習go。記錄下
1),package、import
    這兩個功能在現在的很多語言(java、C#)都具備了。這裡面引入包在C家族確實是個很好的東西,使得程式碼群組織更清晰;import而不是include標頭檔,完全剔除了c家族的弊病。

2),變數命名風格的改變
   定義變數:
      var i int跟C家族文法int i;相去甚遠,貌似更接近delphi、javascript、scala風格。當然在文法分析中這樣定義變數比C風格的定義是更容易識別的。

    類型推導:
      類型推導在很多函數語言(scala、f#等)是必須滴,當然C#為了推出lambda運算式也實現了這個功能,不過java現在還沒有。需要注意的是go中類型推導只能用在函數裡面。來看看 var i int=11的等價寫法  i := 11。

   同時給多個變數賦值:
      lua可以給多個變數賦值的,go也有而且文法幾乎一樣滴 a,b,c := 1,2,3 ,如果寫成 a,_:=1,2 那麼2就自動丟掉。
      有了這個功能交換變數一句話就搞定了 a,b =b,a。 

  定義多個變數:
      如果是定義相同類型的變數可以這樣 var i,j int  跟C差不多 int i,j;
      如果是多個不同類型的變數那是這樣
      var (
                i int
                s string
        )

  定義數組: 
      定義數組跟定義變數稍微變一變 var array [8]int
      還可以這樣寫 array :=[...]int{0,1,2,3,4,5,6,7}。
      擷取數組長度 len(array),而不是C家族的array.length
 
3),go內建資料類型
  slices:
      上面定義的數組大小是無法改變的。如果要動態那就要這樣 array :=make([]int,8) 或者這樣是
       var array []int       array =make([]int,8)

        [n:m]訪問符
            [n:m]同樣也適用於數組的。用array[n:m](n、m是數組下標)將返回一個從n到m-1的slices。
            如果寫成[n:]則等價於[n:len(array)]
             array :=[...]int{0,1,2,3,4,5,6,7}
             array2 :=array[2:4]    //返回{2,3}
              
        cap函數
             cap 用於擷取數組的容量。
 
       append函數
             在一個slices或數組後追加元素,產生一個新slices。
             array := [...]int{0,1,2,3,4,5,6,7}。
             array1 := array=append(array,8,9,10);//添加的資料(8、9、10)是一個可變參數

        copy函數
           n = copy(des ,src)。n等於拷貝元素個數。
           array := [...]int{0,1,2,3,4,5,6,7}。
           array1 := make( []int,5)
           copy(array1,array[0:5])
      
  map :
      go中內建了map資料結構。定義一個map是這樣的 var m map[kType]vType。vType是map關鍵字儲存的值的類型,kType是關鍵字的資料類型。map的建立也是需要用make函數來建立的 m=make(map[int]string) ,這裡建立關鍵字類型為int,值類型為string的map。如果map的值是知道的,那麼可以用這樣      m:=map[int]String{
              1:"A",
               2:"B",
               3:"C",
                ...      } 
      注意map裡每個元素逗號後一定要換行。
      map增加元素 m[4]="d" ;
      map去除元素 delete(m,4) 
      map判斷存在 val,exists :=m[4]

      很多人對go在語言層面內建slices和map持歡呼的態度,go為了內建slices(map)還添加關鍵字(go號稱很吝嗇關鍵字滴)。lua、python等語言都內建了很有特色的資料類型,go走的是一條方向(ruby、python的開發人員爽了吧)。也許真如go的開發人員說的slices(map)是輕量快速的。 
4),控制語句
    go裡控制語句精簡了(去除了while、do)不少而更靈活了。
    A),if語句。if在條件運算式內不用加圓括弧,但強制加大括弧。變化點if的條件表達可以有初始化語句
        if a:=1; a==0{}
    B),for語句
        for 運算式; 條件; 運算式{}     典型的C家族for
        for 條件{}                              C家族while的替代
        for{}                                      死迴圈
        for和關鍵字range結合遍曆數組、slices、map。類似於js的for in、java 的for(val : list.values())、C#的foreach.
            for key,value range array{}     C),switch。明顯的差別是go的switch case裡不用謝braek。
        C1,case可以有條件運算式
            a:=1
            swich{
                case a>0&& a<10:
                    //dosomething
                default:
                     //dosomething
            }
        C2,case 連續匹配
            swich a{
                case 1,2,3:
                    //dosomething
                default:
                     //dosomething
            }
        C2,fallthrough.新關鍵字fallthrough讓當前case匹配到下一個case裡。。
            swich a{
                case 1:fallthrough
                case 2:fallthrough
                case 3:fallthrough
                    //dosomething
                default:
                     //dosomething
            }
        C3,go的switch也有if語句一樣的初始化語句
            swich a:=1;a{}
相關文章

聯繫我們

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