New與make

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

14.筆記go語言——細節匯總一

slice和數組在聲明時的區別:聲明數組時,方括弧內寫明了數組的長度或使用...自動

計算長度,而聲明slice時,方括弧內沒有任何字元。

對於slice有幾個有用的內建函數:

l  len 擷取slice的長度

l  cap 擷取slice的最大容量

l  append 向slice裡面追加一個或者多個元素,然後返回一個和slice一樣類型的slice

l  copy 函數copy從源slice的src中複製元素到目標dst,並且返回複製的元素的個數

make用於內建類型(map、slice 和channel)的記憶體配置。new用於各種類型的記憶體配置。

New與make

內建函數new本質上說跟其它語言中的同名函數功能一樣:new(T)分配了零值填充的T類型的記憶體空間,並且返回其地址,即一個*T類型的值。用Go的術語說,它返回了一個指

針,指向新分配的類型T的零值。有一點非常重要:

new返回指標。

內建函數make(T, args)與new(T)有著不同的功能,make只能建立slice、map和channel,

並且返回一個有初始值(非零)的T類型,而不是*T。本質來講,導致這三個類型有所不同的

原因是指向資料結構的引用在使用前必須被初始化。例如,一個slice,是一個包含指向數

據(內部array)的指標、長度和容量的三項描述符;在這些項目被初始化之前,slice為

nil。對於slice、map和channel來說,make初始化了內部的資料結構,填充適當的值。

make返回初始化後的(非零)值。

流程式控制制

流程式控制制包含分三大類:條件判斷,迴圈控制和無條件跳轉。

Go裡面最強大的一個控制邏輯就是for,它即可以用來迴圈讀取資料,又可以當作while來控制邏輯,還能迭代操作。

for配合range可以用於讀取slice和map的資料.

Go裡面switch預設相當於每個case最後帶有break,匹配成功後不會自動向下執行其他case,而是跳出整個switch, 但是可以使用fallthrough強制執行後面的case代碼。

函數

函數是Go裡面的核心設計,它通過關鍵字func來聲明,它的格式如下:

func funcName(input1 type1, input2 type2)(output1 type1, output2 type2) {

   //這裡是處理邏輯代碼

   //返回多個值

   return value1, value2

}

Go函數支援變參。 接受變參的函數是有著不定數量的參數的。為了做到這點,首先需要定義函數使其接受變參:

func myfunc(arg ...int) {}

arg ...int告訴Go這個函數接受不定數量的參數。注意,這些參數的類型全部是int。

 

defer

Go語言中有種不錯的設計,即延遲(defer)語句,你可以在函數中添加多個defer語句。

當函數執行到最後時,這些defer語句會按照逆序執行,最後該函數返回。

Panic和 Recover

Go沒有像Java那樣的異常機制,它不能拋出異常,而是使用了panic和recover機制。應當把它作為最後的手段來使用,也就是說,你的代碼中應當沒有,或者很少有panic的東西。這是個強大的工具,請明智地使用它。

main函數和 init函數

Go裡面有兩個保留的函數:init函數(能夠應用於所有的package)和main函數(只能應

用於package main)。

 

物件導向

Go語言可以設計出基本的物件導向的程式了,但是Go裡面的物件導向是如此的簡單,沒有任何的私人、公有關鍵字,通過大小寫來實現(大寫開頭的為共有,小寫開頭的為私人),方法也同樣適用這個原則。

interface

Go語言裡面設計最精妙的應該算interface,它讓物件導向,內容組織實現非常的方便。interface是一組method的組合,我們通過interface來定義對象的一組行為。

反射

Go語言實現了反射,所謂反射就是動態運行時的狀態。我們一般用到的包是reflect包。

並發

有人把Go比作21世紀的C語言,第一是因為Go語言設計簡單,第二,21世紀最重要的就是並行程式設計,而GO從語言層面就支援了並行。

goroutine是Go並行設計的核心。

goroutine是通過Go的runtime管理的一個線程管理器。

25個關鍵字

break   default      func    interface   select

case    defer        go      map          struct

chan    else         goto    package     switch

const   fallthrough  if      range        type

continue for          import  return      var

• var和const 是Go語言基礎裡面的變數和常量申明

• package和import已經有過短暫的接觸

• func 用於定義函數和方法

• return 用於從函數返回

• defer 用於類似解構函式

• go 用於並行

• select 用於選擇不同類型的通訊

• interface 用於定義介面,

• struct 用於定義抽象資料類型,

• break、 case、 continue、 for、 fallthrough、 else、 if、 switch、 goto、 default裡面

• chan用於channel通訊

• type用於聲明自訂類型

• map用於聲明map類型資料

• range用於讀取slice、map、channel資料

相關文章

聯繫我們

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