Golang 切片与函数参数“陷阱”

线性结构是计算机最常用的数据结构之一。无论是数组(arrary)还是链表(list),在编程中不可或缺。golang也有数组,不同于别的语言,golang还提供了切片(slice)。切片比数组有更好的灵活性,具有某些动态特性。然而切片又不像动态语言的列表(Python list)。不明白切片的基本实现,写程序的时候容易掉“坑”里。 slice参数 本来写一个堆排序,使用了golang的slice来做堆,可是发现在pop数据的时候,切片不改变。进而引发了golang函数切片的参数,是传值还是传引用...阅读全文

2017.05.25 13:36 人世间
阅读:13981 评论:2

Golang 优化之路——HTTP长连接

写在前面 压测的是否发现服务端TIME_WAIT状态的连接很多。 netstat -nat | grep :8080 | grep TIME_WAIT | wc -l 17731 TIME_WAIT状态多,简单的说就是服务端主动关闭了TCP连接。 IMG-THUMBNAIL TCP频繁的建立连接,会有一些问题: 三次握手建立连接、四次握手断开连接都会对性能有损耗; 断开的连接断开不会立刻释放,会等待2MSL的时间,据我观察是1分钟; 大量TIME_WAIT会占用内存,一个连接实测是3.155KB...阅读全文

阅读:13311 评论:0

GoMock框架使用指南

序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面三个测试框架: GoConvey GoStub GoMock 读者通过前面三篇文章的学习可以对框架GoConvey和GoStub优雅的组合使用了,本文将接着介绍第三个框架GoMock的使用方法,目的是使得读者掌握框架GoConvey + GoStub + GoMock组合使用的正确姿势,从而提高测试代码的质量。 GoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface...阅读全文

2017.06.24 23:40 _张晓龙_
阅读:14226 评论:2

Golang官方依赖管理工具:dep

在这里声明一下,百度或者google看到的godep不是我这篇博文说的dep,那它们是什么关系呢?按照Peter Bourgon博文来说,它们的作者都有相同的人,但是一个是dep是官方版本,godep是第三方工具。 我今天介绍的是dep,之前也有介绍过glide,有兴趣的可以到Golang依赖管理工具:glide从入门到精通使用看看。 现在还有一个疑问是为什么官方现在要支持依赖管理了呢?我个人认为有如下原因(勿喷,如果不同或者遗漏欢迎留言补充): 第三方依赖管理很多,虽然很好用,但是很少可以兼...阅读全文

2017-08-09 10:20:34 梦朝思夕
阅读:50247 评论:7

Go vs Python:深入并发

## 介绍 在过去的几个月里,我在几个项目上使用过 Go,尽管我还算不上专家,但是还是有几件事我要感谢 Go:首先,它有一个清晰而简单的语法,我不止一次注意到 Github 开发人员的风格非常接近于旧 C 程序中使用的风格,从理论上讲,Go 似乎吸收了世界上所有语言最好的特性:它有着高级语言的力量,明确的规则使得更简单,即使这些特性有时有一点点的约束力--就是可以给代码强加一个坚实的逻辑。这是命令式的简单,由大小以位为单位的原始类型组成。但是没有像把字符串当成字符数组那样操作的乏味。然而,...阅读全文

2018-02-13 17:23:12 polaris
阅读:4325 评论:0

Golang interface接口全面理解(一)

There are three kinds of time: the future is late, and now it is flying like an arrow. The past will never stand still. 时间的步伐有三种:未来姗姗来迟,现在像箭一般飞逝,过去永远静立不动。 什么是interface 在面向对象编程中,可以这么说:“接口定义了对象的行为”, 那么具体的实现行为就取决于对象了。 在Go中,接口是一组方法签名。当一个类型为接口中的所有方法提供定义时,...阅读全文

2018-03-12 15:33:08 90design
阅读:34872 评论:5

Go Context的踩坑经历

0 引言context是Go中广泛使用的程序包,由Google官方开发,在1.7版本引入。它用来简化在多个go routine传递上下文数据、(手动/超时)中止routine树等操作,比如,官方http包使用context传递请求的上下文数据,gRpc使用context来终止某个请求产生的routine树。由于它使用简单,现在基本成了编写go基础库的通用规范。笔者在使用context上有一些经验,遂分享下。本文主要谈谈以下几个方面的内容:context的使用。context实现原理,哪些是需要注...阅读全文

2019-08-24 17:47:06 包增辉
阅读:27898 评论:4

理解 golang 中的 context(上下文) 包

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/understanding-the-context-package-in-golang/0_exTPQ4ppfrdjuXcR.jpg) Go 中的 context 包在与 API 和慢处理交互时可以派上用场,特别是在生产级的 Web 服务中。在这些场景中,您可能想要通知所有的 goroutine 停止运行并返回。这是一个基本教程,介绍如何在项目中使用它以...阅读全文

2018-07-29 00:20:23 themoonbear
阅读:34804 评论:3

golang 压测redis 消息队列

用 redis 的 list 数据结构作为轻量级的消息队列,对于小系统确实是小而美,可控能力强。当然与kafka 和 rabbitmq 相比它还有很多缺陷,在服务进行生产和消费的时候,还需要加上部分逻辑进行处理。自己写了点 golang 代码,压力测试 redis 列表的性能。机器配置:双核,4G测试数据:100w压力测试源码(github)生产者,生产 100 w 条数据,平均,每秒能写 13817 条数据。begin time: 2018-07-29 14:03:55.606end time...阅读全文

2018.07.29 18:29* wenfh2020
阅读:5250 评论:0

实战讲解高并发和秒杀抢购系统设计

