从零学习 Go 语言(25):详解信道/通道

![](http://image.iswbm.com/20200607145423.png) 在线博客:http://golang.iswbm.com/ Github:https://github.com/iswbm/GolangCodingTime --- Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是...阅读全文

Go语言中文网 2020-07-06 08:39:02 hello_wbm

ARTS 第8周| LeetCode 接雨水问题 | Golang 并发安全 map | 什么是开发能力?

ARTS ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。 本周内容 本周的 ARTS 你将看到: LeetCode 第 42 题「接雨水」Trapping Rain Water。 这是没有文章推荐的一周。 关于 Go sync.Map 的一些思考。 开发者的知识储备和其开发能力...阅读全文

Segmentfault 2020-07-10 12:32:32 casmo澎湃哥

这可能是最全的golang的"=="比较规则了吧

背景交代 大家经常用"=="来比较两个变量是否相等。但是golang中的"=="有很多细节的地方,跟php是不一样的。很多时候不能直接用"=="来比较,编译器会直接报错。 golang中基本类型的比较规则和复合类型的不一致,先介绍下golang的变量类型: 1,基本类型 整型,包括int,uint,int8,uint8,int16,uint16,int32,uint32,int64,uint64,byte,rune,uintptr等 浮点型,包括float32,float64 复数类型,包括co...阅读全文

简书 2020-07-06 05:32:54 舒小贱

golang的类型再定义和类型别名

类型再定义: type A int32 类型别名: type A = int32 1,类型再定义的使用 类型再定义,一般用在为一个类型添加一个独有的方法使用。再定义的类型,和原类型的方法,不再有交集。 以我们的http包为例: package http type HandlerFunc func(w ResponseWriter, r *Request) func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) { f(w, r) ...阅读全文

简书 2020-07-06 05:32:54 舒小贱

在百度超级链Xuper上部署智能合约并实现存证功能

现实生活中的使用场景 几个摄影师朋友找到你,他们的摄影作品上传到自己的blog后总是被其他人盗用,使用水印之类的方法也无法避免像截取部分这种情况,他们需要一个能证明摄影作品最早是由自己上传、而且具有法律效力可供自己进行维权的工具显然区块链对于解决此问题有很大的帮助,它的不可篡改等特性很适合存证维权的场景,我们可以通过XuperChain来构建一个存取证据的智能合约下面就来帮助摄影师朋友开发一个能够存储照片版权、还能在发现被盗用后进行维权的智能合约搭建xuper节点环境(多节点)环境准备go 1....阅读全文

简书 2020-07-06 05:32:53 平凡人笔记

golang学习入坑(一)Go介绍及环境搭建

什么是GO?Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区Go 语言特色?1、简洁、快速、安全。2、并行、有趣、开源。3、内存管理、数组安全、编译迅速Go 语言被设计...阅读全文

简书 2020-07-06 05:32:44 哎彤彤

golang copy 函数的使用

之前用 copy 不多,本以为它是个很方便的函数,没想到在做练习题时竟还是被它坑了。是我对他期望太多了。 func copy(dst, src []Type) int 基本认识: 它只能用于切片,不能用于 map 等任何其他类型 它返回结果为一个 int 型值,表示 copy 的长度 坑位一:切片 dst 需要先初始化长度 不是你定义好类型,就能将 src 完全 copy 到 dst 的,你需要初始化长度。 如果 dst 长度小于 src 的长度,则 copy 部分; 如果大于,则全部拷贝过来,...阅读全文

简书 2020-07-06 05:32:44 Robin92

Golang源码COOKIE Bug追查

起因 最近的项目从golang0.9升级到golang1.13后,项目中出现了很特殊的现象,在APP里,用户登录后访问页面正常,用户不登录,报错。 处理过程 Charles抓包发现,登录的情况下,服务返回的是protobuf的数据,未登录情况下返回的是json结构。服务是根据cookie中传入的数据来返回对应的数据类型。初步断定未登录情况下无法获取到cookie 检查登录和未登录情况下cookie的区别。 登录:serviceToken=abc;type=protobuf;session=123...阅读全文

掘金 2020年07月05日 shidawuhen

打造超级舒适的Go开发环境之VIM配置

最近博主已经从VIM迁移到了EMACS作为主要生产工具,目的是为了学习Lisp和体验EMACS操作系统之美,哈哈,不要被我弄的技术焦虑,没错,我就是换了个吃饭的盘子。写下这篇博客也是为了纪念我顺利的“从VIM毕业了”。 在阅读本文之前,你需要: 准备一个UNIX like的操作系统 一个可以跨过山和大海的代-理 话不多说,开始吧~ (1)下载必要的Go工具链 go get -v github.com/mdempsky/gocode go get -v github.com/ramya-rao-a...阅读全文

51CTO博客 2020-07-05 01:09:06 BlueMiaomiao

新书《Go语言编程之旅:一起用Go做项目》出版啦!

从我开始写技术文章起,不知不觉近三年过去了,咨询和催我出书和读者逐年递增,在 2019 年算是达到一个高峰。当然,综合考虑下我也是一直拒绝的,觉得火候还不够。 直至 2019.09 月,polaris 主动找到了我,说有事情想找我商量,本着 “如果你在纠结一件事情做还是不做,不如先做了看看结果,至少不会后悔” 的想法,更何况是长期被 Ping,因此我一口答应下来,故事自此开始了。 本书定位 本书不直接介绍 Go 语言的语法基础,内容将面向项目实践,同时会针对核心细节进行分析。而在实际项目迭代中,...阅读全文

掘金 2020年07月05日 煎鱼eddycjy

面试官:Redis过期key是怎么清理的?

redis 的 key 清理,也就是内存回收的时候主要分为:过期删除策略与 内存淘汰策略两部分。 过期删除策略 删除到达过期时间的 key 。 第一种:定时检查删除 对于每一个设置了过期时间的 key 都会创建一个定时器,一旦达到过期时间都会删除。这种方式立即清除过期数据,对内存比较好, 但是有缺点是:占用了大量 CPU 的资源去处理过期数据,会影响 redis 的吞吐量 和 响应时间。 第二种:惰性检查删除 当访问一个 key 的时候,才会判断该 key 是否过期,如果过期就删除。该方式能最大...阅读全文

Segmentfault 2020-07-10 09:32:38 自由哥

子性操作 & sync/atomic包 细说

package atomicimport "sync/atomic" atomic包提供了底层的原子级内存操作,对于同步算法的实现很有用。 这些函数必须谨慎地保证正确使用。除了某些特殊的底层应用,使用通道或者sync包的函数/类型实现同步更好。 应通过通信来共享内存,而不通过共享内存实现通信 被SwapT系列函数实现的交换操作,在原子性上等价于: old = *addr *addr = new return old CompareAndSwapT系列函数实现的比较-交换操作,在原子性上等价于: ...阅读全文

Golang源码COOKIE BUG追查

## 起因 最近的项目从golang0.9升级到golang1.13后,项目中出现了很特殊的现象,在APP里,用户登录后访问页面正常,用户不登录,报错。 ## 处理过程 1. Charles抓包发现,登录的情况下,服务返回的是protobuf的数据,未登录情况下返回的是json结构。服务是根据cookie中传入的数据来返回对应的数据类型。初步断定未登录情况下无法获取到cookie 2. 检查登录和未登录情况下cookie的区别。 - 登录:**serviceT...阅读全文

Go语言中文网 2020-07-05 14:47:10 shidawuhen

grpc-go google.golang.org/protobuf/compiler/protogen

1、grpc-go源码,下载后,发现不能导入google.golang.org/protobuf/compiler/protogen image 2、解决措施? 2.1、查找protobuf image image image image image 2.2 、下载protobuf-go源码 image 2.3、将源码解压,并移动到gopath/src下, image 从上面的图片中,可以看出来,grpc-go代码中,已经成功的导入了阅读全文

简书 2020-07-05 14:33:11 翻江倒海一条鱼

Go运行环境安装 (内附国内window安装包下载地址)

序 因为国内限制的原因无法在golang官网下载 go的环境安装包。 现已存于百度云盘可下载 链接:https://pan.baidu.com/s/1YFoY5b4aR9BVBeh3Zfzfpg 提取码:d3l5 安装过程 Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.4.2.windows-amd64.msi)的安装包来安装。 默认情况下 .msi 文件会安装在 c:\Go 目录下。你可以将 c:\Go\bin 目录添加到 Path 环境变量中。添加后你需要...阅读全文

简书 2020-07-05 14:33:00 如烟灬

面试官:换人!他连进程线程协程这些特点都说不出,

前言 很早之前就在构思这篇文章的主题,进程线程可以说是操作系统基础,看过很多关于这方面知识的文章都是纯理论讲述,编程新手有些难以下咽。 于是写下这篇文章,用图解的形式带你学习和掌握进程、线程、协程,文字力求简单明了,对于复杂概念做到一个概念一张图解,即使你是编程小白也能看的明明白白,妈妈再也不用担心你的学习。 image Go 基础教程系列教程更新已接近尾声,对 Go 语言学习感兴趣但还没看过的的同学,可以在公众号历史文章查看。Go 基础教程接下来会进入并发编程和 Go 协程部分,为了更好的理解...阅读全文

简书 2020-07-05 14:33:00 柠檬橙1024

golang gin框架

感觉 gin比iris好太多了,gin基本还比较符合原生http的模式 iris封装的对新手不友好 post参数分为json(表单)和非json package main import( "github.com/gin-gonic/gin" "file-storage/handler" ) func main() { router := gin.Default() router.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "mes...阅读全文

简书 2020-07-05 14:32:49 我真是刚的不像话

select详解

语法具体定义参考官方定义 https://golang.org/ref/spec#Select_statements select语句执行分以下一个步骤执行 所有channel表达式都会被求值、所有被发送的表达式都会被求值。求值顺序:自上而下、从左到右。 如果有一个或多个通信操作可以完成,则Go运行时系统会伪随机的选择一个执行。否则,如果有default分支,则执行default分支语句,如果连default都没有,则select语句会一直阻塞,直到至少有一个通信操作可以进行。 案例分析 所有c...阅读全文

简书 2020-07-05 14:32:49 只争朝夕々