【golang】性能优化
内存管理 在栈中创建对象比在堆中创建对象性能高,少用new来创建对象,多用object{}创建,如果需要创建大量相同临时对象,使用sync.pool减少gc压力。 原因:因为heap上的变量需要gc,而stack上的自动释放,如果在函数里面创建许多生命周期很短的heap变量,会不断触发gc。阅读全文
内存管理 在栈中创建对象比在堆中创建对象性能高,少用new来创建对象,多用object{}创建,如果需要创建大量相同临时对象,使用sync.pool减少gc压力。 原因:因为heap上的变量需要gc,而stack上的自动释放,如果在函数里面创建许多生命周期很短的heap变量,会不断触发gc。阅读全文
一.二进制长什么样 bit比特是计算机的最小单元,是一个二进制位1或者0 t.Log("start") t.Logf("%b", 0) //0 t.Logf("%b", 1) //1 t.Logf("%b", 2) //10 t.Logf("%b", 3) //11 /* int是带符号的,表示范围是:-2147483648到2147483648,即-2^31到2^31次方。 uint则是不带符号的,表示范围是:2^32即0到4294967295。 */ var one uint one = 1...阅读全文
Introduction agollo 是Apollo的 Golang 客户端 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 如果在使用 golang 重构 java 的过程中,使用到了分布式配置中心 Apollo,那么最快的方式就是使用原来的配置,保持最平滑的迁移,这个时候你就需要一个 Apollo 的 golang 客户端,agollo 可以...阅读全文
项目文档 在线文档项目地址 前端UI框架:element-ui 后台框架:gin 1. 基本介绍 1.1 项目介绍 在线预览 Gin-vue-admin是一个基于vue和gin开发的全栈前后端分离的后台管理系统,集成jwt鉴权,动态路由,动态菜单,casbin鉴权,表单生成器,代码生成器等功能,提供多种示例文件,让您把更多时间专注在业务开发上。 1.2 贡献指南 Hi! 首先感谢你使用 gin-vue-admin。 Gin-vue-admin 是一套为后台管理平台准备的一整套前后端分离架构式的开...阅读全文
![微信图片_20200415160507.png](https://static.studygolang.com/200415/4b4b180e2f6ebfc571e5d8d9f3515fbd.png)阅读全文
一、背景Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案。它在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。在容器云环境及容器化服务在业界开始大规模部署应用的前提下,Kubernetes在业界的实际应用情况又是怎样的呢?在今年召开的JFrog SwampUp用户大会上,Codefresh公司为大家展示了一些有意思的数据。如下图:据Codefresh公司统计,在目前JFrog的企业用户当中...阅读全文
看这篇文章的时候,千万不要害怕代码,重要的核心的都加注释了,原理很简单!!祝阅读顺利 当学习一门新的语言的时候,总是喜欢先建立一个Demo项目,通过构建一个基本的项目,来了解语言的特点。 对于web的交互,以前常用的技术主要是Ajax、Form表单提交这类,如果要做长连接,可以使用Websocket 关于websocket和socket其实是两个东西,如果要比较的话,应该是拿websocket和http 来比较。 websocket 发送json websocket发送json这是一种常规的方式...阅读全文
不积跬步,无以至千里;不积小流,无以成江海。 码字不易,点赞再看。 Go语言的依赖管理随着版本的迭代正逐渐完善起来。 依赖管理 常见的包管理有,dep、go vendor、glide、go modules 等。过时的东西就不在去研究,这里主要说一下 go modules,go modules是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始,go modules将是Go语言默认的依赖管理工具。 GO111MODULE 要启用go modules 支持首先要设置环境变量 ...阅读全文
不积跬步,无以至千里;不积小流,无以成江海。 码字不易,点赞再看。 万里长征第一步,搭建go的开发环境,本文基于1.14.2 Go语言1.14版本之后推荐使用go modules管理依赖,也不再需要把代码写在GOPATH目录下了。是不是很赞 image.png 下载 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://golang.google.cn/dl/ 根据自己系统,自行选择安装。推荐下载可执行文件版,一路 Next image.png ...阅读全文
丑数 LeetCode 面试题49:丑数 题目描述 我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。 示例: 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 核心思想: 动态规划 三指针 解题思路: 已知丑数只包含因子 2, 3, 5,因此第N个丑数一定是 前面某个丑数 * 某个因子(2,3,5)得到 我们可以创建一个数组,里面的数字是排好序的丑数,里面的每一个丑数是前面的某丑...阅读全文
事件驱动的微服务-总体设计 我在"微服务之间的最佳调用方式"中讲到了微服务之间的两种调用方式。微服务刚兴起时,大部分都是RPC的调用模式。我也写了一个RPC的架构,详情参见"清晰架构(Clean Architecture)的Go微服务"。但现在事件驱动的微服务越来越流行,因为大家觉得它是松耦合的。我会写一个新的系列来讲述如何构建事件驱动的微服务。本文是这个系列的第一篇,总体设计。 本文通过一个具体的例子来讲解事件驱动微服务的设计,它包含两个微服务,一个是订单服务(Order),另一个是支付服务(...阅读全文
在前一篇文章中简单封装了int类型的Slice,并且通过基准测试得出性能远远高于 reflect.DeepEqual 。 本章将封装一个通用的包比较各种值类型的slice,在已知slice值类型时使用。 思路分析 定义一个 interface 名为Interface,包含两个方法:len()返回slice的长度,item()根据索引获取值 定义 compare 方法,接收两个实现了Interface的 slice ,进行比较。 定义类型 StringSlice 用于比较string类型; Int...阅读全文
由于小数二进制和十进制转换的时候,会有精度丢失的问题,所以我们在比较浮点数是否相等,指的是在一定精度范围内的两个浮点数是否相等。 参看了网上其他人的实现 实现1,实现2 基本上都一样,于是我就改了几个值验证了一下, 结果发下 package main import ( "fmt" "math" ) const MIN = 0.000001 // MIN 为用户自定义的比较精度 func IsEqual(f1, f2 float64) bool { return math.Dim(f1, f2) ...阅读全文
golang 推荐通过消息来共享内存,而不是通过共享内存来通信 chanel 是一等公民可以作为函数参数,函数返回值 chanel 必须有接受者,否则会deadlock func worker(id int, c chan int) { fmt.Println(123) // for n := range c { // fmt.Printf("Worker %d received %c\n", // id, n) // } } func chanDemo() { channel := make(...阅读全文
package main import ( "html/template" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.SetFuncMap(template.FuncMap{ "safe": func(str string) template.HTML { return template.HTML(str) }, }) router.LoadHTMLFiles("./index.tmpl")...阅读全文
image.png ** index.tmpl ** <!DOCTYPE html> <html lang="zh-CN"> <head> <title>修改模板引擎的标识符</title> <link rel="stylesheet" type="text/css" href="/staticbert/index.css" /> </head> <body> <h1>2134</h1> <div>{{ . }}</div> </body> </html> package main import...阅读全文
Golang: 思路:多源BFS 代码如下: func updateMatrix(matrix [][]int) [][]int { res:=make([][]int,len(matrix)) for k,_:=range res{ res[k]=make([]int,len(matrix[0])) copy(res[k],matrix[k]) } var stack [][]int for i:=0;i<len(matrix);i++{ for j:=0;j<len(matrix[0]);j...阅读全文
Golang: 思路:每个字符串进行比较即可 代码如下: func commonChars(A []string) []string { arr1:=make([]int,26) for k,w:=range A{ arr2:=make([]int,26) for _,b:=range w{ arr2[b-'a']++ } if k==0{ copy(arr1,arr2) }else{ for k,_:=range arr1{ arr1[k]=min(arr1[k],arr2[k]) } } }...阅读全文