图解Go select语句原理

Go 的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中没有case语句的时候,会阻塞当前的groutine。所以,有人也会说select是用来阻塞监听goroutine的。 还有人说:select是Golang在语言层面提供的I/O多路复用的机制,其专门用来检测多个channel是否准备完毕:可读或可写。 以上说法都正确。 ## I/O多路复用 我们来回顾一下是什么是``I/O多路复用``。 ### 普通多线...阅读全文

2019-03-31 17:14:51 RyuGou
阅读:1412 评论:1

Golang 入门 : 切片(slice)

切片(slice)是 Golang 中一种比较特殊的数据结构,这种数据结构更便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数 append() 来实现的,这个函数可以快速且高效地增长切片,也可以通过对切片再次切割,缩小一个切片的大小。因为切片的底层也是在连续的内存块中分配的,所以切片还能获得索引、迭代以及为垃圾回收优化的好处。 本文将介绍 Golang 切片的基本概念和用法,演示环境为 ubuntu 18.04 & go1.10.1。 ...阅读全文

2019-04-19 15:38:56 xjtuhit
阅读:944 评论:1

实战Go内存泄露

最近解决了我们项目中的一个内存泄露问题,事实再次证明pprof是一个好工具,但掌握好工具的正确用法,才能发挥好工具的威力,不然就算你手里有屠龙刀,也成不了天下第一,本文就是带你用pprof定位内存泄露问题。 关于Go的内存泄露有这么一句话不知道你听过没有: 10次内存泄露,有9次是goroutine泄露。 我所解决的问题,也是goroutine泄露导致的内存泄露,所以这篇文章主要介绍Go程序的goroutine泄露,掌握了如何定位和解决goroutine泄露,就掌握了内存泄露的大部分场景。 本文...阅读全文

2019-05-26 19:34:33 大彬
阅读:4059 评论:1

golang text/template

https://juejin.im/post/5c403b98f265da612d1984c9 template包是数据驱动的文本输出模板,即在写好的模板中填充数据 模板 模板使用流程: 定义模板 解析模板 数据驱动模板 package main import ( "os" "text/template" ) func main() { //数据 name := "Tom" //定义模板 muban := "hello, {{.}}" //解析模板 tmpl, err := template.N...阅读全文

2019.06.03 11:12* GeminiGirl0604
阅读:7541 评论:1

深度解密Go语言之unsafe

目录 指针类型 什么是 unsafe 为什么有 unsafe unsafe 实现原理 unsafe 如何使用 获取 slice 长度 获取 map 长度 map 源码中的应用 Offsetof 获取成员偏移量 string 和 slice 的相互转换 总结 参考资料 上一篇文章我们详细分析了 map 的底层实现,如果你也跟着阅读了源码,那一定对 unsafe.Pointer 不陌生,map 对 key 进行定位的时候,大量使用。 unsafe.Pointer 位于 unsafe 包,这篇文章,我...阅读全文

2019-06-03 09:07 qcrao-2018
阅读:2015 评论:0

一文理清 Go 引用的常见疑惑

今天,尝试谈下 Go 中的引用。 之所以要谈它,一方面是之前的我也有些概念混乱,想梳理下,另一方面是因为很多人对引用都有疑问。我经常会看到与引用有关的问题。 比如,什么是引用?引用和指针有什么区别?Go 中有引用类型吗?什么是值传递?址传递?引用传递? 在开始谈论之前,我已经感觉到这必定是一个非常头疼的话题。这或许就是学了那么多语言,但没有深入总结,从而导致的思维混乱。 前言 我的理解是,要彻底搞懂引用,得从类型和传递两个角度分别进行思考。 从类型角度,类型可分为值类型和引用类型,一般而言,我们...阅读全文

2019年09月28日 波罗学
阅读:1869 评论:1

别傻傻的觉得是自己技术不行——菲律宾PHP面试套路

16年底,本人靠一手纯熟的php孤身闯荡菲律宾,现在也将近三载了。公司也换了差不多5,6个。由刚开始的懵懵懂懂,到现在的熟悉各种招聘套路,在技术岗位上也算是职场老司机了。如今马上回国了,在上岸之前,我给各位后来人分享一些技术方面的求职经验。1.该技能在行业中的薪资水平不同的技术和编程语言在行业中的薪资报酬是不同的,价格是由市场需求决定的,需求少但是人才多,竞争就激烈,价格也就越低;需求量大但是人才少,那么价格就高,这个道理,大家事知道的。就最近一年来看,php、java 的需求还是一往如常的大,...阅读全文

2019.10.04 13:07:41 aside section . 等
阅读:2482 评论:1

[译]Golang template 小抄

目录 [−] 解析和创建模板命名模板创建模板解析多个模板解析字符串模板执行模板执行简单模板执行命名的模板模板编码和HTML上下文编码安全字符串和 HTML注释模板变量. 字符模板中的变量模板动作if/else 语句移除空格Range模板函数获取索引值and 函数or 函数not 函数管道模板比较函数比较嵌套模板和布局嵌套模板模板之间传递变量创建布局模板调用函数函数变量 (调用结构体的方法)函数变量 (调用)自定义函数自定义函数 (全局)第三方自定义函数 这是 Curtis Vermeeren 做...阅读全文

2019年11月05日 smallnest
阅读:789 评论:1

系统监控设计与实现

监控宿主机器的一些基础指标,并写入到 influxdb 用于之后的可视化以及报警服务 监控的指标包括:cpu利用率,cpu负载,内存使用,网络负载,iops,磁盘等 总体设计 go-monitor.png 主要分为两大模块,reporter,collector 和 scheduler collector: 负责具体的某些监控指标的采集 reporter: 负责将采集到的指标写入到数据库 scheduler: 负责整个流程的调度,数据采集和数据写入的协同 collector 将采集到的数据写到 c...阅读全文

