golang
帆的孤独啊
这个作者很懒,什么都没留下…
展开
-
go 协程控制
参考go协程控制方式有 waitGroup, select+chan(类似epoll), context三种。 waitGroup类似于消费者模型,使用ADD() 方法指定初始产品数量,使用Done()方法消费一个物品,使用Wait()表示直到物品数量消费到0为止 ,否则一直阻塞。 select就是对管道进行选择,哪个管道中写入了数据就选择哪个,多个同时写入的话随机选择。...原创 2019-11-04 11:42:47 · 759 阅读 · 0 评论 -
go第三方包管理
1. 传统方法 GOPATH 项目代码放在gopath/src目录下,使用go get 安装第三方库时会把源代码放在src, 然后执行go install 即对src代码build后把可执行文件放在bin目录下。2. go mod 使用go mod时,项目代码不应该放在gopath/src/目录下。使用go mod download会自动下载依赖包。...原创 2019-10-25 20:42:56 · 643 阅读 · 0 评论 -
go基础
变量定义1. 声明类型 不赋初值 (采用默认值 eg: sring "" int 0)var name bool 2. 赋值a := 15 同时定义多个变量var(a int; b bool)a, b:= 20, 16切片和数组之间的关系切边是数组的一个引用, 对数组的切片相当于声明了一个索引范围在定义时 没有生命容量的是创建切片 否则是数组...原创 2019-09-15 14:11:43 · 121 阅读 · 0 评论 -
golang切片及变参传值 指针
**** 理解切片ptr指向了一块内存区域 大小是cap 实际存放的内容大小是len 每次执行切片后相当于存放了一个指向该位置的索引结构 故修改值会相互影响 是一种引用在创建数组时没有指定大小即是创建切片 。或者声明了一个数组后 从数组中再进行切片*** 变参func addandsub(a int, b int) (int, int){ return a + b , ...原创 2019-09-15 21:39:25 · 1476 阅读 · 0 评论 -
goLang闭包理解
闭包是为了在函数内部捕获外部变量(不声明为全局变量)例如实现一个计数器 从base开始 每调用一个加一在c++ 中可以采用仿函数,在调用构造函数时传入base 或者使用lambda函数,捕获base变量class fun{private: int base;public: fun(int _base):base(_base){} int operator(...原创 2019-09-15 16:04:46 · 302 阅读 · 0 评论 -
golang 面向对象
type Animal interface { // 这里可以嵌入(或者说组合)别的接口 speak() big() bool}// struct 中只定义成员变量 interface 只定义方法// 在外面定义了interface 中所有的方法后就可看做实现了interface这就是ducktype// duck_type 实现了这个接口的所有方法就是这个接口(走起来是鸭子叫起...原创 2019-09-15 19:24:59 · 1667 阅读 · 0 评论 -
golang 协程通信
func finish(ch chan int){ fmt.Println("finish") ch <- 1}func main() { // 无缓冲管道 写入后一直阻塞到有人读出 // 或者在没有数据时读取也会阻塞 // 采取缓冲信道后变成生产者消费者模型 只有在空或者满时才会发生阻塞 ch := make(chan int) go finish(ch) fmt...原创 2019-09-16 14:33:40 · 423 阅读 · 0 评论 -
笔记
linux 虚拟路由器开启一个net namespace 通过设立iptables转发规则go 为什么适合高并发传统并发 (进程/线程 在内核态) 遇到阻塞(加锁)时发生线程切换,涉及到上下文切换耗时而协程切换发生在用户态 只涉及到一部分寄存器...原创 2019-09-29 21:23:19 · 102 阅读 · 0 评论