Golang 性能测试 (2) 性能分析

本文介绍 golang 如何做性能分析。 对服务做了基准性能测试后,如果服务出现问题,可以通过性能分析工具,查出消耗资源的瓶颈,并做针对性的性能优化。 Golang 语言也为我们提供了方便的性能分析工具pprof,方便我们做必要的服务优化。pprof 可以做cpu分析,统计所有调用方法执行的时间片(通过采样); 可以查看内存分配,找到是否有内存泄漏,哪里泄露了(调用栈);还可以查看Block、事件调用,互斥锁等。可谓麻雀虽小,五脏俱全。Golang 提供了两种分析的工具,一种是web工具,直接引...阅读全文

Segmentfault 2020-04-20 11:32:36 搬砖程序员带你飞

golang 性能测试 (1)

本文介绍golang 如何做基准性能测试。 编写完代码除了跑必要的单元测试外,还需要考虑代码跑起来的性能如何。性能的衡量其实就是程序运行时候进程的内存分配,CPU消耗情况。 golang 语言在提供了功能测试的基础上,提供了丰富的性能测试功能。 SHOW CODE 首先,从一个例子来讲起。 随便写一个简单的快速排序,然后和系统自带的排序做一个性能比较。 如下为简版快排的代码: package benchmark import "sort" func QSort(data []int) { myq...阅读全文

Segmentfault 2020-04-20 09:32:34 搬砖程序员带你飞

go语言ssh客户端解决密码过期问题

go语言的ssh包居然不支持密码过期重置的功能!版本:go v1.14.1 linux环境下安装的。ssh包:git clone https://github.com/golang/crypto.git是2020年4月1号左右下载的。 先描述一下问题的现象,以及必须得解决这个问题的原因:正常的ssh客户端,如果密码过期了,或者不符合密码规则,在登陆的时候终端都会提示一段话,比如过期之类的。然后会提示你在终端输入旧密码,再输入新密码,然后确认,从而完成密码修改。 然而用这个ssh包,执行ssh.D...阅读全文

Segmentfault 2020-04-20 09:32:34 cuidi

基于 MySQL Binlog 实现可配置的异构数据同步

随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经 不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们在业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 Part.1 现有方案及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张MySQL 表中,这张中间表对应了业务需要的Elasticsearch 索引,每一列对应索引中的一个Map...阅读全文

简书 2020-04-17 07:32:49 Minna_1122

leetcode_1400

Golang: 思路:竞赛题搬运。。。忘了思路了。。。 代码如下: func canConstruct(s string, k int) bool { if len(s)<k{ return false } if len(s)==k{ return true } arr:=make([]int,26) for i:=0;i<len(s);i++{ arr[s[i]-'a']++ } nums:=0 for _,v:=range arr{ if v%2!=0{ nums++ } } if nums...阅读全文

简书 2020-04-17 07:32:47 淳属虚构

leetcode_1396

Golang: 思路:竞赛题搬运,这题时间效率有点低,有待优化 代码如下: type UndergroundSystem struct { mp map[int]string mp2 map[string][]int mp3 map[int]int } func Constructor() UndergroundSystem { return UndergroundSystem{ mp:make(map[int]string), mp2:make(map[string][]int), mp3:m...阅读全文

简书 2020-04-17 07:32:47 淳属虚构

golang通道channel的用法及特性

定义 通道是go语言的一种数据类型,是goroutine之间的通信机制。 初始化 var c chan TYPE ch := make(chan int) //无缓冲通道 ch := make(chan string ,10) //有缓冲通道 ch := make(chan<- string) //只能用于接收的通道 单向通道 ch := make(<-chan float64) //只能用于发送的通道 单项通道 接收元素 从一个未初始化的通道中获取数据会永远阻塞。 从一个已关闭的通道中获取数据...阅读全文

简书 2020-04-17 07:32:47 进击的扣子

Go语言 命令行解析(一)

命令行启动服务的方式,在后端使用非常广泛,如果有写过C语言的同学相信不难理解这一点!在C语言中,我们可以根据argc和argv来获取和解析命令行的参数,从而通过不同的参数调取不同的方法,同时也可以用Usage来打印帮助信息了。 那么开始今天的话题之前,我们回顾一下在C语言中是如何解析传递的参数的。 示例代码: #include <stdio.h> #include <stdlib.h> // argc 为int型 // argv 为char指针数组,元素个数是argc,存放的是指向每一个参数的指...阅读全文

简书 2020-04-17 07:32:47 桂成林

Golang中make和new的区别

1:new:func new(Type) *Type 接受一个参数,这个参数是一种类型,而不是一个值,分配好内存后,返回一个指向该类型内存地址的指针,这个指针指向的内容的值为该类型的零值。对于不同的数据类型,零值的意义是完全不一样的。比如,对于bool类型,零值为false;int的零值为0;string的零值是空字符串2:make:func make(t Type, size ...IntegerType) Type,具体而言,有如下几种用法:(1)make(map[string]string...阅读全文

简书 2020-04-17 07:32:44 普朗tong

2020-04-17

golang的context 一个简单的并发 举个例子 什么是context [这是一个chan+select来结束一个goroutine的方式] (https://play.golang.org/p/ZZ6EjeZjfj7) 上面说的这种场景是存在的,比如一个网络请求Request,每个Request都需要开启一个goroutine做一些事情,这些goroutine又可能会开启其他的goroutine。所以我们需要一种可以跟踪goroutine的方案,才可以达到控制他们的目的,这就是Go语言为...阅读全文

简书 2020-04-17 07:32:44 jepril

Go 每日一库之 plot

简介 本文介绍 Go 语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件,基本满足日常需求。同时,它也提供了定制化的接口,可以实现我们的个性化需求。plot主要用于将数据可视化,便于我们观察、比较。 快速使用 先安装: $ go get gonum.org/v1/plot/... 后使用: package main import ( "log" "math/rand" "gonum.org/v1/plot" "gonum.org/v1/plot/plotter" "gon...阅读全文

Segmentfault 2020-04-19 21:32:34 darjun

Go 和 PHP 基于两组数计算相加的结果

原文链接:go letcode,作者:三斤和他的喵 php 代码个人原创 两数相加(Add-Two-Numbers) 这是 LeetCode 的第二题,题目挺常规的,题干如下: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -...阅读全文

Segmentfault 2020-04-19 12:32:34 hxd_

超详细Go语言源码目录说明

开源项目「go home」聚焦Go语言技术栈与面试题,以协助Gopher登上更大的舞台,欢迎go home~ 导读 学习Go语言源码的第一步就是了解先了解它的目录结构,你对它的源码目录了解多少呢?今天我整理了一份超详细的Go语言源码目录说明,基于Go1.14版本整理,欢迎收藏~ 目录总览 . ├── AUTHORS ├── CONTRIBUTING.md ├── CONTRIBUTORS ├── LICENSE ├── PATENTS ├── README.boringcrypto.md ├──...阅读全文

Segmentfault 2020-04-18 21:32:33 平也

唯一ID生成器-发号器实践-企业实例--内存buffer方式

缓存模式 基于内存buffer的发号器架构如图,这也是目前我在维护的发号器之一 优点:1.水平扩展方便2.对高并发支持良好3.数据库依赖较低,只在buffer耗尽时需请求数据库,连接失败情况下仍可实现较长时间发号4.该服务目前支持step发号返回的id格式符合 id=startID+idStep*n5.该服务支持一次获取多号,性能与单个发号相近缺点:1.集群情况下,发号为趋势递增而非严格递增(趋势递增指ID整体上是增加且唯一的,但不是严格两次发号都差1,比如两台服务器A持有1001-2000 B...阅读全文

Segmentfault 2020-04-18 14:32:34 Charles_Wong

发号器实践,企业发号器实例--snowflake系列

美团发号器Leaf-snowflake方案 Leaf-snowflake方案完全沿用snowflake方案的bit位设计,即是“1+41+10+12”的方式组装ID号。对于workerID的分配,当服务集群数量较小的情况下,完全可以手动配置。Leaf服务规模较大,动手配置成本太高。所以使用Zookeeper持久顺序节点的特性自动对snowflake节点配置wokerID。Leaf-snowflake是按照下面几个步骤启动的: 启动Leaf-snowflake服务,连接Zookeeper,在lea...阅读全文

Segmentfault 2020-04-18 10:32:34 Charles_Wong

微服务监测的五大原则

一、背景容器和微服务的出现并得到大量应用,从根本上改变了应用系统的组成和运行方式。而随着开发人员开始利用编排系统来管理和部署容器,规则进一步发生了变化。以往主机上的一个简单应用,现在已成为一个复杂的、动态编排的、多容器的体系架构,这同时也对应用的监测提出了全新的挑战。Sysdig,是专注于系统故障排查和监控工具的公司,其产品Sysdig Cloud是定位于容器系统故障排查和监控的平台。在今年召开的JFrog SwampUp用户大会上,Sysdig公司提出监测容器及构建在其上的微服务的五大关键原则...阅读全文

Go语言中文网 2020-04-16 16:26:18 JFrogChina

GO常量与变量

package main import ( "fmt" ) //单个变量(自行判断变量类型) var test1 = "content1" /*单个变量 先声明类型再赋值,此种方式函数中调用不了(会报错syntax error: non-declaration statement outside function body) 请再函数外设置 */ //var test2 string //test2 = "content2" //test3 : = "content3" //:=左侧的变量不应该...阅读全文

51CTO博客 2020-04-16 14:46:08 赛里

golang使用火焰图查看性能

下载graphviz https://graphviz.gitlab.io/_pages/Download/Download_windows.html windows下载msi格式,安装成功后,进入命令行查看是否安装成功 指令:dot -version 如下图,说明安装成功 添加代码 在你的程序中加入如下代码: import "net/http" import _ "net/http/pprof" func main() { // 主函数中添加 http.ListenAndServe("0.0....阅读全文

简书 2020-04-16 15:37:04 技术修仙

主流互联网编程语言介绍,想要学习编程的你,不容错过

我将带大家走进互联网开发世界。今天给大家介绍一下互联网开发的语言。 什么是互联网开发语言 说到语言,大家可能首先想到的是汉语,英语,是可以让大家明白对方意思的一种交流方式。但是互联网开发语言呢,又是一种怎样的存在。既然是语言,就也是一种交流方式,但是这个语言,是为了让电脑来理解的。 人类的语言里,可以分为汉语,英语,日语,法语等等。在计算机的世界里,同样也有很多的种类。对计算机知识有一定了解的伙伴们,这个时候脑海里可能会浮现出Java,C,C++等多门编程语言的名称。而且也知道,如果想要学习编程...阅读全文

简书 2020-04-16 15:35:52 旭积博发