互联网特别是电商平台,阿里双11秒杀、还有12306春运抢票、以及平时各种节假日抢购活动等,都是典型的高并发场景。这类场景最大的特征就是活动周期短,瞬间流量大(高并发),大量的人短期涌入服务器抢购,但是数量有限,最终只有少数人能成功下单。这里,就来讲一讲对应该场景下需要考虑的技术实现。先从基本的概念的建立,再讲对应的实现部分。第一:高并发技术要做的事,一方面优化程序,让程序性能最优,单次请求时间能从50ms优化到25ms,那就可以在一秒钟内成功响应翻倍的请求了。另一方面就是增加服务器,用更大的集...阅读全文

2018.09.21 21:06 Java架构技术分享
阅读:6802 评论:4

为什么分布式一定要有Redis?

考虑到绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。所以我斗胆以 Redis 为题材,对 Redis 常见问题做一个总结,希望能够弥补大家的知识盲点。本文围绕以下几点进行阐述:为什么使用Redis使用Redis 有什么缺点单线程的Redis 为什么这么快Redis 的数据类型,以及每种数据类型的使用场景Redis 的过期策略以及内存淘汰机制Redis 和数据库双写一致性问题如何应对缓存穿...阅读全文

2018-09-25 17:30:29 Javatiankenglu
阅读:5229 评论:5

Git超实用总结,再也不怕记忆力不好了

**欢迎大家前往[腾讯云+社区](https://cloud.tencent.com/developer/?fromSource=waitui),获取更多腾讯海量技术实践干货哦~** > 本文由[腾讯工蜂](https://cloud.tencent.com/developer/user/3246935?fromSource=waitui)发表于[云+社区专栏](https://cloud.tencent.com/developer/column/6041?fromSource=waitu...阅读全文

2018-10-16 10:54:50 qcloudcommunity
阅读:2487 评论:0

Go Channel 面试题解析

有一道这样的面试题目: 写代码实现两个 goroutine,其中一个产生随机数并写入到 go channel 中,另外一个从 channel 中读取数字并打印到标准输出。最终输出五个随机数。 凭直觉开始撸了以下代码: func getRand(ch chan int) { ch <- rand.Intn(5) } func printRand(ch chan int) { fmt.Println("Rand Number = ", <-ch) } func main() { rand.Seed(...阅读全文

阅读:3156 评论:1

通过 Docker 和 Go 实现 https 访问

![title](https://raw.githubusercontent.com/studygolang/gctt-images/master/Automagical-HTTPS-with-Docker-and-Go/1_3VNZrkS-sVUaa-xJQMXCnA.jpeg) 最近一直在构建很多 Webhook,通常我需要通过 HTTPS 协议为应用程序提供服务。快速实现这一目标的一种常见方法是使用 Let's Encrypt,但设置起来可能有点繁琐。我希望能够将这个过程完全自动化,...阅读全文

阅读:787 评论:0

软件技术-零基础网页和Golang服务器数据通信

欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】 用户注册功能是网站的必要功能,也是其他功能的基础和前提。 上一篇文章软件技术-零基础编写响应式页面 发送数据 编写好页面效果了,还要实现提交按钮功能,当用户点击提交按钮的时候就把邮箱和密码信息发送给服务器。 发送到哪里,定个目标,比如发给http://localhost:8080//api/register这个地方。 发送什么数据?要获取到输入框中用户打字的内容,可以用$('#email').val()的方法通过元素id名email获得输入框...阅读全文

阅读:1200 评论:0

Go语言Web服务-感觉较完整

1 】Web工作方式 https://blog.csdn.net/qq_34777600/article/details/81157219 2】Go如何使得Web工作 https://blog.csdn.net/qq_34777600/article/details/81157572 3】Go的http包详解 https://blog.csdn.net/qq_34777600/article/details/81157875 4】Socket编程 https://blog.csdn.net/qq...阅读全文

2018年10月17日 15:23:24 qq_28703359
阅读:3672 评论:1

Go 译文之通过 context 实现并发控制

作者:Sameer Ajmani | 地址:blog.golang.org/context 译者前言 第二篇官方博客的翻译,主要是关于 Go 并发控制的 context 包。 总体来说,我认为上一篇才是 Go 并发的基础与核心。context 是在前章基础之上,为 goroutine 控制而开发的一套便于使用的库。毕竟,在不同的 goroutine 之间只传递 done channel,包含信息量确实是太少。 文章简单介绍了 context 提供的方法,以及简单介绍它们如何使用。接着,通过一个搜...阅读全文

2019年07月10日 波罗学
阅读:1176 评论:0

「百度网盘」限速破解,它有限速政策/我有破解对策

哈喽,我是小黑,你们好呀~今天给大家分享的是 Pan-light (百度网盘下载神器),众所周知,现在最常用的网盘就是百度网盘,但是天下苦百度网盘久矣!不过,小黑又发现了一款和百度网盘“对着干”的下载神器。它是由 GitHub 网站的一位开发大神制作的一款基于golang+Qt5开发的不限速百度网盘客户端,支持多账号登录、快捷导航、断点续传、速度控制、在线播放器等功能。(软件适用于Windows,下载方式在文末~)。亲测试用该软件无需安装,将小黑提供的压缩包解压后,双击pan light 应用程...阅读全文

阅读:7493 评论:0

使用pprof分析cpu占用过高问题

web 服务器选择net/http/pprof。你只需要引入包_"net/http/pprof",然后就可以在浏览器中使用http://localhost:port/debug/pprof/直接看到当前web服务的状态,包括CPU占用情况和内存使用情况等。如下图:​在上图的页面上直接点击profile,或直接访问链接 http://localhost:port/debug/pprof/profile 稍后片刻,可以下载到文件 profilego自带工具pprof使用 Go 自带的 pprof 工...阅读全文

2019-07-12 17:05:48 yanglikai
阅读:5745 评论:0