GoGoGo

收录了 13 篇文章 · 2 人关注

  • 120
    调试一个邪恶的 Go 运行时 bug

    ## 序言 我是 `Prometheus` 和 `Grafana` 的忠实粉丝。作为一个前 `Google` 公司 SRE, 我一直以来都知道良好的监控的重要性, `Prometheus` 和 `Grafana` 的组合是我多年的最爱。我用他们来监控我的个人服务器(黑盒和白盒都有), `Euskal Encounter` 内外部事件以及我服务的专业客户。`Prometheusa` 让编写定制的数据导出器变得非常简单, 而且你能够找到很多现成的满足你要求的导出器。比如说,我们使用 `sql_...

  • golang gc 优化思路以及实例分析

    一个即将上线的go 写的高频服务,压测的时候发现 gc 特别高,高到10%-15% 左右了,本文记录下优化 gc 的过程和和思路。线上环境1.10. 首先,查看gc 是否有异常,我们可以使用 gctrace 跟踪实时的gc 。执行下面命令可以看到gc 的实时信息。 GODEBUG=gctrace=1 go run cmd/agent_bin.go 输出结果如下: gc 45 @37.801s 11%: 0.19+627+0.29 ms clock, 0.38+424/621/0+0.59 ms ...

  • golang下在终端显示字体颜色及闪烁、下划线效果的小工具

    在终端下打印不同颜色的字体,具体说明见:http://blog.csdn.net/gxut555/article/details/7913591 自己用golang实现一个,除了在MAC下显示不出效果来,其他端上还算正常了,效果所示: 代码如下(见:https://github.com/liuyongshuai/goColorTerm): ``` /* * @author Liu Yongshuai<liuyongshuai@hotmail.com> * @...

  • 120
    仅需简单 5 步,给你的 Golang 程序添加 GUI (使用 Electron )

    创建一个 Golang app 是一件简单又轻松的事情,但是有时候你想给你的应用锦上添花:创建一个 GUI! 在本篇文章中,我将通过使用 astilectron 工具中的 bootstrap 以及 bundler 给一个简单的 Golang 程序添加 GUI。 我们的带有 GUI 的 Golang app 能够打开一个文件夹并且展示其中的内容。 你可以在这里找到完成后的 [代码](https://github.com/asticode/go-astilectron-demo) ...

  • Go 终极指南:编写一个 Go 工具

    我之前编写过一个叫 **gomodifytags** 的工具,它使我的生活变得很轻松。它会根据字段名称自动填充结构体标签字段。让我来展示一下它的功能: ![在 vim-go 中使用 gomodifytags 的一个示例](http://upload-images.jianshu.io/upload_images/2192094-880be71ebd4d9610.gif?imageMogr2/auto-orient/strip) 使用这样的工具可以很**容易管理**结构体的多个字段。该...

  • golang底层实现资料

    内存,内存中的变量和指针 http://golangtutorials.blogspot.jp/2011/06/memory-variables-in-memory-and-pointers.html   How does reflection work internally? https://groups.google.com/forum/?fromgroups#!topic/golang-nuts/NYs7L5UvSHo 很好的一篇讲runtime的文章(必看) http://p...

  • Go 语言标准库中最常用的标识符是什么?

    这篇文章是来自最新 [justforfunc](http://justforfunc.com/) 中同标题的一段。这个程序的[代码](https://github.com/campoy/justforfunc/blob/master/24-go-scanner/main.go)可以在 [justforfunc 仓库](https://github.com/campoy/justforfunc) 中找到。 ### 问题陈述 想象一下,对于下面的代码段,你如何将其中所有的标识符都提取出来...

  • 120
    Go 函数 -- Go 语言新手的带图教程

    简单易懂的 Go 函数带图教程 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-funcs/funcs.png) **注意:**该教程仅介绍 Go 函数,不包括:可变参数、延迟函数、外部函数、方法、HTTP、封包编码等。 * * * ### 什么是函数? 函数是一个独立的,可以被重用的,可以一次又一次运行的代码块。函数可以有输入参数,也可以有返回值输出。 ### 为...

  • 通过 go/parser 理解 Go

    这篇文章所讲内容和 [episode 25 of justforfunc](https://www.youtube.com/watch?v=YRWCa84pykM) 是相同的。 ## justforfunc 前情提要 我们在[上一篇文章](https://studygolang.com/articles/12324)中使用 `go/scanner` 找出了标准库中最常用的标识符。 > 这个标识符就是 v 为了能获取到更有价值的信息,我们只考虑大于等于三个字符的标识符。不出...

  • 为 Go Web-apps 编写 Dockerfiles 的终极指南

    你或许想在 Docker 中使用 Go,原因有: 1. 如果你想在 Kubernetes 上运行,打包为镜像是必须的(就像我一样) 2. 你不得不在同一台机器上运行不同的 Go 版本 3. 开发和生产都需要精确的、可复制的、可共享的和确定的环境 4. 你需要快速和简单的方式来构建和部署编译好的二进制文件 5. 你想快速开始(任何安装了 Docker 的人都可以直接开始编写代码而不需要设置其他依赖或 `GOPATH` 环境变量) 恭喜你,你来对地方了。 我们将逐步构建一个...

  • IO模型

    一:IO简介Unix(like)中,一切皆文件。Socket、FIFO、管道、终端都是文件,一切都是流。在信息交换的过程中,实际都是对这些流进行的数据收发操作,简称I/O操作(系统调用read、write)。而流有很多,于是就用文件描述符(fd)来区分具体是哪个流。For example,我们创建了一个socket,系统调用会返回一个fd,对socket的任何操作都是对这个fd的操作(隐隐包含着一种分层与抽象的思想)。 二:同步异步、阻塞非阻塞同步与异步是一种通信机制,涉及到调用方和被调用方(针...

  • Go 语言之美

    最近,我在做兴趣项目的时候开始探索 Go 语言,被 Go 语言的美征服了。 Go语言的美在于它在灵活使用(常见于一些动态,解释型语言)和安全性能(常见于一些静态,编译语言)之间有一个很好的平衡。 除此之外,还有另外的两个功能让我觉得 Go 语言非常适合现代的软件开发。我会在之下优势的部分阐述。 其中之一是 **对语言并发性的一流支持**(通过 `goroutine`,和 `channels` 实现,下面解释)。 并发,通过其设计,使您能够有效地使用您的 CPU 马力。 即使您的...

  • Go 内存逃逸详细分析

    Slice 怪异现象分析实例 原贴地址:https://gocn.io/question/1852 package main import ( "fmt" ) func main(){ s := []byte("") s1 := append(s, 'a') s2 := append(s, 'b') // 如果有此行,打印的结果是 a b,否则打印的结果是b b // fmt.Println(s1, "===", s2) fmt.Println(string(s1), string(s2)) }...