go語言編程摘要

來源:互聯網
上載者:User

標籤:sch   限制   擷取   基於   取數   核心   針對   add   寫入   

第一章 初識Go語言
Google是Go語言的主推者,開源社區
自動記憶體回收
函數多傳回值
記憶體檢查工具 Rational Purify、Compuware BoundsChecker、Parallel Inspector等
內建map 和Slice類型(數組)
不支援繼承和重載
goroutine是比線程更輕盈更省資源的協程
支援反射,不能通過類型名稱字串來構造執行個體
通過Cgo支援對C的重用
可執行程式必須有一個名字為main的包,並且有一個main函數(沒有參數,也沒有傳回值)
log包提供了基礎的日誌功能
支援GDB調試

第二章 順序編程
變數聲明
var v1 [] string
var (
v1 int
v2 string

聲明並直接初始化的情境,var可以省略
var v3 = 10
v3:= 10
編譯器可以自動推導類型
支援多重賦值 i,j = j,i
函數有多個傳回值但是只需要其中一個,可以使用多重賦值+匿名變數
,,v3 := getName()

常量通過const關鍵字聲明
const a,b,c = 3,4,"foo"
內建常量 true false iota(自增,const重設為0)
大寫字母開頭的常量,包外可見,否則為私人
基礎類型 bool int8 byte int16 int unit unitptr float32 float64 complex64 complex128 string rune(字元) error
符合類型 pointer array slice map chan struct interface
字串可以以數組下標的方式讀取,但是不能修改。
內建函數len() 擷取字串長度或者數組長度
range關鍵字遍曆數組、容器
for i,v := range array{
}
數組是實值型別,作為參數傳遞時,進行資料複製,函數中無法修改傳入的數組內容
slice 基於數組建立或者通過make建立
mySlice := array[:5]
mySlice := make([]int ,5)
len()獲得元素個數 cap()獲得容量 append()切片擴容 append(slice1,slice2...) 三個點代表把slice2的所有元素打散後傳入,滿足不定參數的特點。 copy()支援slice的複製
map使用:
var mymap map[string] PersonInfo
mymap = make(map [string] PersonInfo) 、mymap = make(map [string] PersonInfo, 100)
mymap["123"]=PersonInfo{"1","jack"}
刪除用delete(mymap,"123")
尋找 value,ok:=mymap["123"] ok為true代表找到

條件陳述式if :不需要將條件用括弧包含起來 {}必須存在 不允許存在return
switch語句的條件對象可以省略,在case後面加上條件判斷;不需要使用break來退出case,如果繼續執行下一個case,使用fallthrough關鍵字
迴圈支援for,不支援while和do while, 省略條件則代表無限迴圈,如for {sum ++}
break可以後面跟一個label,支援中斷那一層的迴圈。
支援goto語句

函數定義 func Add(a, b int)(ret int ,err error){},參數類型相同可以省略類型描述,如果只有一個傳回值,可以寫成func Add(a,b int) int {}
對於函數、類型、變數的命名,要注意大小寫,大寫對其他包開放,小寫只對本包開放。
支援不定參數 func myfunc(args ...int) 不定參數必須是最後一個參數;不定參數本質上是一個數組切片 ;不定參數可以使用interface指定為任意類型,arg.(type)擷取參數運行時的實際類型。
支援匿名函數,支援閉包,閉包中可以引用外部變數

錯誤處理,是GO語言的一大亮點
error介面
自訂error介面,實現Error方法。

defer關鍵字(順延強制)來完成資源的釋放,如果有多條語句,可以使用匿名函數 defer func(){}()
defer關鍵字遵循先進後出的原則,所有一個defer語句最先被執行。
panic和recover方法的使用
使用flag包解析命令列輸入的參數 flag.String("i", "infile", "1")
掌握os io bufio strconv等標準庫的使用。

第三章 物件導向編程

支援為任意類型增加方法
type Integer int
func (a Integer) less (b Integer){
return a<b
}
Go語言的大多數類型都是實值型別,包括基本類型和符合類型
slice map channel和interface看起來像參考型別。

結構體定義
type Rect struct {
x,y int
}
初始化 rect1 = new (Rect);rect2=&Rect{};rect3=&Rect{1,2};rect4=&Rect{x:1,y:2}
結構體通過匿名組合的方式,實現了類似java繼承和方法覆蓋的能力,如果方法沒有被改寫,則可以直接整合過來。
普通的struct不能賦值為nil,並且不能和nil進行==判斷,struct指標可以賦值為nil,即使==nil,println也可以輸出struct的類型。

非侵入式介面
type IFile interface {
Read (buf []byte)(n int, err error)
}
介面賦值
var a Integer = 1
var b LessAdder = &a
判斷某個執行個體是否實現了介面
var file1 Writer = ...
if file6,ok:= file1.(*File);ok {
}
switch v := v1.(type) {
case int :
...
}
也可以通過反射的方式reflect.TypeOf()
介面跟結構體一樣,支援匿名組合
空介面interface{}可以看做是可以指向任意對象的Any類型
介面對象和介面對象的指標都可以賦值為nil或者判斷是否相等。
講一個指標對象賦值為nil,然後將指標對象賦值給一個介面,此時介面對象不為nil,原因??

第四章 並發編程
常見的並發通訊模型:共用資料、訊息
線程和進程通過最多不超過1W個,而協程可以輕鬆建立上百萬個。
goroutine支援的協程,在系統叫用作業中會出讓CPU給其他的goroutine。
channel:在多個goroutine之間傳遞訊息,實現了鎖的能力。
聲明 var chanName chan ElementType ;var m map[string] chan bool
賦值 ch:=make (chan int)
寫入 cha <- chanValue 寫入會導致程式阻塞,直到有其他goroutine從該channel中讀取資料
讀取 chanValue :=<- ch,如果之前未寫入資料,則讀取也會導致程式阻塞。

select語句
for {
select {
case ch<-0:
case ch<-1:
}
i:= <-ch
}

帶緩衝的channel,在channel緩衝區塞滿之前不會阻塞
var c = make (chan int ,1024)
單向channel,可以限制唯讀或者唯寫
關閉channel cloes(chan)
判斷一個channel是否被關閉 x,ok:=<-ch ok如果返回false,則代表chan已經被關閉。

多核並行化:需要使用runtime.GOMAXPROCS(16)來明確告訴GO編譯器CPU的核心數。 NumCPU()方法擷取CPU核心數
出讓時間片: Gosched()

同步鎖:sync.Mutex和sync.RWMutex(單寫多讀)
全域唯一性操作 Once.Do() 在sync.Once包

第五章 網路編程
建立連結
conn,err:=net.Dial("tcp","192.168.0.10:2100") ==net.DialTCP
conn,err:=net.Dial("udp","192.168.0.10:2100") ==net.DialUDP
conn,err:=net.Dial("ip4:icmp","www.baidu.com")
conn,err:=net.Dial("ip4:icmp","www.baidu.com")
conn.write()
conn.read()
net.ResolveTCPAddr() 解析地址和連接埠號碼
net.ParseIP() 驗證IP地址有效性
net.IPv4Mask 建立子網路遮罩
net.DefaultMask()
net.ResolveIPAddr()/net.LookupHost() 根據網域名稱尋找IP地址

http封裝
http.Get("www.baidu.com")
http.Post()
服務端 http.ListenAndServe()

支援RPC編程
Go的預設資料結構編解碼是用Gob,支援自訂

go語言編程摘要

聯繫我們

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