从项目实战的角度看golang的pprof

golang程序优化起来是比较简单的,这得益于pprof这样的性能分析工具,有了它,程序能很容易分析像内存泄漏、cpu泄漏这样的问题。网上关于使用pprof或者分析pprof源码实现的文章也不少,但是在项目中实战的文章比较少。大多数关于pprof的文章讲的是,这样: //引入pprof import _ "net/http/pprof" ...... //起一个http服务器,接着请求/debug/pprof等接口 http.ListenAndServe("0.0.0.0:6060", nil)...阅读全文

51CTO博客 2020-07-18 13:43:19 wx5e1abbbb0a5e5

从零学习 Go 语言(33):如何手动实现一个协程池?

![](http://image.iswbm.com/20200607145423.png) 在线博客:http://golang.iswbm.com/ Github:https://github.com/iswbm/GolangCodingTime --- 在 Golang 中要创建一个协程是一件无比简单的事情,你只要定义一个函数,并使用 go 关键字去执行它就行了。 如果你接触过其他语言,会发现你在使用使用线程时,为了减少线程频繁创建销毁还来的开销,通常我们...阅读全文

Go语言中文网 2020-07-20 08:07:57 hello_wbm

golang ip

package main import ( "fmt" "net" ) func main() { network := "192.168.5.0/24" addrs := []string{ "192.168.5.1", "192.168.6.1", } _, subnet, err := net.ParseCIDR(network) if err != nil { panic(err) } for _, addr := range addrs { if subnet.Contains(net...阅读全文

简书 2020-07-20 02:32:53 次序

Ubuntu 18.04部署Golang

本文转载至:Golang写的Web网站从部署到放弃【https://www.macnie.com/post/10089 】 部署环境:Ubuntu 18.04 首先安装Go环境 ubuntu18.04下 通过apt-get install 安装go 默认版本为1.6。现在go的最新版本是1.12。差的太多。怎么用apt安装最新版呢 获取最新的软件包源,并添加至当前的apt库 add-apt-repository ppa:longsleep/golang-backports 提示: Command...阅读全文

简书 2020-07-20 02:32:53 hsiaojun

golang项目部署到linux

本文记录golang项目的部署流程,需要有一定的go和docker的基础知识。 Dockerfile方式 步骤 新建目录结构如下 deploy Dockerfile app main script build.sh 首先打包已经写好的go程序 # 设置编译时的环境 set GOARCH=amd64 #amd64处理器的程序 set GOOS=linux #linux下的可执行文件 go build main.go #go打包命令 把打包好的main文件放在app目录下,接下来编写运行脚本buil...阅读全文

简书 2020-07-20 02:32:52 lannisiter

2020-07-19

gogogo 人类所有的真实的快乐,都离不开艰辛的努力,无论是金榜题名的快乐,还是事业成功的喜悦,甚至包括洞房花烛的激动,所有真实的快乐,都需要长久的铺垫与努力,没有辛勤的汗水,幸福也就不再成为幸福,所以如果快乐触手可及,这种廉价的快乐,也就不值得珍惜,随时都可以抛弃,因此对于年轻人而言,一个重要的功课就是学会去节制欲望,大家知道最好的厨子是什么,最好的厨子就是饥饿,如果每天都是大吃大喝,每天都是饕餮盛宴,人一定会失去对所有食物的胃口,所有通过捷径所带来的快乐,无论是性的放纵,还是毒品,最终都会...阅读全文

简书 2020-07-20 02:32:52 ixiumu

在Golang中使用日志模块

程序编写过程中,日志非常重要,养成打印日志的习惯,可以帮你在程序编写过程中,少走很多弯路。 日志通常必需包含以下三个重要的内容: 1,发生事件的时间戳 2,日志的级别,debug,error或info等 3,日志的上下文内容,协助问题的排查 日志固然很重要,但有些内容并不适合或者说不需要打印在日志内容中,否则不仅占用存储空间,而且会干扰问题的排查。下面内容就不适合打印到日志中: 名字 IP地址 信用卡号码或者任何敏感信息 Golang标准库中自带的log包 log包提供基本的日志功能,但是没有提...阅读全文

简书 2020-07-20 02:32:47 aneirin

Go语言之Context

1.1什么是 context golang在1.6.2的时候还没有自己的context,在1.7的版本中就把golang.org/x/net/context包被加入到了官方的库中。中文译作“上下文”,它主要包含了goroutine 的运行状态、环境等信息。 context 主要用来在 goroutine 之间传递上下文信息,包括:同步信号、超时时间、截止时间、请求相关值等。 该接口定义了四个需要实现的方法: type Context interface { // Deadline方法是获取设置的...阅读全文

简书 2020-07-20 02:32:46 zfh_51d2

Golang Mutex 到底是否应该使用指针?

前言 在写 go 的时候,你使用 Mutex 的时候使用的是指针还是说没有使用指针,还是随意来? 前两天我收到了下面这样的一个 PR,我突然就想到了这个问题,于是就有了这篇博客。 image image 我一开始的想法 其实我一开始的想法很简单,因为我一直没有使用指针 在我的某些印象中我曾经记得,使用锁不申明为指针是一个代码规范类似的东西 大多数的(我看过的一些)源码中,没有见过将锁申明为指针的用法 但是当时我没有办法回答这个 PR,你总不能说我是一厢情愿吧...需要一个更加合理的解释 仔细分析...阅读全文

简书 2020-07-20 02:32:46 LinkinStar

全流程开发 GO实战电商网站高并发秒杀系统

全流程开发 GO实战电商网站高并发秒杀系统 课程带领大家从需求分析开始,实战一个具备秒杀常用功能的电商系统,并进行项目优化。学完本课程,你不仅可以感受到GO语言在高并发系统中的优势,同时可以掌握架构设计与系统化开发思维,用尽可能小的代价实现尽可能大的需求,提升技术与管理的双重能力。 适合人群 想用Go开发网络应用的开发者,对Go语言有浓厚兴趣 对秒杀系统这类高并发、高性能、灵活和可靠的系统 想更多了解的同学 技术储备要求 熟悉GO 语言基础,能自行完成基础环境搭建 熟悉Linux...阅读全文

Go语言中文网 2020-07-20 00:36:34 shuaige

微服务架构的演进和go的初步实践

零、背景 近一段时间在学习和实践用go来实现微服务架构的开发,本文来记录下什么情况下要使用微服务架构,分析下利弊。并且用grpc+etcd初步实现带服务发现功能的微服务模型。 一、服务端架构的演进 1、单体架构 在 Web 应用程序发展的早期,大部分工程是将所有的服务端功能模块打包成单个巨石型应用,最终会形成如下图所示的架构。 优点: 开发简单 技术单一 部署方便 缺点: 随着业务的发展,应用会越来越庞大 技术栈单一,不易扩展 牵一发而动全身 2、垂直分层架构 随着单体应用越来越庞大,单体架构中...阅读全文

Segmentfault 2020-07-23 18:32:34 叶子

golang 的GC原理

原文http://alblue.cn/articles/2020/07/07/1594131614114.html#toc_h4_19 GC(garbage cycle)垃圾回收机制,是用于对申请的内存进行回收,防止内存泄露等问题的一种机制。 go的GC机制 调用方式 所在位置 代码 定时调用 runtime/proc.go:forcegchelper() gcStart(gcTrigger{kind: gcTriggerTime, now: nanotime()}) 分配内测时调用 runti...阅读全文

简书 2020-07-18 21:32:49 98k_sw

借Go随意发挥

有时候受打击的时候会质疑自己做程序员的选择,工作越久,初心就越不明了. 在我漫长的通勤时间里,会去思考人生,我会问自己,现在的生活是你自己的想要的吗? 日复一日,做不完的项目,加不完的班,老板的压榨,就这样一直把自己的时间燃烧,换取一日三餐的温饱 有时候就会有换环境换工作甚至转行的冲动 迷茫,迷惑 那段时间和身边的朋友,亲人聊了很多 与自己不同行业的人交流,比自己年长的人谈心,收获良多 慢慢也就想通了 我们总是想改变环境的方式,来缓解自己的焦虑,殊不知,如果解决不了自身的问题的话,迟早还是会回到...阅读全文

简书 2020-07-18 21:32:49 小气的王二狗

从项目实战的角度看golang的pprof

golang程序优化起来是比较简单的,这得益于pprof这样的性能分析工具,有了它,程序能很容易分析像内存泄漏、cpu泄漏这样的问题。网上关于使用pprof或者分析pprof源码实现的文章也不少,但是在项目中实战的文章比较少。大多数关于pprof的文章讲的是,这样: //引入pprof import _ "net/http/pprof" ...... //起一个http服务器,接着请求/debug/pprof等接口 http.ListenAndServe("0.0.0.0:6060", nil)...阅读全文

简书 2020-07-18 21:32:48 onepunchgo

Golang学习笔记-Golang中的锁

同步原语和锁 Golang作为一个原生支持用户态的语言,当提到并发进程,多线程的时候,是离不开锁的,锁是一种并发编程中的同步原语(Synchronization Primitives),它能保证多个 Goroutine 在访问同一片内存时不会出现竞争条件(Race condition)等问题。 基于原语 go语言在sync包中提供了用于同步的一些基本原语,包括常见的sync.Mutex,sync.RWMutex,sync.WaitGroup, sync.Once,sync.Cond. 这些基本原...阅读全文

简书 2020-07-18 21:32:47 LegendGo