go中string和slice no-copy转换

在go里面,string和slice的互换是需要进行内存拷贝的,虽然在底层,它们都只是用 pointer + len来表示的一段内存。 通常,我们不会在意string和slice的转换带来的内存拷贝性能问题,但是总有些地方需要关注的,刚好在看vitess代码的时候,发现了一种很hack的做法,string和slice的转换只需要拷贝底层的指针,而不是内存拷贝。当然这样做的风险各位就要好好担当了: func String(b []byte) (s string) { pbytes := (*ref...阅读全文

阅读:7326 评论:0

go中有缓存通道和无缓存通道区别

golang channel 有缓冲 与 无缓冲 是有重要区别的 我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式 其实是彻底错误的,无缓冲的与有缓冲channel有着重大差别 那就是一个是同步的 一个是非同步的 怎么说?比如 c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 c1<-1 无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么c1<-1才会继续下去,要不...阅读全文

2016-04-18 11:45 Ellon-Daris
阅读:8434 评论:0

golang日志库glog解析

##glog简介 glog是著名的[google开源C++日志库glog](http://code.google.com/p/google-glog)的golang版本,glog是一个轻量级的日志库,上手简单不需要配置文件并且稳定高效,但是可以自定义控制的内容就少了。 glog主要有以下几个特点: 1. glog有四种日志等级INFO < WARING < ERROR < FATAL,不同等级的日志是打印到不同文件的,低等级的日志文件中(INFO)会包含高等级的日志信息(ERROR) 2. 通过...阅读全文

2015-10-09 23:16:15 shanks
阅读:22561 评论:0

今日头条Go建千亿级微服务的实践

今日头条使用 Go 语言构建了大规模的微服务架构,本文结合 Go 语言特性着重讲解了并发,超时控制,性能等在构建微服务中的实践 编者按:本文来自微信公众号“InfoQ”(ID:infoqchina),作者项超;36氪经授权发布。 今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的 Go 应用。 Go 构建微服务的历程 在2015年之前,头条的主要编程语言是 Python 以及部分 C++...阅读全文

2017-06-23 18:03:21 强子哥哥
阅读:12666 评论:1

Golang 微框架 Gin 简介

所谓框架 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫。golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。既然构造框架的门...阅读全文

2017-12-04 00:03:06 mickelfeng
阅读:48777 评论:1

Golang的反射reflect深入理解和示例

[TOC] Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和...阅读全文

阅读:71096 评论:12

Go Context的踩坑经历

0 引言context是Go中广泛使用的程序包,由Google官方开发,在1.7版本引入。它用来简化在多个go routine传递上下文数据、(手动/超时)中止routine树等操作,比如,官方http包使用context传递请求的上下文数据,gRpc使用context来终止某个请求产生的routine树。由于它使用简单,现在基本成了编写go基础库的通用规范。笔者在使用context上有一些经验,遂分享下。本文主要谈谈以下几个方面的内容:context的使用。context实现原理,哪些是需要注...阅读全文

2019-08-24 17:47:06 包增辉
阅读:32926 评论:4

golang-protobuf快速上手指南

什么是protobuf Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 如何安装protobuf 在github获取protobuf源码,windows系统可以直接下载exe文件:https...阅读全文

2018.08.20 22:37* 豆瓣奶茶
阅读:9090 评论:2

03-Golang局部变量和全局变量

局部变量 在C语言中写在{}中或者函数中或者函数的形参, 就是局部变量 Go语言中的局部变量和C语言一样 全局变量 在C语言中写在函数外面的就是全局变量 Go语言中的全局变量和C语言一样 局部变量和全局变量的作用域 在C语言中局部变量的作用域是从定义的那一行开始, 直到遇到 } 结束或者遇到return为止 Go语言中局部变量的作用域和C语言一样 在C语言中全局变量的作用域是从定义的那一行开始, 直到文件末尾为止 Go语言中的全局变量, 只要定义了, 在定义之前和定义之后都可以使用 局部变量和全...阅读全文

阅读:30711 评论:0

GO小知识之实例演示 json 如何转化为 map 和 struct

[原文地址](https://juejin.im/post/5ce7ee086fb9a07edf271f6b) 今天简单谈一些 JSON 数据处理的小知识。近期工作中,因为要把数据库数据实时更新到 elasticsearch,在实践过程中遇到了一些 JSON 数据处理的问题。 # 实时数据 实时数据获取是通过阿里开源的 canal 组件实现的,并通过消息队列 kafka 传输给处理程序。我们将接收到的 JSON 数据类似如下的形式。 ```json { "ty...阅读全文

阅读:1323 评论:0

Golang websocket结合一致性哈希算法构建高并发推送服务

Golang websocket结合一致性哈希算法构建高并发推送服务 2018年9月2日 1 场景介绍 web应用中,常有业务状态需要实时更新的场景。如一个较长的后台任务,从浏览器用户触发执行到执行完成可能需几十秒的时间,这时前端需隔几秒请求一次后台,查询任务执行进度。此种方式是长轮询的方式,是存在一定弊端的,增加了后台服务的负载,若并发操作量太大,后台压力会成倍激增。业界常采用http1.1的websocket扩展协议与浏览器建立长连接来实现实时业务状态更新。 2 实现方案 本文采用golan...阅读全文

阅读:1063 评论:0

一次糟糕的golang面试体验

因为现在的公司加班过于严重,一周五个工作日我有四个工作日是晚上11点以后才能下班,偶尔可能会到凌晨一点,两点...甚至到四点,第二天还要正常到公司。因为实在有点扛不住了就公开了下简历,准备重新看看外面的情况。 然后就有好几个猎头找到了我,我就把我的简历给了他们;后来呢有一个猎头给我推荐一个一家公司(位于五角场附近,我本身也就附近住)所以就没多考虑准备过去看看;时间定在了周五下午3点。后来这个猎头又找我说这家公司需要在简历上涉及到三个问题;猎头就把三个问题给到了我问我会不会,我看完之后感觉没什么问...阅读全文

阅读:3178 评论:14

关于fasthttp + K8S service负载均衡的一些心得

最近在做一个项目,项目中用golang 写了一个网关gateway,gateway接受来自外部的请求,并转发到后端的容器中。gateway和应用的容器都部署在同一个K8S集群当中。流程如下图 gateway到pod的请求,是通过K8S的dns机制来访问service,使用的是service的endpoint的负载均衡机制。当gateway得到一个请求之后,通过解析对应的参数,然后可以判断需要转发到哪个host,例如:请求转发到service.namespace.svc.cluster.local...阅读全文

2019-11-08 10:26 xavier-yang
阅读:1028 评论:0