Go 学习之路:Println 与 Printf 的区别

Println 和Printf 都是fmt包中公共方法;在需要打印信息时常用的函数,那么二函数有什么区别呢? 附上代码 运行结果 结果可知 Printf : 可打印出格式化的字符串, Println 不行; 稍做修改下 结果 原因 看到源码内容,相信你大致明白两函数的区别了吧~; 总结一句话: pr ... »

Golang Context 详细介绍

Golang context 本文包含对context实现上的分析和使用方式,分析部分源码讲解比价多,可能会比较枯燥,读者可以直接跳过去阅读使用部分。 一、简介 作者所讲的context的包名称是: "golang.org/x/net/context" ,希望读者不要引用错误了。 在godoc中对c ... »

golang 中 string 转换 []byte 的一道笔试题

背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点。题目如下: 问以上代码的输出是什么。 分析 很容易可以看出 s 和 ps 代表同一个 string,b 和 pb 代表同一个 byte 的切片。关键在于 根据 "The Go Programming Language" 的 ... »

从零搭建基于golang的个人博客网站

"原文链接" : http://www.bugclosed.com/post/14 从零搭建个人博客网站需要包括云服务器(虚拟主机),域名,程序环境,博客程序等方面。 "本博客" 就是通过这几个环节建立起来的,下面总结梳理一下环节的具体过程。 云服务器 博客程序需要有一个服务器部署和运行,所以首先需 ... »

golang项目中使用条件编译

golang项目中使用条件编译 C语言中的条件编译 golang中没有类似C语言中条件编译的写法,比如在C代码中可以使用如下语法做一些条件编译,结合宏定义来使用可以实现诸如按需编译release和debug版本代码的需求 golang中的条件编译 golang支持两种条件编译的实现方式 build ... »

go redigo的简单操作

golang操作redis主要有两个库,go-redis和redigo。两者操作都比较简单,区别上redigo更像一个client执行各种操作都是通过Do函数去做的,redis-go对函数的封装更好,相比之下redigo操作redis显得有些繁琐。但是官方更推荐redigo,所以项目中我使用了red ... »

golang 常见疑惑总结

经常会有一些朋友问go语言的一些问题和疑惑,其实好多问题在官方文档和stackoverflow里都有详细的讲解,只要你肯花时间读一遍官方文档和Effective Go基本上都有找到答案。本文总结一下大家经常问到的一些问题,长期更新。 代码都在github上, 地址 https://github.co ... »

golang版本的文字云算法实现

golang版本的文字云算法实现 项目链接 "https://github.com/bangbaoshi/wordcloud" 效果图 测试步骤如下 通过以上三步即可在imgs目录中生成文字云图片(查看imgs/out.png) 目录介绍 1. boot目录包含测试用例 2. fonts目录包含若干 ... »

用go实现常用算法与数据结构——队列(queue)

queue 简介 队列是一种非常常见的数据结构,日常生活中也能经常看到。一个典型的队列如下图(图片来自 "segmentfault" ): 可以看出队列和我们日常生活中排队是基本一致的。都遵循 FIFO(First In First Out)的原则。 实现 队列可以使用链表或者数组实现,使用链表的优 ... »

Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper

Golang中操作数据库已经有现成的库"database/sql"可以用,但是"database/sql"只提供了最基础的操作接口; 对数据库中一张表的增删改查等操作,必须手动编写sql string,这通常都是一个写死的字符串(Hard-Code), 并且需要手动维护sql中字段与Golang中的 ... »

用golang实现常用算法与数据结构——跳跃表(Skip list)

背景 最近在学习 redis,看到redis中使用 了skip list。在网上搜索了一下发现用 golang 实现的 skip list 寥寥无几,性能和并发性也不是特别好,于是决定自己造一个并发安全的 skip list 轮子。代码在这里: https://github.com/AceDarkk ... »

Golang学习--平滑重启

在上一篇博客介绍TOML配置的时候,讲到了通过信号通知重载配置。我们在这一篇中介绍下如何的平滑重启server。 与重载配置相同的是我们也需要通过信号来通知server重启,但关键在于平滑重启,如果只是简单的重启,只需要kill掉,然后再拉起即可。平滑重启意味着server升级的时候可以不用停止业务 ... »

GPS服务端(上)-Socket服务端(golang)

从第一次写GPS的服务端到现在,已经过去了八年时光。一直是用.net修修改改,从自己写的socket服务,到suppersocket,都是勉强在坚持着,没有真正的稳定过。 最近一段时间,服务端又出了两个问题: 1、UDP服务:System.Net.Sockets.SocketException (0 ... »

用golang 实现一个代理池

背景 写爬虫的时候总会遇到爬取速度过快而被封IP的情况,这个时候就需要使用代理了。在https://github.com/henson/ProxyPool 的启发下,决定自己实现一个代理池。项目已经开源在github。 https://github.com/AceDarkkinght/GoProxy ... »

使用glide进行包管理

glide是golang的一款包管理工具,就像Java下的Maven(当然Maven的定位不只是包管理工具)。今天试用了一下,记录一下使用过程和遇到的一些坑。 环境 Windows 7,Goland,Go 1.8.4 安装 在Goland中打开File——Settings——Tools——Exter ... »

golang 详解defer

什么是defer defer用来声明一个延迟函数,把这个函数放入到一个调用链表上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是运行到最外层方法体的"}"时调用。我们经常用他来做一些资源的释放,比如关闭io操作 func doSomething(fileName stri ... »

golang调试工具Delve

Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试。 线上golang服务出现问题时,Devle是必不少的在线调试工具,如果使用docker,也可以把Devle打进docker镜像里,调试代码。 安装Devle ... »

Go语言内存管理(一)内存分配

Go语言内存管理(一)内存分配 golang作为一种“高级语言”,也提供了自己的内存管理机制。这样一方面可以简化编码的流程,降低因内存使用导致出现问题的频率(C语言使用者尤其是初学者应该深有体会),对程序猿友好。另一方面也可以减少内存相关系统调用,提升性能。 先了解下内存管理大致策略: 申请一块较大 ... »

golang变量作用域问题-避免使用全局变量

最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿。 变量作用域 全局变量的作用域是整个包,局部变量的作用域是该变量所在的花括号内,这是一个很基础的问题。我们通常会使用golang的一个语法糖 来给变量 ... »