go
文章平均质量分 73
tianlongtc
这个作者很懒,什么都没留下…
展开
-
【go】metrics基本使用
metrics 是什么?当我们需要为某个系统某个服务做监控、做统计,就需要用到Metrics五种 Metrics 类型Gauges :最简单的度量指标,只有一个简单的返回值,或者叫瞬时状态 Counters:Counter 就是计数器,Counter 只是用 Gauge 封装了 AtomicLong Meters:Meter度量一系列事件发生的速率(rate),例如TPS。Mete...转载 2018-07-22 20:38:31 · 11512 阅读 · 1 评论 -
go实现本地数据库
package mainimport ( "log" "net/http" "fmt" "strconv")func main() { db := database{"shoes": 50, "socks": 5} http.HandleFunc("/list", db.list) http.HandleFunc(&原创 2018-04-29 15:52:43 · 2250 阅读 · 0 评论 -
go实现并发爬虫
package mainimport ( "os" "fmt" "log" "net/http" "golang.org/x/net/html")func Extract(url string) ([]string, error) { resp, err := http.Get(url) if err != nil { return ...原创 2018-04-29 15:50:39 · 974 阅读 · 0 评论 -
使用mysql数据库与go进行交互
database/sqldatabase/sql是golang的标准库之一,它提供了一系列接口方法,用于访问关系数据库。它并不会提供数据库特有的方法,那些特有的方法交给数据库驱动去实现。database/sql库提供了一些type。这些类型对掌握它的用法非常重要。****DB**** 数据库对象。 sql.DB类型代表了数据库。和其他语言不一样,它并是数据库连接。golang中的连接来自内部实现的...转载 2018-04-28 01:18:53 · 1872 阅读 · 0 评论 -
ubuntu下载goalng-1.9
一.安装这里以安装golang1.9为例: 1.首先通过命令行直接安装sudo apt-get install golang-1.92.下载好之后,查看go的版本catik@catik-Aspire-V3-471:~$ go version go version go1.9.2 linux/amd64可以看得出,这里的版本是go1.9.2二.环境配置1.查看环境变量:catik@catik-Asp...转载 2018-05-10 19:55:52 · 163 阅读 · 0 评论 -
goji框架
GojiWhat is Goji?Goji is a HTTP request multiplexer, similar to net/http.ServeMux. It compares incoming requests to a list of registered Patterns, and dispatches to the Handler that corresponds to the...转载 2018-05-03 18:57:26 · 764 阅读 · 0 评论 -
golang 的channels 行为
简介当我第一次使用 Go 的 channels 工作的时候,我犯了一个错误,把 channels 考虑为一个数据结构。我把 channels 看作为 goroutines 之间提供自动同步访问的队列。这种结构上的理解导致我写了很多不好且结构复杂的并发代码。随着时间的推移,我认识到最好的方式是忘记 channels 是数据结构,转而关注它的行为。所以现在谈论到 channels,我只考虑一件事情:s...转载 2018-05-03 11:57:10 · 156 阅读 · 0 评论 -
go使用mongodb
何为MongoDB?简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象MongoDB (from hum...转载 2018-05-03 15:28:03 · 641 阅读 · 0 评论 -
go使用mysql数据库
1.下载并导入数据库驱动包官方不提供实现,先下载第三方的实现,点击这里查看各种各样的实现版本。这里选择了Go-MySQL-Driver这个实现。地址是:https://github.com/go-sql-driver/mysql/。然后按照里面的说明下载驱动包:$ go get github.com/go-sql-driver/mysql最后导入包即可:import "database/sql"...转载 2018-05-03 15:04:23 · 436 阅读 · 0 评论 -
go 并发的非阻塞缓存
本节中我们会做一个无阻塞的缓存,这种工具可以帮助我们来解决现实世界中并发程序出现但没有现成的库可以解决的问题。这个问题叫作缓存(memoizing)函数(译注:Memoization的定义: memoization 一词是Donald Michie 根据拉丁语memorandum杜撰的一个词。相应的动词、过去分词、ing形式有memoiz、memoized、memoizing.),也就是说,我们需...转载 2018-05-02 21:33:01 · 1202 阅读 · 0 评论 -
go 模板(template)的常用基本语法
模板在写动态页面的网站的时候,我们常常将不变的部分提出成为模板,可变部分通过后端程序的渲染来生成动态网页,golang提供了html/template包来支持模板渲染。这篇文章不讨论golang后端的模板读取及渲染方法,只讨论模板中嵌入变量,渲染变量、循环等一些基本用法。变量在golang渲染template的时候,可以接受一个interface{}类型的变量,我们在模板文件中可以读取变量内的值并...转载 2018-04-25 01:19:49 · 17729 阅读 · 0 评论 -
go实现ftp
package ftpimport ( "errors" "fmt" "io" "net" "os" "strconv" "strings")type Ftp struct { con net.Conn ip string}func NewFtp(ip string) (*Ftp, error) {原创 2018-04-29 15:53:36 · 996 阅读 · 0 评论 -
go实现github爬虫
package mainimport ( "time" "net/http" "fmt" "encoding/json" "github.com/urfave/cli" "os" "log" "flag" "bufio")const IssuesURL = "原创 2018-04-29 15:54:59 · 503 阅读 · 0 评论 -
go实现本地文件搜索引擎
// filelist.gopackage mainimport ( //"flag" "fmt" "os" "path/filepath" "strings")var ( ostype = "windows" // 获取系统类型)var listfile []string //获取文件列表func Listfunc(path st原创 2018-04-29 15:56:13 · 1496 阅读 · 0 评论 -
Golang标准库RPC实践及改进
转载自:http://daizuozhuo.github.io/golang-rpc-practice/ 一直用Golang标准库里的的RPC package来进行远程调用,简单好用. 但是随着任务数量的增大, 发现简单的像包里面的示例那样的代码出现了各种各样的问题,下面就把我踩过的一些坑记录一下吧. 首先是最初使用的文档里的版本,使用HTTP来发送请求.server.gofunc Li...转载 2018-07-22 15:38:40 · 901 阅读 · 0 评论 -
Go官方库RPC开发指南
Go官方提供了一个RPC库: net/rpc。包rpc提供了通过网络访问一个对象的方法的能力。服务器需要注册对象, 通过对象的类型名暴露这个服务。注册后这个对象的输出方法就可以远程调用,这个库封装了底层传输的细节,包括序列化。服务器可以注册多个不同类型的对象,但是注册相同类型的多个对象的时候回出错。我最近写了一本电子书: Go RPC开发指南,介绍Go RPC开发的相关技术,这是其中的一章,专...转载 2018-07-22 02:48:37 · 697 阅读 · 0 评论 -
Golang学习 - sync 包
------------------------------------------------------------临时对象池 Pool 用于存储临时对象,它将使用完毕的对象存入对象池中,在需要的时候取出来重复使用,目的是为了避免重复创建相同的对象造成 GC 负担过重。其中存放的临时对象随时可能被 GC 回收掉(如果该对象不再被其它变量引用)。 从 Pool 中取出对象时,如...转载 2018-07-22 01:48:23 · 176 阅读 · 0 评论 -
binary.Write 小坑一个兼论go的错误处理哲学
有如下go代码:const ( foo = 123)buffer := new(bytes.Buffer)binary.Write(buffer, binary.BigEndian, foo)fmt.Println(buffer.Len())123456输出结果是0,foo没有写入到buffer中。原因在于,binary包的Write内部调用了intDataSize函数获取foo的长度:...转载 2018-07-10 20:11:14 · 664 阅读 · 0 评论 -
【go】atmoic.Value
源代码分析 atomic.Value分为两个操作,通过Store()存储Value,通过Load()来读取Value的值. 源码我就不贴了,贴一个关键的struct: type ifaceWords struct { typ unsafe.Pointer data unsafe.Pointer} ifaceWords结构体是实际存储我们的Value值的...转载 2018-07-16 21:11:44 · 692 阅读 · 0 评论 -
Golang包管理工具之govendor的使用
本文个人博客地址为:http://www.huweihuang.com/article/golang/govendor-usage/ 本文个人博客地址为:https://huweihuang.net/article/golang/govendor-usage/ 更多golang包管理工具参考 golang包管理工具之glide的使用1. govendor简介golang工程的依赖包经常使用go ...转载 2018-07-03 20:25:24 · 745 阅读 · 1 评论 -
sync/atomic 库使用小结
sync/atomic 库提供了原子操作的支持,原子操作直接有底层CPU硬件支持,因而一般要比基于操作系统API的锁方式效率高些。本文对 sync/atomic 中的基本操作进行一个简单的介绍。原子增值用于对变量值进行原子增操作,并返回增加后的值。e.g. var sum uint32 = 100 var wg sync.WaitGroup for i := 0; i &l...原创 2018-05-23 17:25:31 · 863 阅读 · 0 评论 -
go并发爬虫
说明:最大20线程,搜索深度不大于3的网页,并打印出来。当搜索的不是网页的时候,存在bug,还在学习,希望有大佬告知怎么解决。package mainimport ( "fmt" "log" "net/http" "golang.org/x/net/html")type Link struct{ link string dep int}func...原创 2018-04-29 18:51:24 · 589 阅读 · 0 评论 -
go实现命令行拷贝文件
package mainimport ( "flag" "fmt" "bufio" "os" "strings" "io")func FileExists(dst string)bool{ _,err := os.Stat(dst); return err == nil || os.IsExist(err);}func co原创 2018-04-29 15:58:28 · 578 阅读 · 0 评论 -
go使用cli实现命令行多指令操作
前言对于一名初学者来说,想要尽快熟悉 Go 语言特性,所以以操作式的学习方法为主,比如编写一个简单的数学计算器,读取命令行参数,进行数学运算。本文讲述使用三种方式讲述 Go 语言如何接受命令行参数,并完成一个简单的数学计算,为演示方便,最后的命令行结果大概是这样的:# input ./calc add 1 2# output3# input./calc sub 1 2# out-1...转载 2018-04-25 00:24:48 · 3284 阅读 · 0 评论 -
利用cli.go来写命令行应用
定义命令和子命令下面是一个例子:package mainimport ( "fmt" "os" "github.com/codegangsta/cli")func main() { app := cli.NewApp() app.Name = "jasperapp" app.Usage = "sample command-line app...转载 2018-04-24 23:58:26 · 355 阅读 · 0 评论 -
go使用json
JavaScript对象表示法(JSON)是一种用于发送和接收结构化信息的标准协议。在类似的协议中,JSON并不是唯一的一个标准协议。 XML(§7.14)、ASN.1和Google的Protocol Buffers都是类似的协议,并且有各自的特色,但是由于简洁性、可读性和流行程度等原因,JSON是应用最广泛的一个。Go语言对于这些标准格式的编码和解码都有良好的支持,由标准库中的encoding/...转载 2018-04-24 18:48:32 · 884 阅读 · 0 评论 -
rabbitmq 客户端golang实战
rabbitmq消息模式rabbitmq中进行消息控制的组建可以分为以下几部分:exchange:rabbitmq中的路由部件,控制消息的转发路径;queue:rabbitmq的消息队列,可以有多个消费者从队列中读取消息;consumer:消息的消费者;rabbitmq在使用过程中可以单独使用queue进行消息传递(例如celery就可以使用单个queue进行多对多的消息传递),也利用exchan...转载 2018-05-02 11:36:56 · 5751 阅读 · 0 评论 -
写go语言的坑
我有一个习惯,那就是随时记录下编程过程中遇到的问题(包括问题现场、问题起因以及对问题的分析),并喜欢阶段性的对一段时间内的编码过程的得与失进行回顾和总结。内容可以包括:对编程语法的新认知、遇坑填坑的经历、一些让自己豁然开朗的小tip/小实践等。记录和总结的多了,感觉有价值的,就成文发在博客上的;一些小的点,或是还没有想清楚的事情,或思路没法结构化统一的,就放在资料库里备用。“写Go代码时遇到的那些...转载 2018-05-02 11:03:24 · 7609 阅读 · 0 评论 -
go socket编程(详细)
Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现...转载 2018-05-02 10:57:25 · 30584 阅读 · 4 评论 -
c+ socket编程
我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的。本文的主要内容如下:1、网络中进程之间如何通信?2、Socket是什么?3、socket的基...转载 2018-05-02 10:46:09 · 3163 阅读 · 0 评论 -
go socket编程
8.1 Socket编程在很多底层网络应用开发者的眼里一切编程都是Socket,话虽然有点夸张,但却也几乎如此了,现在的网络编程几乎都是用Socket来编程。你想过这些情景么?我们每天打开浏览器浏览网页时,浏览器进程怎么和Web服务器进行通信的呢?当你用QQ聊天时,QQ进程怎么和服务器或者是你的好友所在的QQ进程进行通信的呢?当你打开PPstream观看视频时,PPstream进程如何与视频服务器...转载 2018-05-02 10:44:58 · 234 阅读 · 0 评论 -
go详解strings包
// Count 计算字符串 sep 在 s 中的非重叠个数// 如果 sep 为空字符串,则返回 s 中的字符(非字节)个数 + 1// 使用 Rabin-Karp 算法实现[html] view plain copyfunc Count(s, sep string) int func main() { s := "Hello,世界!!!!!" n := strings.Count(s...转载 2018-04-30 13:12:07 · 473 阅读 · 0 评论 -
十条有用的 Go 技术
这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指:某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的一些很微小,但对于许多事情...转载 2018-04-30 13:19:59 · 167 阅读 · 0 评论 -
go详解bufio包
// bufio 包实现了带缓存的 I/O 操作// 它封装一个 io.Reader 或 io.Writer 对象// 使其具有缓存和一些文本读写功能------------------------------------------------------------// bufio.go------------------------------------------------------...转载 2018-04-30 12:18:55 · 3050 阅读 · 0 评论 -
go使用makefile
使用 Golang 已经有一阵了,在 Golang 的开发过程中,我已经习惯于不断重复地手动执行 go build 和 go test 这两个命令. 不过,现在我已经摆脱了这个习惯。如果只用到了不带参数的简单命令,直接这么操作可能并不可怕。但是在一些复杂的任务中,如果依旧是手动执行 go build 和 go test ,就可能会成为一个让人头疼的事情。我们可以通过其他方式解决这个问题。比如,可...转载 2018-04-24 18:55:10 · 3774 阅读 · 0 评论 -
使用 sync.ErrGroup 实现并发搜索文件
Go 的一个很重要的的特性就是其原生的并发,像 channel 和 goroutines 这样的利器。但是对于一个新手来说 goroutines 这个概念可能比较陌生。Go 团队发布的第一个 goroutines 的管理工具是 sync.WaitGroup,这个工具允许你创建 WaitGroup 去等待一定数量的 goroutines 执行完成。这里有个例子:var wg sync.WaitGro...转载 2018-04-22 13:24:56 · 849 阅读 · 0 评论 -
用200行Go代码写一个自己的区块链!
区块链是目前最热门的话题,广大读者都听说过比特币,或许还有智能合约,相信大家都非常想了解这一切是如何工作的。这篇文章就是帮助你使用 Go 语言来实现一个简单的区块链,用不到 200 行代码来揭示区块链的原理!高可用架构也会持续推出更多区块链方面文章,欢迎点击上方蓝色『高可用架构』关注。“用不到200行 Go 代码就能实现一个自己的区块链!” 听起来有意思吗?有什么能比开发一个自己的区块链更好的学习...转载 2018-04-20 14:12:31 · 336 阅读 · 0 评论 -
go time包
定时器在time包中有两个函数可以帮助我们初始化time.Timertime.Newtimer函数初始化一个到期时间据此时的间隔为3小时30分的定时器t := time.Newtimer(3*time.Hour + 30*time.Minute)注意,这里的变量t是*time.NewTimer类型的,这个指针类型的方法集合包含两个方法Rest用于重置定时器该方法返回一个bool类型的值Stop用...原创 2018-04-22 10:37:49 · 173 阅读 · 0 评论 -
go net/http包
http客户端import “net/http”http包提供了HTTP客户端和服务端的实现。Get、Head、Post和PostForm函数发出HTTP/ HTTPS请求。package mainimport ( "fmt" "io/ioutil" "net/http")func main() { response, err := http.Get("ht...原创 2018-04-22 10:38:46 · 2643 阅读 · 0 评论 -
go 输入输出流(bufio)
bufio 包实现了缓存IO。它包装了 io.Reader 和 io.Writer 对象,创建了另外的Reader和Writer对象,它们也实现了io.Reader和io.Writer接口,不过它们是有缓存的。该包同时为文本I/O提供了一些便利操作。1.1. 1.4.1 Reader 类型和方法bufio.Reader 结构包装了一个 io.Reader 对象,提供缓存功能,同时实现了 io.Re...转载 2018-05-02 14:29:33 · 3707 阅读 · 0 评论