golang 源码剖析(2) TCMalloc内存管理器

使用TCMalloc(Thread-Caching Malloc)当内存管理器 以下翻译自tcmalloc.html 动机 相对于glibc2.3 malloc, 在2.8GHz P4上,ptmalloc2需要大概300ns执行一个malloc/free 操作,TCMalloc只需要50ns 多线程时,可减少锁竞争. 小对象基本都是无锁,对于大对象,ptmalloc2也使用每个线程一个arena,但是在不同的arena上分配大对象时内存不会复用而会重新去申请内存 TCMalloc在小对象上也是空...阅读全文

简书 2020-03-04 10:32:47 darcyaf

go value receiver, pointer receiver 方法集

go 语言规范里定义的 method sets 规则 Values 可调用的方法(methods receivers) 备注 T (t T) funcXXX 为什么不能调用 (t *T) funcXXX,因为无法保证所有的Value 都可以获取到指针地址(addressable value) *T (t T) funcXXX and (t *T) funcXXX go 自动转化(dereferenced) *T --> T, 所以可以调用 为什么有些值无法获取地址? go spec: https...阅读全文

简书 2020-03-04 10:32:44 cdz620

leetcode_994

Golang: 思路:广度优先搜索,这里需要注意,当我们将目前新鲜但下一轮即将腐烂的橘子添加入我们的栈时,我们最好能改变下这个橘子的状态,防止重复搜索 代码如下: func orangesRotting(grid [][]int) int { var stack [][]int freshO,res:=0,0 for i:=0;i<len(grid);i++{ for j:=0;j<len(grid[0]);j++{ if grid[i][j]==2 { stack=append(stack, ...阅读全文

简书 2020-03-04 10:32:43 淳属虚构

Go Web 编程--超详细的模板库应用指南

模板库介绍 如果你有过Web编程的经验,那么或多或少都听说过或者使用过模板。简而言之,模板是可用于创建动态内容的文本文件。例如,你有一个网站导航栏的模板,其中动态内容的一部分可能是根据当前用户是否登录显示登录还是退出按钮。 Go提供了两个模板库text/template和html/template。这两个模板库的使用方式是相同的,但是html/template包在渲染页面模板时会在后台进行一些编码以帮助防止造成代码注入(XSS 攻击)。 因为两个模板库都使用相同的接口,因此本文中介绍的所有内容均...阅读全文

Segmentfault 2020-03-06 13:32:33 Kevin

????????字节跳动 2020 春季实习生招聘及校招全职补录全面启动????????

????????字节跳动 2020 春季实习生招聘及校招全职补录全面启动????????投递之后记得在评论区留个言哈,方便我在后台匹配投递记录!​时间有限,抓紧投递简历了!顺便介绍一下我的部门!​我们是国际化研发部门,这个部门做啥呢?这不就是一看名字就知道是做的海外产品的吗~那你们这个部门咋样?有拿得出手的产品吗?那是必须有啊!国际化部门的重磅产品:Helo,这是公司内第一款在海外首发的社交媒体平台!现在Helo已经是印度本土语种社交媒体平台的第一名!GP上免费榜霸榜选手!目前,Helo在印度已...阅读全文

Go语言中文网 2020-03-04 09:53:35 zhoudingding

golang 编写 PHP 扩展

phper 都知道 php-extension 采用 C/C++ 编写.由于 C/C++ 开发效率问题我们来采用 golang 编写 php-extension充分利用 golang 的开发效率和生态给 PHP 添砖加瓦. 环境准备 wsl ubuntu golang 1.13 php 7.3 新建项目 php7.3 里面的 ext_skel 和以前版本参数不一样,请查看 help 操作 php: ./ext_skel.php --ext goserver --onlyunix golang: ...阅读全文

Segmentfault 2020-03-06 10:32:33 战线

通过例子学习 Go 和 Rust ---- Interface 和 Trait

Go 的接口(interface)和 Rust 的特征(Trait)是经常被放在一起做比较的概念。咱可以用它们来实现计算不同几何形状的面积和周长的功能。 Go type geometry interface { area() float64 perim() float64 } type rect struct { width, height float64 } type circle struct { radius float64 } func (r rect) area() float64 {...阅读全文

Segmentfault 2020-03-06 09:32:33 Tericoder

代码包中如何只有函数声明,引用其他包的函数

最近在学习golang反射,为了了解下原理,就深入了解了reflect源代码 看到了有一些函数,点击跳入源代码时,只在reflect包中找到了一个函数声明 比如以下函数 // resolveNameOff resolves a name offset from a base pointer. // The (*rtype).nameOff method is a convenience wrapper for this function. // Implemented in the runtim...阅读全文

Segmentfault 2020-03-06 09:32:33 懒散

通过例子学习 Go 和 Rust ---- 指针

指针表示内存上的一段数据的位置、长度、类型信息。在 Go 和 Rust 里面都可以操作指针,咱用一个最简单的例子来看看它们的异同之处。 Go func zeroval(ival int) { ival = 0 } func zeroptr(iptr *int) { *iptr = 0 } func main() { i := 1 fmt.Println("initial:", i) zeroval(i) fmt.Println("zeroval:", i) zeroptr(&i) fmt.Pri...阅读全文

Segmentfault 2020-03-06 08:32:32 Tericoder

Go 项目标准布局(结构)

https://github.com/golang-standards/project-layout 项目总结了 Go 项目的布局,这是Go应用程序项目的基本布局,并不是Go核心开发团队定义的官方标准;但是,这是Go生态系统中的一种常见的项目布局模式。 Go目录 /cmd 该目录用于存放 Go 项目的入口,即 main.go。一般来说,我们应该在 cmd 目录下创建子目录,子目录名称代表可执行程序的名称(例如/cmd/myapp)。上面列出的优秀开源项目基本上遵循了这一规则。 一般来说,该目录中...阅读全文

简书 2020-03-03 15:33:24 DevilRoshan

golang与java并发性能对比测试

测试环境:cpu:2.8 GHz 四核Intel Core i7 内存:16 GB 1600 MHz DDR3 jdk版本:1.8 go版本:1.14 测试方法:分别使用golang和java并发执行相同数量的空任务 golang使用goroutine实现,代码如下: func main() { count,line := 100*10000,"-------------------------------------" runTask(count) fmt.Println(line) coun...阅读全文

简书 2020-03-03 15:33:23 呆眸

Golang-btree包的主要方法和总结

B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称 本篇介绍google的btree使用, 地址:http://github.com/google/btree 树的结构必须实现排序的规则 import ( "github.com/google/btree" ) type MyTree struct { Age int Name string } func (m *...阅读全文

简书 2020-03-03 15:33:21 八叉树

leetcode_1010

Golang: 思路:对每次时间,都让它们取60的余数,用数组记录下来这些余数出现的次数,最后统一起来计算。 代码如下: func numPairsDivisibleBy60(time []int) int { sum:=0 arr:=make([]int,60) for i:=0;i<len(time);i++{ arr[time[i]%60]++ } sum+=arr[0]*(arr[0]-1)/2+arr[30]*(arr[30]-1)/2 for i:=1;i<30;i++{ sum+=...阅读全文

简书 2020-03-03 15:33:18 淳属虚构

leetcode_1013

Golang: 思路:先求和判断能否除以3,能的话开始遍历元素并相加,每当和等于总和的1/3时,将和清零并继续向下遍历,再出现一次和的1/3即可返回true,否则返回false 代码如下: func canThreePartsEqualSum(A []int) bool { sum:=0 for i:=0;i<len(A);i++{ sum+=A[i] } if sum%3==0 { temp,k,flag1,flag2:=0,0,false,false for k<len(A) { temp+...阅读全文

简书 2020-03-03 15:33:16 淳属虚构

小巧玲珑的计算机语言 - Red - 双语 - R1.1

Red语言并不是一个很流行的语言,它自REBOL语言发展而来,但包括Red和它的母语REBOL,甚至都没有排进编程语言排行榜的前50位(根据最新一期TIOBE排行榜)。但是,Red语言是一门小巧玲珑,而又功能不弱的轻量级编程语言。所谓的轻量级,是指整个语言的编写相对更贴近一般人类的思路,贴近高级语言因而书写便捷,编程和运行环境非常简单,实际上只有一个可执行文件。而功能不弱,体现在下面几个地方:跨平台、即支持解释运行又支持编译运行、内置的语言级别上支持图形界面(GUI)开发、方便的网络编程能力(例...阅读全文

简书 2020-03-03 15:33:12 陆满庭

golang grpc之etcd服务注册发现

什么是etcd?什么是grpc?为什么要使用etcd。本文将简单对etcd与grpc介绍与代码实现。 etcd etcd是一个高可用的键值分布式存储系统,主要用于共享配置和服务发现。etcd使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft通过选举的方式来实现一致性,在Raft中,任何一个节点都可能成为Leader。k8s也使用了etcd。 Raft算法: Leader领导者: 处理所有客户端交互,日志复制等,一般一次只有一个Leader. Follower信徒: 类...阅读全文

简书 2020-03-03 15:33:08 _老七

和为S的两个数字

题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 示例: 输入:target = 9 输出:[[2,3,4],[4,5]] 思路 1.这道题可以使用“双指针”的思想解决。 2.设置两个指针,分别指向首位两个元素。 当nums[low]+nums[high]==target时,返回双指针对应的数字 当 nums [ low] > target - nums [ high] 时,说明右边的值过大,high- 1...阅读全文

简书 2020-03-03 15:33:03 youzhihua

通过例子学习 Go 和 Rust ---- 闭包

闭包简而言之,是一段有状态的代码。咱试着用闭包来做一个计数器,每次调用,闭包的状态就加1. Go func intSeq() func() int { i := 0 return func() int { i++ return i } } func main() { nextInt := intSeq() fmt.PrintLn(nextInt()) fmt.PrintLn(nextInt()) fmt.PrintLn(nextInt()) } 1 2 3 Rust 由于编译时我们无法知道闭包的...阅读全文

Segmentfault 2020-03-05 23:32:33 Tericoder

vue-element-admin 后台动态加载菜单

前言 做后台项目,权限验证与安全性是非常重要的,vue-element-admin官方主要介绍了前端控制用户菜单加载显示,以及权限控制。这就带来一些不便,服务端无法(这里可能说的绝对了,起码实现起来不太友好)控制菜单的动态展示,用户权限跟菜单相互关系的绑定。 这里我们通过分析go-admin 代码来让大家一步步了解如何实现服务端控制前端菜单的展示的。 项目地址: github: https://github.com/guyan0319/... 码云(国内): https://gitee.com/...阅读全文

Segmentfault 2020-03-05 15:32:34 guyan0319