【golang】性能优化

内存管理 在栈中创建对象比在堆中创建对象性能高,少用new来创建对象,多用object{}创建,如果需要创建大量相同临时对象,使用sync.pool减少gc压力。 原因:因为heap上的变量需要gc,而stack上的自动释放,如果在函数里面创建许多生命周期很短的heap变量,会不断触发gc。阅读全文

简书 2020-04-16 03:32:42 dongzaidong

指针的详细讲解

指针是一个代表着某个内存地址的值, 这个内存地址往往是在内存中存储的另一个变量的值的起始位置. Go语言对指针的支持介于Java语言和 C/C++ 语言之间, 它既没有像Java那样取消了代码对指针的直接操作的能力, 也避免了 C/C++ 中由于对指针的滥用而造成的安全和可靠性问题. ## 指针地址和变量空间 Go语言保留了指针, 但是与C语言指针有所不同. 主要体现在: - 默认值: nil. - 操作符 `&` 取变量地址, `*` 通过指针访问目标对象. -...阅读全文

Go语言中文网 2020-04-15 22:52:51 Conan_1996

Go中的bit位和位运算符

一.二进制长什么样 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...阅读全文

Segmentfault 2020-04-17 09:32:35 海生

java 转 go 遇到 Apollo ?让 agollo 来帮你平滑迁移

Introduction agollo 是Apollo的 Golang 客户端 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 如果在使用 golang 重构 java 的过程中,使用到了分布式配置中心 Apollo,那么最快的方式就是使用原来的配置,保持最平滑的迁移,这个时候你就需要一个 Apollo 的 golang 客户端,agollo 可以...阅读全文

掘金 2020年04月15日 hantmac

全栈后台管理系统脚手架 gin-vue-admin 2.0版本介绍

项目文档 在线文档项目地址 前端UI框架:element-ui 后台框架:gin 1. 基本介绍 1.1 项目介绍 在线预览 Gin-vue-admin是一个基于vue和gin开发的全栈前后端分离的后台管理系统,集成jwt鉴权,动态路由,动态菜单,casbin鉴权,表单生成器,代码生成器等功能,提供多种示例文件,让您把更多时间专注在业务开发上。 1.2 贡献指南 Hi! 首先感谢你使用 gin-vue-admin。 Gin-vue-admin 是一套为后台管理平台准备的一整套前后端分离架构式的开...阅读全文

Segmentfault 2020-04-17 09:32:35 蒋吉兆

Helm, 在Kubernetes中部署应用的利器

一、背景Kubernetes(k8s)是一个基于容器技术的分布式架构领先方案。它在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。在容器云环境及容器化服务在业界开始大规模部署应用的前提下,Kubernetes在业界的实际应用情况又是怎样的呢?在今年召开的JFrog SwampUp用户大会上,Codefresh公司为大家展示了一些有意思的数据。如下图:​据Codefresh公司统计,在目前JFrog的企业用户当中...阅读全文

Go语言中文网 2020-04-15 14:35:30 JFrogChina

Vue 使用websocket + json + protobuf 与后端交互golang

看这篇文章的时候,千万不要害怕代码,重要的核心的都加注释了,原理很简单!!祝阅读顺利 当学习一门新的语言的时候,总是喜欢先建立一个Demo项目,通过构建一个基本的项目,来了解语言的特点。 对于web的交互,以前常用的技术主要是Ajax、Form表单提交这类,如果要做长连接,可以使用Websocket 关于websocket和socket其实是两个东西,如果要比较的话,应该是拿websocket和http 来比较。 websocket 发送json websocket发送json这是一种常规的方式...阅读全文

Segmentfault 2020-04-17 09:32:34 jaysun

「Go」Go语言之依赖管理

不积跬步,无以至千里;不积小流,无以成江海。 码字不易,点赞再看。 Go语言的依赖管理随着版本的迭代正逐渐完善起来。 依赖管理 常见的包管理有,dep、go vendor、glide、go modules 等。过时的东西就不在去研究,这里主要说一下 go modules,go modules是Go1.11版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始,go modules将是Go语言默认的依赖管理工具。 GO111MODULE 要启用go modules 支持首先要设置环境变量 ...阅读全文

简书 2020-04-15 11:33:11 不住隔壁的王老师

「Go」搭建开发环境

不积跬步,无以至千里;不积小流,无以成江海。 码字不易,点赞再看。 万里长征第一步,搭建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 ...阅读全文

简书 2020-04-15 11:33:08 不住隔壁的王老师

golang实现剑指offer:动态规划题型

丑数 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)得到 我们可以创建一个数组,里面的数字是排好序的丑数,里面的每一个丑数是前面的某丑...阅读全文

简书 2020-04-15 11:33:01 阿篮go

事件驱动的微服务-总体设计

事件驱动的微服务-总体设计 我在"微服务之间的最佳调用方式"中讲到了微服务之间的两种调用方式。微服务刚兴起时,大部分都是RPC的调用模式。我也写了一个RPC的架构,详情参见"清晰架构(Clean Architecture)的Go微服务"。但现在事件驱动的微服务越来越流行,因为大家觉得它是松耦合的。我会写一个新的系列来讲述如何构建事件驱动的微服务。本文是这个系列的第一篇,总体设计。 本文通过一个具体的例子来讲解事件驱动微服务的设计,它包含两个微服务,一个是订单服务(Order),另一个是支付服务(...阅读全文

Segmentfault 2020-04-17 09:32:34 倚天码农

Golang比较两个slice是否相等(二) - 封装

在前一篇文章中简单封装了int类型的Slice,并且通过基准测试得出性能远远高于 reflect.DeepEqual 。 本章将封装一个通用的包比较各种值类型的slice,在已知slice值类型时使用。 思路分析 定义一个 interface 名为Interface,包含两个方法:len()返回slice的长度,item()根据索引获取值 定义 compare 方法,接收两个实现了Interface的 slice ,进行比较。 定义类型 StringSlice 用于比较string类型; Int...阅读全文

简书 2020-04-15 09:32:50 Avery_up

golang比较浮点数是否相等

由于小数二进制和十进制转换的时候,会有精度丢失的问题,所以我们在比较浮点数是否相等,指的是在一定精度范围内的两个浮点数是否相等。 参看了网上其他人的实现 实现1,实现2 基本上都一样,于是我就改了几个值验证了一下, 结果发下 package main import ( "fmt" "math" ) const MIN = 0.000001 // MIN 为用户自定义的比较精度 func IsEqual(f1, f2 float64) bool { return math.Dim(f1, f2) ...阅读全文

简书 2020-04-15 09:32:50 郭青耀

4-14

一面端口被占用其它应用能否正常运行,如何解决。lsof -i:端口号。线程都共享了什么东西:堆、全局变量、静态变量、寄存器。手撕代码,1-n的数组可以组成多少棵二叉搜索树:dp[i] = dp[j-1]*dp[i-j]翻转文章单词:双指针二面 比如redis挂掉了怎么办。降级、限流、兜底。哨兵。手撕代码,搜索旋转排序数组。双指针+数组你说你用了CDN,如果CDN结点挂了会怎么办? 从服务器下载静态文件到本地,nginx转发静态文件到固定目录。三面写个命令,将当前目录下所有文件名和对应权限打印到一...阅读全文

简书 2020-04-15 09:32:49 Impossible安徒生

golang chanel

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(...阅读全文

leetcode_542

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...阅读全文

简书 2020-04-15 09:32:45 淳属虚构

leetcode_1002

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]) } } }...阅读全文

简书 2020-04-15 09:32:45 淳属虚构