阅读:1466 评论:0

开源学习go库的项目Go-Library-Demo

大家好,在我长达3个月的怼go语言,几乎怼光了go库中百分之80以上的库,这是全网唯一的较深较全的go语言和go库的学习项目,大家喜欢的话可以踩踩!现在我也算是go/golang中的一员啦!!有用的话,记得给个小星星哦!感谢! 点击链接到我的github:https://github.com/AnkoGo/Go-Library-Demo github截图阅读全文

阅读:1106 评论:2

二叉树 前/中/后/层 四种方式遍历递归实现

二叉树的遍历,无论是在leetcode刷题或者面试过程中,都是十分常见,重要性无需赘述。本文将采用Golang语言来实现前/中/后/层四种遍历方式。 二叉树定义 // 二叉树节点定义 type TreeNode struct { Val int Left *TreeNode // 左子树 Right *TreeNode // 右子树 } 二叉树样例 一. 前序遍历 遍历顺序   中 -> 左 -> 右。 代码实现 // 前序遍历 func PreOrderTraversal(tree *Tree...阅读全文

2020-01-04 19:32:51 缘木求鱼的鱼
阅读:1049 评论:0

go plan9汇编入门

原文地址:https://yuchanns.org/posts/2020/01/31/golang-assembly/ 欢迎访问我的博客yuchanns'Atelier 有时候我们想要知道写出来的代码是怎么编译执行的,这时候go tool compile就是一个很好用的工具。 本文相关代码yuchanns/gobyexample 如何输出汇编代码 有三种方法可以输出go代码的汇编代码: go tool compile 生成obj文件 go build -gcflags 生成最终二进制文件 先go...阅读全文

2020-02-02 01:32:39 yuchanns
阅读:2015 评论:0

基于Golang开发的开源微信小程序(页面高仿大众点评)

小程序基于Taro2.0 + React Hooks开发 测试数据采集自微信小程序--大众点评 服务端api基于 Golang 计划添加基于Reactjs的后台管理系统、PC版、Wap版 目前主要是已浏览页面为主,接下来会继续做其他业务. Github https://github.com/i-coder-robot/dp-min-program 服务端api 项目地址:https://github.com/i-coder-robot/mock-food 最后 喜欢别忘了Star 本项目长期更新...阅读全文

阅读:6001 评论:0

最快的 Go 网络框架 gnet 来啦!

gnet 是什么? gnet 是一个基于事件驱动的高性能且轻量级的网络框架。它直接使用 epoll 和 kqueue 系统调用而非标准 Golang 网络包:net 来构建网络应用,它的工作原理类似两个开源的网络库:netty 和 libuv。 gnet 设计开发的初衷不是为了取代 Go 的标准网络库:net,而是为了创造出一个类似于 Redis、Haproxy 能高效处理网络包的 Go 语言网络服务器框架。 gnet 的亮点在于它是一个高性能、轻量级、非阻塞的纯 Go 实现的传输层(TCP/U...阅读全文

2020-04-07 15:32:39 panjf2000
阅读:3710 评论:0

数据结构和算法(Golang实现)(29)查找算法-2-3树和左倾红黑树

2-3树和左倾红黑树 某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学。在这里,我们区分开左倾红黑树和普通红黑树。 红黑树是一种近似平衡的二叉查找树,从2-3树或2-3-4树衍生而来。通过对二叉树节点进行染色,染色为红或黑节点,来模仿2-3树或2-3-4树的3节点和4节点,从而让树的高度减小。2-3-4树对照实现的红黑树是普通的红黑树,而2-3树对照实现的红黑树是一种变种,称为左倾红黑树,其更容易...阅读全文

2020-04-08 15:32:36 陈星星
阅读:2023 评论:0

libcsp: 一个 10 倍于 Golang 的高性能 C 语言并发库

libcsp是一个C语言实现的基于CSP模型的高性能并发库, 利用它你可以用C开发一些高性能项目. 特性: 支持多核 高性能调度器 编译时栈大小静态分析 高性能 Lock-free 通道 支持 netpoll 和 timer Golang和Libcsp比较 // Golang // Libcsp go foo(arg1, arg2, arg3) async(foo(arg1, arg2, arg3)); var wg sync.WaitGroup sync(foo(); bar()); wg.A...阅读全文

2020-04-12 09:32:36 shiyanhui
阅读:1175 评论:1

golang 常用库

github.com/Arafatk/DataViz   对于常用数据结构的可视化,使用的graphviz。 github.com/astaxie/beego   beego 是一个快速开发 Go 应用的 HTTP 框架,他可以用来快速开发 API、Web 及后端服务等各种应用,是一个 RESTful 的框架,主要设计灵感来源于 tornado、sinatra 和 flask 这三个框架,但是结合了 Go 本身的一些特性(interface、struct 嵌入等)而设...阅读全文

2020-05-21 08:28:10 xiexiaoming
阅读:4220 评论:0

2020最新Gin框架中文文档(更新于2020.06)定期维护

## 前言 哈喽,大家好,我是asong。最近在学习Gin框架。在学习的过程 中,一直看英文文档,对于英语渣渣的我来说,很痛苦,就想着给 他翻译过来,弄成中文文档,可以提高我们的学习下效率。网上翻 译过来的文档有很多,不过都很旧了,许多更新也没有处理,不是 很完整。所以我就自己一边学英语、一边翻译了这篇中文文档,现 在分享给你们,希望对你们有用。备注:由于文档是我自己翻译, 有错误欢迎指出。文档已上传个人 github:https://github.com/sunsong2020/Golang_...阅读全文

2020-06-13 11:32:46 sunsong1997
阅读:1749 评论:0