Golang

golang channel 用法总结

goroutine 使用golang的channel之前,我们需要先了解go的goroutine。Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。goroutine 是轻量级线程,相比线程开销更小,完全由 Go 语言负责调度,是 Go 支持并发的核心。如下所示,在go中我们可以很方便的开启并发执行。 package mai...

Golang 里的 AES、DES、3DES 加解密,支持 ECB、CBC 等多种模式组合

Openssl encryption:OpenSSL库的功能包装,用于对称和非对称加密和解密。 AES-ECB AES-CBC DES-ECB DES-CBC 3DES-ECB 3DES-CBC 安装 go get -u github.com/thinkoner/openssl 用法 AES 密钥的长度可以是16/24/32个字符(128/192/2...

Golang Web入门(1):自顶向下理解Http服务器

摘要 由于Golang优秀的并发处理,很多公司使用Golang编写微服务。对于Golang来说,只需要短短几行代码就可以实现一个简单的Http服务器。加上Golang的协程,这个服务器可以拥有极高的性能。然而,正是因为代码过于简单,我们才应该去研究他的底层实现,做到会用,也知道为什么这么用。 在本文中,会以自顶向下的方式,从如何使用,到如何实现,一点点的分...

Golang源码探索(二) 协程的实现原理(转)

Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱,虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的.这篇文章将通过分析golang的源代码来讲解协程的实现原理. 这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版...

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库协助释放CPU 总之,不通过OS进行切换,自行切换,系统运行开支大大降低 通道channel 并发编程的关键在于执行体之间的通信,go通过通过channel进行通信 channel可以认为类似其他OS体系中的消息队列,...

Python与Golang协程异同

背景知识 这里先给出一些常用的知识点简要说明,以便理解后面的文章内容。 进程的定义: 进程,是计算机中已运行程序的实体。程序本身只是指令、数据及其组织形式的描述,进程才是程序的真正运行实例。 线程的定义: 操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程和线程的关系: 一条线程指的是进程中一个单一顺序的控制流,一个进程...

golang 并发程序写入map两种实现方式sync.Mutex和chan的效率对比

golang原生的数据结构map,由于是通过hash方式实现的,不支持并发写入,但是在golang很多并发场景中,不可避免的需要写入map,下面介绍两种解决map并发写入的实现方式: sync.Mutex互斥锁(通过加锁解锁解决map不能并发写入的问题) chan (通过管道来解决map并发的问题),chan的存在完美解决goroutine之间的通信以及...

golang ide工具安装

    GoLand Mac版是Mac平台上的一款Go语言IDE开发工具。GoLand Mac版是由JetBrains推出的一个GO语言集成开发工具环境,基于IntelliJ平台,支持JetBrains插件体系,拥有针对GO语言的代码助手、代码编辑器、代码调试等工具。 安装工具包:http://www.pc6.com/mac/644577.html 这个是...

golang中使用Redis

一.golang中安装Redis github地址:https://github.com/garyburd/redigo 文档地址:http://godoc.org/github.com/garyburd/redigo/redis 安装: go get github.com/garyburd/redigo/redis 二.简单连接Redis conn pa...

【GoLang】golang底层数据类型实现原理

虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的。它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。 基础类型 源码在:$GOROOT/src/...