Golang channel进阶

2018-02-01 04:16:18

将向管道中写入数据的称为“生产者”,从管道中读取数据的称为“消费者”。 1、生产者与消费者关系 在上篇文章中,生产者与消费者是1:1及n:1的关系,那么能不能实现1:n的关系嘞?即一个生产者向管道添加数据,多个消费者从管道读取?示例如下: 1:2案例: package main import ( "fmt" ) // 生产者 对 消费者 :1 -> 2 func main() { c := make(chan int) done := make(chan bool) // 生产者:大黄 go func() { for i := 0; i < 100;

Golang channel

2018-01-30 05:15:53

1、什么是 channel(管道/通道)? 在 golang 中,channel 是多个 goroutine (线程) 之间传递和同步数据的一种手段。同一时刻,仅有一个线程可以向 channel 发送数据,同样的,同一时刻也只能有一个线程能从 channel 读取数据。 channel 的特性使得它可以解决并发编程可能造成的死锁问题,同时也是 Mutex (上锁)及 sync 多线程编程的替代方案,可以简化代码结构。 2、channel 的声明方式 var c chan int // var 关键字声明,缓冲int类型数据 var c chan string // 缓冲string类型数据 c := make(chan int) // make关键字声明,

Golang指针

2018-01-27 03:45:01

golang中的指针与c语言指针略有不同。 1、基本类型的指针 var num int = 10 var p *int = &num // 指针的类型为所指向的变量的类型前加* 2、数组的指针与指针数组 数组的指针: arr := [3]int{1, 2, 3} var arrp *[3]int // 数组的指针 a := &arr // 直接取数组变量的地址赋值会报错(arrp = &arr) arrp = a // 通过第三个变量传递 指针数组: arr := [3]*int{} numArr := [3]int{1, 2, 3} for i, v

Golang并发编程、串行编程

2018-01-26 04:54:25

线程概要 1、什么是进程,线程,多线程? 开个QQ,开了一个进程;开了迅雷,开了一个进程。 在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程。 所以运行某个软件,相当于开了一个进程。在这个软件运行的过程里(在这个进程里),多个工作支撑的完成QQ的运行,那么这“多个工作”分别有一个线程。 所以一个进程管着多个线程。 通俗的讲:“进程是爹妈,管着众多的线程儿子”... 作者:南理汉子 链接:https://www.zhihu.com/question/25532384/answer/131906596 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 进程: 一个正在运行的程序一般就是一个进程,一个进程中可以有多个线程 线程:一条有序的CPU命令的集合体 多线程:多条有序CPU命令的集合体 备注:一个CPU在同一时刻只能执行一个CPU命令

Golang数组、map、函数及类

2018-01-23 05:13:49

数组/切片 数组声明: 普通声明: var arr = [5]int{} // 长度固定为5,不可扩展,{}中为初始值,默认为0 arr := [5]string{"a", "b", "c", "d"} var arr [5]int // [0, 0, 0, 0] make关键字声明数组切片: var arr = make([], 2, 4) // 长度 len(arr) 为2,容量 cap(arr) 为4,长度决定存储量,

区块链学习-进制、GO运算符

2018-01-12 04:02:55

int 与 uint 区别 int 表示有符号整数 uint 表示无符号整数 int8 -128~127 int16 -2^8~2^8 ... uint8 0~255 uint16 0~2^16 ... 十进制转二进制 1. 正整数转二进制 正整数使用二除法,得到的结果倒叙即为该十位数的二进制数 2. 负数转二进制 先得到正数对应的二进制数,然后取反,再加一即为该负数的二进制数 3. 小数转二进制 整数部分+小数点+小数部分 整数部分:按照前面的步骤正常转换 小数部分:小数部分乘2,得到结果的整数部分n,若小数部分不为零,继续上面的步骤。最后得到的n的排列即为小数部分 二进制转十进制 1. 正二进制数 正二进制即首位为0的二进制数,

区块链学习 - Golang初始

2018-01-11 03:01:09

系统:Ubuntu 16.0.4 安装 下载:https://golang.org/dl/ 下载linux对应的版本 解压:将源码解压至/usr/local tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz 配置环境变量:export PATH=$PATH:/usr/local/go/bin 检测安装:go version go env HelloBlockChain cd $HOME mkdir golang && cd golang vi index.

vue2+express前后端分离跨域session等问题

2017-06-06 06:05:58

基于 vue2 + express 的 RBAC 角色权限验证前后端分离项目。前端vue2 负责路由控制,数据渲染,后端 express 负责数据库操作,RBAC权限控制。 前端: 脚手架:vue-cli 选型:vue2 + vuex + vue-router + axios + iview + ES6 后端: 脚手架:express-generator 选型:express4 + mongodb 结构整合: 使用vue-cli生成的项目,默认安装了简易的 express,该 express 的启动文件为build/dev-server.js。执行cnpm start启动该 express,实际主要是启一个服务来运行 Vue。所以我们后端部分不以该文件为入口。 后端部分的目录使用express-generator来生成,由于我们做了前后端分离,所以express 的任务只是提供接口,做数据库操作,所以我们把view、

基于express的复杂应用——代码结构分层

2017-05-16 23:15:09

项目之初,我一般选择用 express 的脚手架工具 express-generator 生成目录结构,比较快捷,生成的文件结构也比较直观。 npm install express-generator -g // 全局安装 express -e myapp // 创建工程,生成目录,使用ejs作为模板语言 生成的目录结构如下: ├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets ├── routes │ ├── index.js │ └── users.js └── views ├── error.ejs ├── index.ejs └── layout.ejs app.js 作为入口文件 public 存放静态资源 routes 存放路由文件 views

SASS

2017-03-20 04:42:24

sass 安装 install ruby sudo gem install sass 申明变量 $value = 100px; $color = #fafafa; 编译 sass style.scss style.css 编译风格 * nested:嵌套缩进的css代码,它是默认值。 * expanded:没有缩进的、扩展的css代码。 * compact:简洁格式的css代码。 * compressed:压缩后的css代码。 sass --style compressed style.scss build.css 监听文件 // watch a file sass --watch input.scss:output.css // watch a directory