Go sync.Map 看一看

偶然看见这么篇文章:一道并发和锁的golang面试题。虽然年代久远,但也稍有兴趣。 正好最近也看到了 sync.Map,所以想试试能不能用 sync.Map 去实现上述的功能。 我还在 gayhub上找到了其他人用 sync.Mutex 的实现方式,【点击这里】。 归结一下 需求是这样的: 在一个高并发的web服务器中,要限制IP的频繁访问。现模拟100个IP同时并发访问服务器,每个IP要重复访问1000次。每个IP三分钟之内只能访问一次。修改以下代码完成该过程,要求能成功输出 success:...阅读全文

2019-03-26 14:34:41 cookedsteak
阅读:1062 评论:0

Golang http.RoundTripper

参考 Golang http.RoundTripper 笔记 RoundTripper is an interface representing the ability to execute a single HTTP transaction, obtaining the Response for a given Request. 对于http客户端,可以使用不同的实现了 RoundTripper 接口的Transport实现来配置它的行为。RoundTripper 有点像 http.Clien...阅读全文

2019.03.26 14:41 懒皮
阅读:623 评论:0

golang 中的Interface 和 反射

基础知识在这里学习: 资源一 资源二 看完这些基本的估计都有点朦朦胧胧,好文章是值得读好几遍的,这里我写一些例子,用来快速上手。 reflect.Type 常用函数使用 type Type interface { Method(int) Method MethodByName(string) (Method, bool) NumMethod() int Name() string Size() uintptr String() string Kind() Kind Elem() Type Fie...阅读全文

阅读:560 评论:0

使用 Kind 搭建你的本地 Kubernetes 集群

Kind 是我很喜欢也一直在参与的项目,我计划将 Kind 相关的文章写成一个系列。(flag++) 这是第一篇。 Kind 介绍 Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。 安装 二进制安装 Kind 使用 Golang 进行开发,在仓库的 Release 页面,已经上传了构建好的二进制,支持多种操作系统,可直接...阅读全文

阅读:1077 评论:0

GoLang----Json RawMessage使用

在程序中使用Json时,有时某个字段其结构是根据其他字段(比如有个类型含义的字段)决定的,这个时候在解析时,需要先解析一部分,进行判断后,再解析出合适的Json结构。这时就需要用到Golang Json包的RawMessage这个对象。 示例代码如下: package main import ( "encoding/json" ) type UpLoadSomething struct { Type string Object interface{} } type File struct { F...阅读全文

2019.04.15 18:06 李_MAX
阅读:4988 评论:0

调试 Go 的代码生成

2016 年 10 月 15 日 *上周,我在 [dotGo](http://www.dotgo.eu/),参加一个最棒的 Go 会议,与大西洋彼岸的 Gopher 们相聚。我做了一个简短迅速的演讲,关于使用工具链中可用工具来进行代码生成的检查。这篇文章给没能参加会议的 Gopher 们过一遍演讲的内容。幻灯片在 [go-talks](https://go-talks.appspot.com/github.com/rakyll/talks/gcinspect/talk.slide) 也能找...阅读全文

2019-04-17 23:12:26 krystollia
阅读:2322 评论:0

一探B站后台架构, 他山之石, 何以攻玉? -- 仅从一个一线Golang开发者的角度谈B站4.22代码

4月22日, B站部分后台源代码因为某愤怒的员工, 被上传至Github. 本文我们不讨论安全, 法律 (根据代码漏洞, 去恶意攻击或者获利是违法的! 我们工作时也要注意代码安全), 我仅从开发者的角度谈谈, 这份代码我们能学到什么? B站Golang生态建设, 代码规范, 工具建设, 技术栈选择, 对于Go在部门或公司的推广又有哪些值得借鉴? 首先必须得说, B站这份代码整体还是不错的, 不是说组件或者基础库多么的厉害, 而是从整体目录分布, 业务代码分布, API易用性, 业务代码风格, 工...阅读全文

2019.04.24 22:47* 七月天_5092
阅读:18989 评论:5

Go 的人脸识别教程 - 第一部分

整个人脸识别领域是我喜欢阅读的内容。自己实现一个人脸识别系统会让你听起来像 Tony Stark 并且你可以将它们用于各种不同的项目,例如自动锁门,或者为你的办公室建立一个监控系统,仅举几例。 在此教程中,我们将使用 Go 中一些内置的库去构建自己的,非常简单的人脸识别系统。我们首先在静态图像上进行简单的人脸识别,并且看看它是如何工作的,然后我们将在这个小教程的第二部分拓展到成视频输入的实时人脸识别。 --- ## 视频教程 此教程以视频格式,如果您希望支持我和我的频道,...阅读全文

阅读:8392 评论:2

【轻知识】Go grpc的实现

前情回顾 继上篇《【轻知识】(糙译)Go使用proto3、官方示例代码》,我根据官方demo生成了一个文件addressbook.data。 正好grpc的实现,也别浪费了这个demo。还记得那个proto文件么?addressbook.proto。实现rpc呢?我需要简单的更改下文件。增加Service 贴代码 温馨提示: 记得 go get -u google.golang.org/grpc protoc addressbook.proto --go_out=plugins=grpc:./ ...阅读全文

2019.05.04 22:08 言十年
阅读:894 评论:0

golang mysql GTID同步

主要用于mysql数据同步,与可以跳转到某个事务开始读取。 配置mysql支持GTID同步 server-id=12 binlog_format = ROW log_bin=D:/dev_tool/mysql-5.7.22-winx64/log_bin/binlog-bin log_bin_index=D:/dev_tool/mysql-5.7.22-winx64/log_bin/binlog secure-file-priv=D:/backup gtid-mode = ON enforce_g...阅读全文

2019.05.23 11:30* dingking
阅读:1892 评论:0

Golang 性能提高技术----基础编码原则

前言 高级设计。为遇到的问题选择适当的算法和数据结构。要特别警觉,避免使用那些会渐进地产生糟糕性能的算法或编码技术 2)基本编码原则。避免限制优化的因素,这样编译器就能产生高效的代码。 消除连续的函数调用。在可能时,将计算移到外循环中。考虑有选择地妥协程序的模块性以获得更大的效率。 消除不必要的存储器引用。引入临时变量来保存中间结果。只有在最后的值计算出来时,才将结果存放在到数组或全局变量中。 3)低级优化 展开循环,降低开销,并且使得进一步的优化成为可能。 通过使用例如多个累积变量和重新结合等...阅读全文

2019.06.06 17:50* wp_nine
阅读:958 评论:0

如何使用 Golang 处理 MySQL 的 binlog

大家好,我是 Artem,一名 Golang 开发。我们的团队花费了大量时间训练 MySQL binlog。这里整合一些简单用法,不会放过任何隐藏的陷阱。示例代码将在最后显示。 每次从数据库查询的返回结果中拉取用户信息时,主项目中会有高负载模块。此时使用缓存是一个不错的建议,但是什么时候重置缓存呢?这需要由数据来决定更新时间。 MySQL 的主从复制是一个很棒的设计。而我们的守护进程可以视为一个通过 binlog 获取数据的 slave,binlog 设置成 row 格式。这样就能使...阅读全文

2019-06-23 17:09:34 shani33
阅读:5239 评论:0

你为什么要喜欢 sync.Pool ?

## 介绍 因为它很快。通过文章底部存储库中的基准测试可以减少**4982 倍**的内存占用。 ![Comparing pool performance. Less than better.](https://raw.githubusercontent.com/studygolang/gctt-images/master/Why-you-should-like-sync.Pool/1.png) 相比之下, Pool 的性能更快更好。 ## Ok, 这究竟是怎么回事呢? ...阅读全文

阅读:1843 评论:0

用go来做嵌入式开发-程序瘦身

# 用go来做嵌入式开发-程序瘦身 在嵌入式设备中一般存储控件都比较小,go编译后的程序包含运行时,体积一般比较大,所以我们需要对程序做一个瘦身,瘦身的方法很简单,编译的时候去除调试信息,然后使用upx来做压缩,upx支持各种cpu架构的压缩 ## 编译脚本 我使用的mtk7688的芯片,mips架构,因此对应的编译脚本如下 ``` ::高通方案althon方案的cpu ::set GOARCH=mips ::mtk方案的cpu @echo off set GOAR...阅读全文

2019-06-30 10:27:25 byteman
阅读:7445 评论:0

Go Modules 踩坑总结

微信公众号「后端进阶」,专注后端技术分享:Java、Golang、WEB框架、分布式中间件、服务治理等等。 在 Java 的项目中,有 Maven 和 Gradle 这些很好用的依赖版本管理工具,简直不要太方便了,但是在 Golang 的项目中,之前的 Golang 官方并没有提供版本管理工具,我们以前用 go get 获取依赖其实是有潜在危险的,因为我们不确定最新版依赖是否会破坏掉我们项目对依赖包的使用方式,即当前项目可能会出现不兼容最新依赖包的问题。之后官方出了一个 vendor 机制,将项...阅读全文

2019-07-08 08:32:33 公众号_后端进阶
阅读:1124 评论:0

一文学会在 CentOS 搭建 ngrok server,进行内网穿透

原文链接:https://blog.zhuliang.ltd/back-end/how-to-use-build-ngrok/ 转载请注明出处。 在日常开发环境中,可能会碰到需要内网穿透的一些需求,如微信小程序的开发,为了便于开发调试,需要将内网机器对外暴露,较便捷的方式有(难易度由上往下依次繁琐): 使用 ngrok 等类似客户端,通过别人架设的服务器进行内网穿透,较为灵活,可自建服务器。 注册一个花生壳,使用其推出的内网穿透服务,有的时候会抽风,且 ssl 域名存在不够用的情况需增购。 在外...阅读全文

2019.07.07 20:59* Nondeterminacy
阅读:2060 评论:0

订单队列架构思想

前序一般的订单流程思考瓶颈点订单队列第一种订单队列流程图:第二种订单队列流程图:总结实现队列的选择解答第二种队列的 Go 版本例子代码前序本文所要分享的思路就是电商应用中常用的订单队列。一般的订单流程电商应用中,简单直观的用户从下单到付款,最终完成整个流程的步骤可以用下图表示: 其中,订单信息持久化,就是存储数据到数据库中。而最终客户端完成支付后的更新订单状态的操作是由第三方支付平台进行回调设置好的回调链接 NotifyUrl,来进行的。补全订单状态的更新流程,如下图表示: 思考瓶颈点服务端的直...阅读全文

2019.08.02 09:35* Ace_Wang
阅读:1001 评论:0

golang time 包的坑

目录 前言 精巧的 time 坑点 结果解读 docker 中 总结 前言 为了不独享被炸断腿的懵逼,此处来一波无奖竞猜。 请不要编译运行下列代码,人肉计算程序运行结果: package main import "time" func main() { format := "20060102150405" // t1 没有写 time.Now() 是为了避免秒以下单位的时间的影响 // 除此之外和写 time.Now() 是一样的 t1 := time.Date(2017, time.Novem...阅读全文

2017-12-01 00:00 Wolfogre's Blog
阅读:1392 评论:0

Golang <-time.After()在计时器过期前不会被垃圾回收

最近我在调查 Go 应用程序中内存泄漏的问题,这个问题主要因为我没有正确的阅读文档。这是一段导致消耗了多个 Gbs 内存的代码: ```go func ProcessChannelMessages(ctx context.Context, in <-chan string, idleCounter prometheus.Counter) { for { start := time.Now() select { case s, ok := <-in: if !...阅读全文

阅读:4041 评论:4