自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

转载 【转】GO中的select3个特性

原文链接 作者:大彬 链接:https://segmentfault.com/a/1190000017410112 来源:SegmentFault 思否 select的三个特性 nil的通道永远阻塞 当case上读一个通道时,如果这个通道是nil,则该case永远阻塞。 这个功能有1个妙用,select通常处理的是多个通道,当某个读通道关闭了,但不想select再继续关注此case,继续处理其他case,把该通道设置为nil即可。 下面是一个合并程序等待两个输入通道都关闭后才退出的例子,就使用了这个特性。

2020-07-22 08:29:27 266

转载 【转】Golang并发模型:并发协程的优雅退出

原文链接 Golang并发模型:并发协程的优雅退出 本文作者:大彬 前言 goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。 goroutine在退出方面,不像线程和进程,不能通过某种手段强制关闭它们,只能等待goroutine主动退出。 方法一:使用for-range退出 for-range是使用频率很高的结构,常用它来遍历数据,range能够感知chann

2020-07-21 23:46:56 368

原创 【读书笔记二】:RPC和PROTOBUF

前言 RPC,远程过程调用,通俗的讲就是调用远程的一个函数;RPC可能会涉及到不同语言的函数,这时候就需要Protobuf来支持多种不同的语言,而且Protobuf本身就很方便描述服务的接口,因此非常适合作为RPC世界的接口交流语言。 RPC 通过一个的例子来实现简单的Rpc功能 // 服务端 package main import ( "log" "net" "net/rpc" ) type HelloService struct { } //Go语言的Rpc规则:方法只能有2个可序列化的参

2020-07-16 21:38:07 430

原创 读书笔记【一】:数组、字符串、切片

Go语言的赋值和函数传参规则:除了闭包函数以引用的方式对外部变量访问之外,其他赋值和函数传参都是以传值的方式处理。 数组的长度是数组类型的组成部分,不同长度或不同类型的数据组成的数据都是不同的类型,不同长度的数组因为类型不同而无法直接赋值, 数组 Go语言的数组是值语义。一个数组变量即表示整个数组,它并不是隐式地指向第一个元素的指针,而是一个完整的值。每一次传递或者赋值实际上都是赋值整一个数组,为了避免复制数组带来的开销,可以传递一个指向数组的指针,但是数组指针并不是数组。但是指向不同长度的数组指针的.

2020-07-13 09:35:19 180

原创 Go接口扫盲

Go接口 接口嵌入接口,保持深度在0或1为最佳。 接口中直接定义的方法数量10个之内最佳 参考 Rune Java的char类型是UTF-16的code unit,也就是两个字节,字符串是UTF-16 code unit的序列,因此每个字符都是定长的,要想获得某个位置字符,很容易计算出它的字节在字符串中的位置。 Go语言使用UTF-8作为字符串的内部编码,因此对于大部分字符串都是ascii字符的情况下,占用的内存空间就会大大减少,但是带来的问题是,从字符串的字节slice中查找第n个字符比较麻烦,因为

2020-07-09 11:45:16 133

原创 modoule

设置代理 首先在命令行设置GOPROXY设置代理,多个代理服务器可以用逗号隔开,direct关键字表示直连不适用代理, export GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy,https://goproxy.io,direct 然后cd目录到项目根目录执行 go mod tidy go modules 模块化管理 通过GO1111MODILE环境变量来开启或关闭,默认是auto off\on\auto:关闭,开

2020-07-09 11:42:46 624

原创 【持续更】go语言避免踩坑

slice切片使用之前要判断长度 在对slice进行操作时,必须判断长度是否合法,防止程序panic // 使用data前应判断长度是否合法 func decode(data [] byte) bool { if len(data) == 6 { if data[0] == 'F' && data[1] == 'U' && data[2] == 'Z' && data[3] == 'Z' && data[4] == '

2020-07-09 11:42:02 168

原创 Go语言系列(十六):上下文context

背景 在 Go http包的Server中,每一个请求在都有一个对应的 goroutine去处理。请求处理函数通常会启动额外的goroutine用来访问后端服务,比如数据库和RPC服务。一个上游服务通常需要访问多个下游服务,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。 传统方案一:使用sync.WaitGroup 问题:只有所有的goroutine

2020-07-02 07:04:52 644

原创 Go语言系列(十五):反射reflect

反射的一些基本概念和需要知道的知识 Golang语言实现的反射机制就是指在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的。 go的变量包括type, value两部分,type 包括static type和concrete type. (static type是你在编码是看见的类型(如int、string),concrete type是runtime系统看见的类型)。类型断言能否成功,取决于变量的concrete type,而不是static type. 因此,一个 reade

2020-07-01 10:14:16 330

空空如也

空空如也

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

TA关注的人

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