goroutine与调度器

我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。 这个调度器的原理以及实现值得我们去深入研究一下。支撑整个调度器的主要有4个重要结构,分别是M、G、P、Sched,...阅读全文

阅读:13282 评论:5

理解Golang包导入

转自:http://tonybai.com/2015/03/09/understanding-import-packages/ Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 Golang中包的定义和使用看起来十分简单: 通过package关键字定义包: package xxx 使用import关键字,导入要使用的标准库包或第...阅读全文

2015-06-03 11:53 sevenyuan
阅读:23082 评论:1

golang中http协议实现

golang中http协议实现 写了一个爬虫,发现出现了socket泄露的情况。百度了一下发现是缺少了Response.Body.Close(),所以导致连接 没有被正常的关闭。也没有被gc回收。下面是文档中的说明 Callers should close resp.Body when done reading from it. If resp.Body is not closed, the Client's underlying RoundTripper (typically Transpor...阅读全文

2016-07-04 15:43 xinglong
阅读:5066 评论: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 强子哥哥
阅读:12487 评论:1

GoMock框架使用指南

序言 要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面三个测试框架: GoConvey GoStub GoMock 读者通过前面三篇文章的学习可以对框架GoConvey和GoStub优雅的组合使用了,本文将接着介绍第三个框架GoMock的使用方法,目的是使得读者掌握框架GoConvey + GoStub + GoMock组合使用的正确姿势,从而提高测试代码的质量。 GoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface...阅读全文

2017.06.24 23:40 _张晓龙_
阅读:17880 评论:2

Go 语言的优点,缺点和令人厌恶的设计

这是关于 「[Go是一门设计糟糕的编程语言 (Go is not good)](https://github.com/ksimka/go-is-not-good)」 系列的另一篇文章。Go 确实有一些很棒的特性,所以我在这篇文章中展示了它的优点。但是总体而言,当超过 API 或者网络服务器(这也是它的设计所在)的范畴,用 Go 处理商业领域的逻辑时,我感觉它用起来麻烦而且痛苦。就算在网络编程方面,Go 的设计和实现也存在诸多问题,这使它看上去简单实际则暗藏危险。 写这篇文章的动机是因为我最...阅读全文

2018-05-06 22:44:53 Donng
阅读:52797 评论:16

golang如何使用sarama访问kafka

https://www.jianshu.com/p/3102418e5a7d golang如何使用sarama访问kafka golang连接kafka有三种client认证方式: 无认证 TLS认证 SASL/PLAIN认证, (其他SASL/SCRAM, SASL/GSSAPI都不支持) 下面一个客户端代码例子访问kafka服务器,来发送和接受消息。 使用方式 命令行参数 $ ./kafkaclient -h Usage of ./client: -ca string CA Certific...阅读全文

2019.01.29 14:54 wz998
阅读:6701 评论:0

Go语言:"" 与 `` 包裹字符串的区别

"" 与 `` 包裹字符串的区别 解析: 使用 "" 包裹的字符串 会解析 字符串中的 转义符 使用 `` 包裹的字符串 不会解析 字符串中的 转义符 性能: 使用 "" 包裹的字符串 性能 比较慢 到 极慢(由 转义符 和 字符串的长度 决定) 使用 `` 包裹的字符串 性能 极快 说明: 字符串 实际上是 字符数组(学过 其他编程语言 的可能都知道,据我所知 GoLang 的书籍都 没讲过 或 没重点讲) 解析 会 遍历 整一个 字符串 (字符数组),寻找可以 解析 的 转义符,不管 原先字...阅读全文

2019.06.21 13:13* 海东总司
阅读:2518 评论:0

Gin(十):集成 Swagger

原文首发于 ISALND 你喜欢写文档吗? 我喜欢。 所以说文档成了开发心中的一个痛。尤其是使用 restful 接口,成了必须要写文档,否者前端同学根本不知道你写了什么。那么让我写文档,还不如杀了我呢!!! 接下来介绍一款神器 --- swagger ????什么是swagger Swagger 是一个 API 生成工具,可以生成文档。 Swagger 是通过编写 yaml 和 json 来实现文档化。并且可以进行测试等工作。 通过 swagger 可以方便的生成接口文档,方便前端进行查看和测...阅读全文

2019年07月30日 youngxhui
阅读:3065 评论:0

golang四舍五入、五舍六入

package main import ( "dog/util/val" "fmt" "log" "strconv" ) func main() { // 四舍五入 log.Println(strconv.FormatFloat(1.234567, 'f', 3, 64)) // 五舍六入 log.Println(val.Decimal(1.2345, 3)) log.Println(val.Decimal(1.2346, 3)) } func Decimal(value float64, bi...阅读全文

2019.08.28 10:23 不浪人
阅读:2270 评论:0

go-网络请求之限流

golang自身的net/http网络接口也很方便,但是复杂的业务就没有开源框架来的顺手,比如gin微服务框架 限流用在业务较多的服务中,每秒允许多少请求,延迟最长多少,允许同时多少IP在线等。 1,net/http,简单监听一下本地3050端口,限制只能允许一个IP接入,max=1 func main() { l, err := net.Listen("tcp", "192.168.100.8:3050") if err != nil { fmt.Println("list err") } d...阅读全文

2019-11-01 14:33:22 aside section._ 等
阅读:2235 评论:0