golang基础-高级特性概述


本文摘自网络,作者,侵删。

协程

协程是golang最重要的一个特性。在协程出现之前,线程被作为调度的最小单位。协程可以理解是一种用户态,逻辑层面的线程。 通过协程,我们将很容易地实现高并发。 加入你要做三件事,假设要执行a,b,c三个方法。代码该怎么写?平常我们的写法就是

a() b() c() 复制代码

只有a做完了,才能做b,b做完了,才能做c。 但有了协程就可以

go a() go b() go c() 复制代码

三个同时进行,充分利用多核的性能。

管道

管道概念

  1. 类似unix中管道(pipe)
  2. 先进先出
  3. 线程安全,多个goroutine同时访问,不需要加锁
  4. channel是有类型的,一个整数的channel只能存放整数

管道的定义

var ch0 chan int var ch1 chan string var ch2 chan map[string]string type stu struct{} var ch3 chan stu var ch4 chan *stu 复制代码

管道用于协程之间数据的传递。一般分为有缓冲管道,和无缓冲管道。两个协程间如果有数据交流怎么办,这时候就可以用管道来传递。 golang的设计是想就是用通信代替共享内存。

func a() {     ch <- 1 } func b() {     ch <-  } 复制代码

管道可以带缓冲,就是说可以往管道里放多个数据,放满了,才会阻塞。

c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 复制代码

c1<-1 无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。

有缓冲: c2<-1 则不会阻塞,因为缓冲大小是1,只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。

面试经常会问到这个问题。 实际就是同步和异步的区别。

接口 interface

定义:An interface is a collection of method signatures that an Object can implement 一个接口是一组函数签名的集合。具体结构可以实现他们。 比如:

type Shape interface {     Area() float64     Perimeter() float64 } 复制代码

这就是一个接口,声明了两个方法Area和Perimeter 下面咱们可以定义具体结构,实现这个接口。

// type rect type Rect struct {     height float64     weight float64 } func (p *Rect) Area() float64 {     return p.height * p.weight } func (p *Rect) Perimeter() float64 {     return 2 * (p.height + p.weight) } 复制代码

接口可以提供面向对象编程的能力,只要实现了某接口,就可以用该接口对象 指向具体类型对象。相同类型的引用,指向不同对象,即多态。 我们看到,golang中的派生关系,不像c++,java一样需要显式指定,只需要实现接口所定义的所有方法即可。所以,golang的继承关系,是非侵入式的,这也是golang的特色与优点。



本文来自:51CTO博客

感谢作者:mob604756e80bb7

查看原文:golang基础-高级特性概述

相关阅读 >>

Golang flag是什么

Go读书社区web开发与高性能架构优化

Golang 中的高级循环

Golang 断言是什么

Golang中定义不定长数组的方法

Golang interface接口深入理解

手撸Golang 仿spring ioc/aop 之3

Golang 大杀器之性能剖析 pprof

Go 语言结构

centos7 安装Godoc

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...