方法method
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了扶風(fēng)免費建站歡迎大家使用!
-GO方法雖沒有class,依舊有method
-通過顯示說明receiver來實現(xiàn)與某個類型的組合
-只能為同一個包中的類型定義方法
-RECEIVER可以是類型的值或指針
-不存在方法重載
-可以使用值或指針來調(diào)用方法,編譯器會自動完成轉(zhuǎn)換
-從某種意義上來說,方法是函數(shù)的語法糖,因為receiver其實就是方法所接收的第一個參數(shù)
-如果外部結(jié)構(gòu)和嵌入結(jié)構(gòu)存在同名方法,則優(yōu)先調(diào)用外部結(jié)構(gòu)的方法
-類型別名不會擁有底層類型所附帶的方法
-方法可以調(diào)用結(jié)構(gòu)中的非公開字段
##method:
package main
import "fmt"
type A struct {
Name string
}
type B struct {
Name string
}
func main() {
a := A{}
a.Printa()
}
func (a A) Printa() {
fmt.Println("A")
}
接口interface
-接口是一個或多個方法簽名的集合
反射reflection
并發(fā)concurrency
Channel
-Channel是goroutine溝通的橋梁,大都是阻塞同步的
-通過make創(chuàng)建,close關(guān)閉
-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)
}
}
-可以設(shè)置單項或雙向通道
-可以設(shè)置緩存大小,在未被填滿前不會發(fā)生阻塞
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的發(fā)送與接收
-同時有多個可用的channel時按隨機順序處理
-可用空的select來阻塞main函數(shù)
-可設(shè)置超時
網(wǎng)站標題:GO語言method、interface、reflection、select
標題網(wǎng)址:http://aaarwkj.com/article20/jeedco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、面包屑導(dǎo)航、網(wǎng)站收錄、營銷型網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、用戶體驗
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)