[译]Go:垃圾回收器是怎样标记内存的?

原文:medium.com/a-journey-w… 本文基于Go 1.13 Go的垃圾回收器负责将那些不会再使用的被占用的内存进行回收。实现的算法是并发的三色标记法以及扫描收集器。我们会看一下标记阶段的细节以及不同颜色的使用。 你可以在这篇文章中阅读到不同类型的垃圾回收机制。 标记阶段 这个阶段主要是扫描内存来确认哪一些内存块是仍然被使用,在哪一些内存块是可以被回收的。 然而,由于垃圾回收跟我们的Go程序是并发运行的,所以需要有个方法在扫描进行的同时监测内存的变化。为了解决这个问题,这里会用到...阅读全文

掘金 2019年12月09日 野生程序元

golang中你不知道的 string

golang中你不知道的 string 字符串对于一篇博客文章来说似乎太简单了,但是一个简单的东西想用好,其实也不容易。 遍历字符串 package main import ( "fmt" "unicode/utf8" ) func main() { const sample = "我爱golang" for i := 0; i < len(sample); i++ { runeValue, _ := utf8.DecodeRuneInString(sample[i:]) fmt.Printf(...阅读全文

掘金 2019年12月09日 _西门吹牛

Go 打造 Flutter 多版本管理工具:fvm

本文首发于 blog.befovy.com/2019/12/fvm… 周末时间用 Go 语言完成了 Flutter 多版本管理工具的初个版本 fvm v0.1.0。我必须承认,这个版本完全是在造轮子,而且还是和 leoafarias fvm 一模一样。 为什么造轮子 简单说就是有需求:在开发 fijkplayer (一个 Flutter 的媒体播放器)的过程中,我逐渐从开始只有 Android、iOS 的移动端版本,发展到 Flutter 桌面版本。在 fijkplayer 桌面版的开发中,我用...阅读全文

掘金 2019年12月08日 半岛打铁匠

ElasticSearch+Spark 构建高相关性搜索服务&千人千面推荐系统

​ElasticSearch+Spark 构建高匹配度搜索服务+千人千面推荐系统 【点击下载】基于大众点评搜索以及推荐业务,从企业实际项目落地实践的角度出发,在使用SpringBoot加mybatis完成用户登录、注册、商家入驻以及结合前端模板搭建运营后台门店服务管理功能后,借助ElasticSearch的最新版本ES7逐步迭代,完成高相关性进阶搜索服务,并基于spark mllib2.4.4构建个性化千人千面推荐系统。适合人群想了解EasticSearch,对搜索推荐系统感兴趣,符合技术储备的...阅读全文

Go语言中文网 2019-12-09 02:45:50 xiaochuangdan

Go语言实现微服务工具链(一) - 蓝绿部署

开一个系列坑,记录使用Go语言练习实现微服务工具链的过程,第一篇是蓝绿部署的实现。 蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK,将流量切到新版本。 项目的git地址为 github.com/mikellxy/mk… (蓝绿部署的实现在api目录的deploy目录下) 一、定义项目 在蓝绿部署中,上线的过程中,不会停用老版本,而是另外部署新的服务来运行新版本,并导入测试流量进行测试。下文中,把一个项目正在对外提供服务的称作production服务,部署了新版本正在进行测试的称作stag...阅读全文

掘金 2019年12月08日 mikellxy

深入理解Golang之channel

前言 Golang在并发编程上有两大利器,分别是channel和goroutine,这篇文章我们先聊聊channel。熟悉Golang的人都知道一句名言:“使用通信来共享内存,而不是通过共享内存来通信”。这句话有两层意思,Go语言确实在sync包中提供了传统的锁机制,但更推荐使用channel来解决并发问题。这篇文章会先从channel的用法、channel的原理两部分对channel做一个较为深入的探究。 channel用法 什么是channel 从字面上看,channel的意思大概就是管道的...阅读全文

golang-etcd系列(一)--初识

etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,是目前容器编排领域火热的 Kubernetes(k8s) 内置的服务发现与节点一致性中间件,用于提供可靠的分布式键值(key-value)存储、配置共享和服务发现等功能。etcd 可以用于存储关键数据和实现分布式调度,在现代化的集群运行中能够起到关键性的作用。 etcd 基于 Raft 协议,通过复制日志文件的方式来保证数据的强一致性。在 etcd 之前,常用的是基于 Paxos 协议的 ZooKeeper。 etcd e...阅读全文

简书 2019-12-08 23:32:41 热爱coding的稻草

go死锁问题

问题表现 代码报错:fatal error: all goroutines are asleep - deadlock 常见情况 select select 没有一个 case 命中,始终阻塞在那里。 channel 读不出来或写不进去。 最简单的例子:从一个空channel中读取数据 代码示例: package main func main() { done := make(chan bool) <-done // done<-1 // 写入也一样 } sync.WaitGroup wait ...阅读全文

Segmentfault 2019-12-09 18:32:38 西山雨

Go语言学习 - GC

背景知识 什么是标记与清理, 什么是三色标记 我们从根数据出发(学名叫RootSet): 向前走第一轮, 得到如下结果: 直接引用根数据的变量包含有(A,F). 第一轮结束, 将ABC三个变量标记成灰色. 开始第二轮, 我们从A出发, 首先我们将A标记成黑色, 然后发现引用了A的有(B,C,D)两个变量, 这两个变量通过A间接引用了根数据, 因此也是有效的, 我们将DB标记成灰色; 我们使用同样的办法在刚刚的(F)变量上, 第二轮结束, 我们得到了(B,C,D)变量是有效的, 截止目前, 一共有...阅读全文

掘金 2019年12月07日 xiaohan.liang?

golang-etcd系列(一)--初识

etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,是目前容器编排领域火热的 Kubernetes(k8s) 内置的服务发现与节点一致性中间件,用于提供可靠的分布式键值(key-value)存储、配置共享和服务发现等功能。etcd 可以用于存储关键数据和实现分布式调度,在现代化的集群运行中能够起到关键性的作用。 etcd 基于 Raft 协议,通过复制日志文件的方式来保证数据的强一致性。在 etcd 之前,常用的是基于 Paxos 协议的 ZooKeeper。 etcd 主...阅读全文

Segmentfault 2019-12-09 18:32:38 热爱coding的稻草

grpc-源码-网络模型

golang 的grpc库是 https://github.com/grpc/grpc-go grpc server端和服务端网络协议是在tcp基础上的 http2协议,http2协议负责grpc基础的数据传输、连接管理、流控等, 具体的业务层service 定义是基于 protobuf的 整个的网络过程和关键点如下图 grpc网络流程.png 说明: http2协议是支持在一个tcp连接上, client端同时发送多个request (不同request, streamid不同),不必等待se...阅读全文

简书 2019-12-08 21:32:43 cc180912

Golang channel 之 数据结构

channel的作用 channel被设计用来实现goroutine间的通信,按照golang的设计思想:以通信的方式共享内存。 channel的内存布局 例如如下代码中的make函数会在堆上分配一个runtime.hchan类型的数据结构,ch是存在于函数f栈帧上的一个指针,指向堆上的hchan数据结构。 func f() { ch := make(chan int) ... } 至于为什么是堆上的一个结构体:首先,要实现channel这样的复杂功能,肯定不是几个字节可以搞定的,所以需要一个s...阅读全文

简书 2019-12-08 21:32:41 封幼麟

gin 注解路由,自动参数绑定工具

ginprc golang gin 参数自动绑定工具 支持rpc自动映射 支持对象注册 支持注解路由 基于 go-gin 的 json restful 风格的golang基础库 自带请求参数过滤及绑定实现 binding:"required" validator 代码注册简单且支持多种注册方式 api接口说明 支持3种接口模式 func(gin.Context) //go-gin 原始接口 func(api.Context) //自定义的context类型 func(api.Context,re...阅读全文

简书 2019-12-08 21:32:40 xie1xiao1jun

03Gin源码解读

简介 Context 初始化 Context 之请求参数获取 Context 之模型绑定和验证 Context 之响应 Context 之高级响应 Context 之内容协商 总结 简介 Gin 源码解读, 基于 v1.5.0 版本. Context 初始化 Context 是 Gin 中很重要的一个部分, 先看一下注释是怎么说的. // Context is the most important part of gin. It allows us to pass variables betwe...阅读全文

Segmentfault 2019-12-09 18:32:38 帅气猫咪

golang 1.8 gc的演进

在java的gc中,主要有三种算法,即:标记-删除,标记-整理,复制,网上有很多资料介绍相关内容,其中标记主要是为了找到内存中不可达的对象,并将其回收。而gc过程中最关键的指标就是STW时间,如果STW过长,会影响整体程序的响应。 Serial Serial 采用单一线程进行GC。 特点:STW时间长,但是无线程切换开销,简单高效 ParNew ParNew 与Serial一样,只是在新生代采用并发gc CMS CMS CMS收集器主要用于老年代内存的回收,致力于降低STW时间,但是却拉长了gc...阅读全文

简书 2019-12-08 01:33:00 淡泊宁静_3652

编码在线工具

1 背景 作为一名程序员,每天需要处理大量编码问题,经常会用到在线json处理、编码解码、SQL处理等等,但是目前没有一个没有bug而且一站式解决所有问题的网站。导致我每天需要不同网站来回切换,而且遇到解析bug就非常头疼。 2 目标 打造一个一站式辅助编程的在线处理网站 3 网站风格 网址https://www.codeutils.top,打开后如下所示: 网站风格 左侧为目前网站支持的处理能力,目前包括Json处理、SQL处理、字符串编码解码、Go语言工具。 4 网站特点 4.1处理流程支持...阅读全文

简书 2019-12-08 01:32:59 zhongxuqi

你应该知道的HTTP基础知识

姓名:宫松涛学号:19021210927嵌牛导读:为大家详细讲解HTTP基础知识,让大家快速掌握。嵌牛鼻子:HTTP基础知识嵌牛提问:有哪些HTTP基础知识?转载源:你应该知道的HTTP基础知识嵌牛正文:本文主要内容:HTTP请求报文格式HTTP响应报文格式Header请求体的3种形式推荐调试工具HTTP的组成图示1. HTTP请求报文格式HTTP 的请求报文分为三个部分请求行、请求头和请求体,格式如图: HTTP请求报文格式注:部分文章也将HTTP请求报文分为两部分请求头和请求体,请求头的第一...阅读全文

简书 2019-12-08 01:32:55 走不完的叉路口