golang学习笔记之-context详细理解篇

image.png context.Background():可以简单理解我们知道这个上下文要去干什么 context.TODO():可以简单理解我们不清楚要使用哪个上下文、或者还没有可用的上下文 下面代码演示: 1.context.WithCancel():返回Context和取消函数用来取消Context package main import ( "context" "log" "os" "time" ) var ( logg *log.Logger ) func work(ctx con...阅读全文

2019.01.30 19:44* Maggie_up
阅读:2088 评论:0

Golang1.5到Golang1.12包管理:golang vendor 到 go mod

1. 前言 Golang 是一门到如今有十年的静态高级语言了,2009年的时候算是正式推出了,然后到最近的一两年,2017-2018年的时候,突然直线上升,爆火了,得益于容器化运维/直播/短视频/区块链... 我从2016年毕业的时候,第一份工作,就接触了 Golang 语言,那时公司用 Java 处理数据流,然后用 Golang 写高性能的网络中间件。那时,Golang 还很简单,那时 Docker刚火,Kubernates 还在发力中,基本在中国,还算小众语言。 之后2017年新年刚过,我跑...阅读全文

2019-03-05 10:34:45 hunterhug
阅读:2445 评论:0

图解Go的channel底层原理

废话不多说,直奔主题。 ## channel的整体结构图 ![](https://i6448038.github.io/img/channel/hchan.png) 简单说明: + ``buf``是有缓冲的channel所特有的结构,用来存储缓存数据。是个循环链表 + ``sendx``和``recvx``用于记录``buf``这个循环链表中的~发送或者接收的~index + ``lock``是个互斥锁。 + ``recvq``和``sendq``分别是接收(<-cha...阅读全文

2019-04-15 11:21:00 RyuGou
阅读:1705 评论:0

谈谈Go语言字符串

字符串是一种特别重要的类型, 可以说整个世界都是建立在字符串处理基础之上的, 甚至有很多专门针对字符串处理设计的编程语言(比如perl). 因为字符串处理非常重要, Go语言将字符串作为值以简化使用, 同时标准库提供了strings/fmt/strconv/regexp/template等诸多包用于协助处理字符串.1. 基本用法Go语言中字符串是一个不可修改的字节序列, 如果要做类比的话可以看作是一个只读的byte数组类型. 字符串有两种方式构建: 第一种是在代码中通过双引号包括起来的字符串字面...阅读全文

2019-05-18 11:36:30 光谷码农
阅读:962 评论:0

图解Go语言内存分配

目录 基础概念 内存管理单元 内存管理组件 mcache mcentral mheap 内存分配流程 总结 参考资料 Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理。这样可以自主地实现更好的内存使用模式,比如内存池、预分配等等。这样,不会每次内存分配都需要进行系统调用。 Golang运行时的内存分配算法主要源自 Google 为 C 语言开发的TCMalloc算法,全称Thread-Caching Malloc。核心思想就是把内存分为多级管理,从而降低锁的粒度。...阅读全文

2019-03-13 08:29 qcrao-2018
阅读:2025 评论:1

Go 编程:图解反射

原文发布在个人站点: GitDiG.com, 原文链接:https://www.gitdig.com/go-reflect/ 1. 图解反射 在使用反射之前,此文The Laws of Reflection必读。网上中文翻译版本不少,可以搜索阅读。 开始具体篇幅之前,先看一下反射三原则: Reflection goes from interface value to reflection object. Reflection goes from reflection object to inte...阅读全文

2019.07.16 21:41 一艘慢船
阅读:733 评论:0

Go 编程:那些隐晦的操作符

原文发布于个人站点: GitDiG.com, 原文链接: Go 编程:那些隐晦的操作符 本篇作为 Go 编程“边角料”的最后一篇,主要针对 Go 语言提供的操作符进行一次总结。刚好回应上篇一位读者关于表达式是否要加'.'的问题做个回复。 在 Go 语言中,一共提供了47个操作符,包括标点符号。摘自官方文档,分别是: + & += &= && == != ( ) - | -= |= || < <= [ ] * ^ *= ^= <- > >= { } / << /= <<= ++ = := , ; ...阅读全文

阅读:611 评论:0

使用Netty,我们到底在开发些什么?

在java界,netty无疑是开发网络应用的拿手菜。你不需要太多关注复杂的nio模型和底层网络的细节,使用其丰富的接口,可以很容易的实现复杂的通讯功能。 和golang的网络模块相比,netty还是太过臃肿。不过java类框架就是这样,属于那种离了IDE就无法存活的编码语言。最新的netty版本将模块分的非常细,如果不清楚每个模块都有什么内容,直接使用netty-all即可。单纯从使用方面来说,netty是非常简单的,掌握ByteBuf、Channel、Pipeline、Event模型等,就可以...阅读全文

2019.07.17 14:59 周佳琪周佳琪
阅读:2238 评论:0

如何用 Go 实现热重启

热重启 热重启(Zero Downtime),指新老进程无缝切换,在替换过程中可保持对 client 的服务。 原理 父进程监听重启信号 在收到重启信号后,父进程调用 fork ,同时传递 socket 描述符给子进程 子进程接收并监听父进程传递的 socket 描述符 在子进程启动成功之后,父进程停止接收新连接,同时等待旧连接处理完成(或超时) 父进程退出,热重启完成 实现 package main import ( "context" "errors" "flag" "log" "net" ...阅读全文

2019-07-21 21:32:32 Jiahonzheng
阅读:5363 评论:0

后端架构设计,如何扛住100亿次请求?

1. 前言前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》一文,看完以后,感慨良多,收益很多。正所谓他山之石,可以攻玉,虽然此文发表于2015年,我看到时已经过去良久,但是其中的思想仍然是可以为很多后端设计借鉴。同时作为一微信后端工程师,看完以后又会思考,学习了这样的文章以后,是否能给自己的工作带来一些实际的经验呢?所谓纸上得来终觉浅,绝知此事要躬行,能否自己实践一下100亿次红包请求呢?否则读完以后脑子里能剩下的东西 不过就是100亿 1400万QPS整流 这...阅读全文

2019.08.21 18:07 Java架构师CAT
阅读:1867 评论:0

使用 Go 管理 Makefile

简介 Makefile 实践 总结 当前部分的代码 简介 很多时候, 我们需要运行多个命令来能完成一件事,又或者某个命令需要指定很多参数. 这个时候, 就需要使用脚本来取代这些复杂的命令,减少输错命令的可能, 也可以为后来者指明常用的操作. Makefile Makefile 就是为此而生的, 相对于用途广泛的 shell 脚本,Makefile 专注于构建自动化过程, 通常用于编译源码等.很多项目都会提供 Makefile 文件, 只需要简单地运行make 就能轻松完成编译构建的过程. 简单介...阅读全文

2019-11-02 21:32:32 帅气猫咪
阅读:971 评论:0

[译] Go语言使用TCP_NODELAY控制发包流量

编写健壮且高性能的网络服务需要付出大量的努力。提高服务性能的方式有很多种,比如优化应用层的代码,更进一步,还可以看看垃圾回收器,操作系统,网络传输,以及部署我们服务的硬件是否有优化空间。 TCP/IP协议栈中的一些算法会影响到服务性能。本文将简单介绍其中的Nagle算法,与Nagle算法相关的socket选项TCP_NODELAY,以及在Go语言中如何使用它。 理论 大部分平台上的TCP实现都提供了socket选项,用于控制连接生命周期,流量控制等算法。 其中一个会对网络传输性能造成影响的算法是...阅读全文

2020-01-03 11:32:34 就想叫yoko
阅读:1530 评论:0

Go处理PDF

工作中经常会遇到一些pdf文件处理的问题,一千种pdf有一千种处理方式,每次都是绞尽脑汁和这些pdf战斗到底。 本人又是一个gopher,所以这篇文章会以一个goper的视角,列举一下我所经历过的每一种pdf处理场景,比如: pdf渲染 pdf校验 pdf加水印 pdf获取页数 pdf合并 pdf拆分 修复受损pdf pdf转png 识别pdf中的字体 pdf解密 ... 本文大多是场景问题的罗列,可以根据标题摘取自己有兴趣的部分查看 很多pdf的问题我也不是特别专业,如果问题或者疑问欢迎与我交...阅读全文

2020-01-04 13:32:32 poisoner
阅读:3822 评论:0

Go 1.14中值得关注的几个变化

可能是得益于2020年2月26日Go 1.14的发布,在2020年3月份的TIOBE编程语言排行榜上,Go重新进入TOP 10,而去年同期Go仅排行在第18位。虽然Go语言以及其他主流语言在榜单上的“上蹿下跳”让这个榜单的权威性饱受质疑:),但Go在这样的一个时间节点能进入TOP 10,对于Gopher和Go社区来说,总还是一个不错的结果。并且在一定层度上说明:Go在努力耕耘十年后,已经在世界主流编程语言之林中牢牢占据了自己的一个位置。 图:TIOBE编程语言排行榜2020.3月榜单,Go语言重...阅读全文

阅读:2633 评论:0

Golang三色标记、混合写屏障GC模式图文全分析

原创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次...阅读全文

阅读:10135 评论:6

Golang红黑树

红黑树 红黑树是每个节点都带有颜色属性(红色或黑色)的二叉查找树。红黑树也属于自平衡二叉查找树。 红黑树具有如下性质: 1. 每个节点要么是红色要么是黑色。 2. 树的根结点为黑色节点。 3. 所有叶子节点都是黑色节点(叶子是NIL节点)。 4. 每个红色节点必须有两个黑色的子节点(从每个叶子到根的所有路径上不能有两个连续的红色节点)。 5. 从任意节点到其每个叶子节点的所有简单路径都包含相同数目的黑色节点。 一个红黑树的例子: 红黑树与平衡二叉树(AVL)的区别 二者虽然都是自平衡二叉树,但是...阅读全文

2020-09-06 17:34:46 心中的日月_pyihe
阅读:1592 评论:0

浅谈Golang的unsafe.Pointer

一、Golang指针与C/C++指针的差别 在Golang支持的数据类型中,是包含指针的,但是Golang中的指针,与C/C++的指针却又不同,笔者觉得主要表现在下面的两个方面: 弱化了指针的操作,在Golang中,指针的作用仅是操作其指向的对象,不能进行类似于C/C++的指针运算,例如指针相减、指针移动等。从这一点来看,Golang的指针更类似于C++的引用 指针类型不能进行转换,如int不能转换为int32 上述的两个限定主要是为了简化指针的使用,减少指针使用过程中出错的机率,提高代码的鲁棒...阅读全文

2020-09-13 23:32:38 开发者共读
阅读:934 评论:0

技术选型:为什么批处理我们却选择了Flink

最近接手了一个改造多平台日志服务的需求,经过梳理,我认为之前服务在设计上存在缺陷。经过一段时间的技术方案调研,最终我们决定选择使用 Flink 重构该服务。 目前重构后的服务已成功经受了国庆节流量洪峰的考验,今日特来总结回顾,和大家分享一下经验。 业务需求及背景 在了解改造服务的需求前,我们首先要明确,要解决什么问题以及目前的服务是如何解决的。 当前的业务逻辑还是比较清晰的: 采集同一时段不同数据源的日志; 对采集的数据进行处理; 将处理后的数据上传到指定位置,供客户下载。 我们面临的痛点和难点...阅读全文

阅读:4422 评论:0

统一接入层架构的演进

本文系云原生应用最佳实践杭州站活动演讲稿整理。杭州站活动邀请了 Apache APISIX 项目 VP 温铭、又拍云平台开发部高级工程师莫红波、蚂蚁金服技术专家王发康、有赞中间件开发工程师张超,分享云原生落地应用的经验心得,以下是张超《有赞统一接入层架构演进》分享内容。 张超,有赞中间件团队开发工程师,网关、Service Mesh 领域的专家,热衷技术,对 Golang、Nginx、Ruby 语言等有深入的研究。 大家好,我是来自有赞的张超,有赞中间件团队的开发工程师。今天给大家带来有赞接入层...阅读全文

2020-11-25 15:43:23 又拍云
阅读:497 评论:0