自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

在路上

读万卷书 行万里路 阅人无数 仙人指路 贵人相助

  • 博客(14)
  • 收藏
  • 关注

原创 go语言学习笔记31------Goland之简版聊天室

package mainimport ( "net" "fmt" "strings" "time")// 创建全局用户结构体类型type Client struct { Name string Addr string C chan string}// 定义全局 map,存储在线用户列表var OnlineMap map[string]Client// 定义全局ch...

2018-09-20 22:17:45 239

原创 go语言学习笔记30------TCP通信

1.TCP通信过程下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。在这个例子中,首先客户端主动发起连接、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。两条竖线表示通讯的两端,从上到下表示时间的先后顺序。注意,数据从一端传到网络的另一端也需要时间,所以图中的箭头都是斜的。1.1三次握手所谓三次握手(Three-Way Handshake)即建立T...

2018-09-18 22:18:48 305

原创 go语言学习笔记29------Goland之TCP、UDP通信并发②

1.TCP并发C/S模型通信1.1并发Server现在已经完成了客户端与服务端的通信,但是服务端只能接收一个用户发送过来的数据,怎样接收多个客户端发送过来的数据,实现一个高效的并发服务器呢?Accept()函数的作用是等待客户端的链接,如果客户端没有链接,该方法会阻塞。如果有客户端链接,那么该方法返回一个Socket负责与客户端进行通信。所以,每来一个客户端,该方法就应该返回一个Soc...

2018-09-15 22:23:11 1589

原创 go语言学习笔记28------Goland之TCP、UDP通信①

1网络应用程序设计模式1.1C/S模式传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。1.2B/S模式浏览器(Browser)/服务器(Server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。1.3优缺点对于C/S模式来说,其优点明显。客户端位...

2018-09-13 22:15:01 942

原创 go语言学习笔记27------Goland之网络编程

1.网络概述1.1协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:1)第一次,传输文件名,接收方接收到文件名,应答OK给传输方;2)第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;3)第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论A、B之间传递何种文件,都是通过...

2018-09-12 22:13:07 862

原创 go语言学习笔记26------生产者消费者简易模型②

1.条件变量条件变量:条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源,而是在对应的共享数据的状态发生变化时,通知阻塞在某个条件上的协程(线程)。条件变量不是锁,在并发中不能达到同步的目的,因此条件变量总是与锁一块使用。GO标准库中的sync.Cond类型代表了条件变量。条件变量要与锁(互斥锁,或者读写锁)一起使用。成员变量L代表与条件变量搭配使用的锁。typ...

2018-09-11 17:38:03 206

原创 go语言学习笔记25------读写锁、互斥锁

1锁为了解决协程同步的问题我们使用了channel,但是GO也提供了传统的同步工具。它们都在GO的标准库代码包sync和sync/atomic中。下面我们看一下锁的应用。什么是锁呢?就是某个协程(线程)在访问某个资源时先锁住,防止其它协程的访问,等访问完毕解锁后其他协程再来加锁进行访问。1.1死锁死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的...

2018-09-08 22:08:32 5764 3

原创 go语言学习笔记24------生产者消费者简易模型①

今天,让我们来探讨下go语言之下的生产者消费者模型,让我们先来了解一下单向channel的定义。1.channel及应用默认情况下,通道channel是双向的,也就是,既可以往里面发送数据也可以同里面接收数据。但是,我们经常见一个通道作为参数进行传递而值希望对方是单向使用的,要么只让它发送数据,要么只让它接收数据,这时候我们可以指定通道的方向。单向channel变量的声明非常简...

2018-09-07 16:16:58 257

原创 go语言学习笔记23------Go语言并发编程③

1.channelchannel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。 channel是一个数据类型,主要用来解决go程的同步问题以及go程之间数据共享(数据传递)的问题。 goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine 奉行通过通信来共享内存,而不是...

2018-09-06 22:40:36 213

原创 go语言学习笔记22------Go语言并发编程②

1.Goroutine1.1什么是Goroutinegoroutine是Go语言并行设计的核心,有人称之为go程。 goroutine说到底其实就是协程,它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时...

2018-09-05 22:14:56 177

原创 go语言学习笔记21------Go语言并发编程①

1.Go并发编程1.1概述简而言之,所谓并发编程是指在一台处理器上“同时”处理多个任务。随着硬件的发展,并发程序变得越来越重要。Web服务器会一次处理成千上万的请求。平板电脑和手机app在渲染用户画面同时还会后台执行各种计算任务和网络请求。即使是传统的批处理问题–读取数据,计算,写输出–现在也会用并发来隐藏掉I/O的操作延迟以充分利用现代计算机设备的多个核心。计算机的性能每年都在以非线...

2018-09-04 21:54:35 185

原创 go语言学习笔记20------面向对象③

1.接口1.1接口实现package mainimport "fmt"type Human interface { sayhi()}type student struct { name string id int}func (s *student) sayhi() { fmt.Println(s.name, s.id)}type ...

2018-09-03 22:41:09 103

原创 go语言学习笔记19------面向对象②

1.方法1.1基本方法创建package mainimport "fmt"type Interger intfunc (a Interger)Test(b Interger) Interger { return a+b}func main() { var result Interger=3 t:=result.Test(3) fmt.Println(...

2018-09-02 22:49:07 131

原创 go语言学习笔记18------面向对象①

1:匿名字段1.1匿名字段创建与初始化package mainimport "fmt"type person struct { id int name string age int}type student struct { person //匿名字段 score float64}func main() { var a stud...

2018-09-01 20:29:28 129

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除