继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

GO语言method、interface

ios开发零基础入门
关注TA
已关注
手记 265
粉丝 20
获赞 110

方法method

-GO方法虽没有class,依旧有method

-通过显示说明receiver来实现与某个类型的组合

-只能为同一个包中的类型定义方法

-RECEIVER可以是类型的值或指针

-不存在方法重载

-可以使用值或指针来调用方法,编译器会自动完成转换

-从某种意义上来说,方法是函数的语法糖,因为receiver其实就是方法所接收的第一个参数

-如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法

-类型别名不会拥有底层类型所附带的方法

-方法可以调用结构中的非公开字段

##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



并发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函数

-可设置超时


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP