GO語言method、interface、reflection、select

來源:互聯網
上載者:User

標籤:語言   go   method   

方法method

-GO方法雖沒有class,依舊有method

-通過顯示說明receiver來實現與某個類型的組合

-只能為同一個包中的類型定義方法

-RECEIVER可以是類型的值或指標

-不存在方法重載

-可以使用值或指標來調用方法,編譯器會自動完成轉換

-從某種意義上來說,方法是函數的文法糖,因為receiver其實就是方法所接收的第一個參數

-如果外部結構和嵌入結構存在同名方法,則優先調用外部結構的方法

-類型別名不會擁有底層類型所附帶的方法

-方法可以調用結構中的非公開欄位

介面interface

-介面是一個或多個方法簽名的集合


反射reflection



並發concurrency

Channel

-Channel是goroutine溝通的橋樑,大都是阻塞同步的

-通過make建立,close關閉

-Channel是參考型別

package main

import "fmt"

import "time"

func main(){

c :=make(chan bool)

go func(){

fmt.Println("GO GO GO")

c <-true

}()

<-c

time.Sleep(2*time.Second)


}


-可以使用for range 來迭代不斷操作channel

package main

import "fmt"

//import "time"

func main(){

c :=make(chan bool)

go func(){

fmt.Println("GO GO GO")

c <-true

close(c)

}()

for v :=range c{

fmt.Println(v)

}


}


-可以設定單項或雙向通道

-可以設定緩衝大小,在未被填滿前不會發生阻塞

package main

import "fmt"

import "runtime"

func main(){

runtime.GOMAXPROCS(runtime.NumCPU())

c :=make(chan bool,10)

for i :=0;i<10;i++{

go Go(c,i)

}

for i :=0;i<10;i++{

<-c

}

}

func Go(c chan bool,index int){

a :=1

for i :=0;i<100000000;i++{

a+=1

}

fmt.Println(index,a)

c<-true


}

等價///

package main

import "fmt"

import "runtime"

import "sync"

func main(){

runtime.GOMAXPROCS(runtime.NumCPU())

wg :=sync.WaitGroup{}

wg.Add(10)

for i :=0;i<10;i++{

go Go(&wg,i)

}

wg.Wait()

}

func Go(wg *sync.WaitGroup,index int){

a :=1

for i :=0;i<100000000;i++{

a+=1

}

fmt.Println(index,a)

wg.Done()


}


Select

-可處理一個或多個channel的發送與接收

-同時有多個可用的channel時按隨機順序處理

-可用空的select來阻塞main函數

-可設定逾時


本文出自 “DBAspace” 部落格,請務必保留此出處http://dbaspace.blog.51cto.com/6873717/1963461

GO語言method、interface、reflection、select

聯繫我們

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