会员
周边
众包
新闻
博问
闪存
赞助商
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
张伯雨
Powered by
博客园
博客园
|
首页
|
新随笔
|
联系
|
订阅
|
管理
2017年8月30日
理解Go Interface
摘要: 理解Go Interface1 概述Go语言中的接口很特别,而且提供了难以置信的一系列灵活性和抽象性。接口是一个自定义类型,它是一组方法的集合,要有方法为接口类型就被认为是该接口。从定义上来看,接口有两个特点:接口本质是一种自定义类型,因此不要将Go语言中的接口简单理解为C++/Java中的接口,后者仅用于声明方法签名。接口是一种特殊的自定义类型,其中没有数据成员,只有方法(也可以为空)。接口是完...
阅读全文
posted @ 2017-08-30 14:31 张伯雨
阅读(821)
评论(0)
推荐(0)
编辑
深入讨论channel timeout
摘要: 深入讨论channel timeoutGo 语言的 channel 本身是不支持 timeout 的,所以一般实现 channel 的读写超时都采用 select,如下:select { case <-c: case <-time.After(time.Second): } 这两天在写码的过程中突然对这样实现 channel 超时产生了怀疑,这种方式真的好吗?于是我写了这样一个测试程序:packa...
阅读全文
posted @ 2017-08-30 14:29 张伯雨
阅读(714)
评论(0)
推荐(0)
编辑
fasthttp中的协程池实现
摘要: fasthttp中的协程池实现协程池可以控制并行度,复用协程。fasthttp 比 net/http 效率高很多倍的重要原因,就是利用了协程池。实现并不复杂,我们可以参考他的设计,写出高性能的应用。入口// server.go func (s *Server) Serve(ln net.Listener) error { var lastOverflowErrorTime time.Ti...
阅读全文
posted @ 2017-08-30 14:28 张伯雨
阅读(834)
评论(0)
推荐(0)
编辑
Golang 知识点总结
摘要: Golang 知识点总结目录 [−]各种类型复制的时候的花费可使用内建函数的类型 (len、cap、close、delete、make)内建容器类型的值比较组合类型T{...}的值比较零值是nil的类型编译时被执行的函数不能被寻址的值不支持比较的类型可命名的源代码元素命名的源代码元素可以使用 ()分组声明可以在函数内外声明的源代码元素可以返回一个可选bool返回值的表达式使用channel机制永远...
阅读全文
posted @ 2017-08-30 14:10 张伯雨
阅读(250)
评论(0)
推荐(0)
编辑
高级编码和解码技术
摘要: Go 的标准库包含了一些很不错的编码和解码包,里面涵盖了大量的编码方案。一切数据,不管是CSV,XML,JSON,还是 gob —— 一个 Go 特定的编码格式,都涵盖在内,并且,这些包都非常容易上手使用。 事实上,它们中的大多数都不需要再添加任何代码,你只需插入数据,它就会输出编码后的数据。不过,并不是所有的应用程序都乐于处理这种到 JSON 展现的一对一映射。Struct 标记可以涵盖一些场景...
阅读全文
posted @ 2017-08-30 14:09 张伯雨
阅读(635)
评论(0)
推荐(0)
编辑
go源文件中是否有main函数
摘要: import ( "go/parser""go/token" "go/ast" ) func HasMain(file string) (bool, error) { fset := token.NewFileSet() f, err := parser.ParseFile(fset, file, nil, 0)if err != nil {return fal...
阅读全文
posted @ 2017-08-30 14:08 张伯雨
阅读(499)
评论(0)
推荐(0)
编辑
Golang 通用连接池库 Golang-Pool
摘要: Golang 实现的连接池功能:* 连接池中连接类型为interface{},使得更加通用* 链接的最大空闲时间,超时的链接将关闭丢弃,可避免空闲时链接自动失效问题* 使用channel处理池中的链接,高效基本用法//factory 创建连接的方法 factory := func() (interface{}, error) { return net.Dial("tcp", "127.0.0.1:...
阅读全文
posted @ 2017-08-30 14:07 张伯雨
阅读(2601)
评论(0)
推荐(0)
编辑
golang 并发模式笔记
摘要: 1、并发并不是并行,前者是优先对时间片的抢占,后者是真多核。 go中多线程时直接要求并行的方法是:亦不可滥用,CPU密集型,并发度很高的场景适用。 2、go起的协程 3、 function that returns a chanel fan-in 二次缓冲 send a chanel on a chanel 利用chanel饥饿阻塞原理实现有序 select 利用select的ok随机执行性,可以...
阅读全文
posted @ 2017-08-30 14:07 张伯雨
阅读(476)
评论(0)
推荐(0)
编辑
如果裸写一个goroutine pool
摘要: 引言在上文中,我说到golang的原生http server处理client的connection的时候,每个connection起一个goroutine,这是一个相当粗暴的方法。为了感受更深一点,我们来看一下go的源码。先定义一个最简单的http server如下。12345678func myHandler(w http.ResponseWriter, r *http.Request) { ...
阅读全文
posted @ 2017-08-30 14:06 张伯雨
阅读(463)
评论(0)
推荐(0)
编辑
fasthttp 的 goroutine pool 实现探究
摘要: 引言fasthttp是一个非常优秀的web server框架,号称比官方的net/http快10倍以上。fasthttp用了很多黑魔法。俗话说,源码面前,了无秘密,我们今天通过源码来看一看她的goroutine pool的实现。热身fasthttp写server和原生的net/http写法上基本没有区别,这里就不举例子。直接找到入口函数,在根目录下的server.go文件中,我们从函数Listen...
阅读全文
posted @ 2017-08-30 14:04 张伯雨
阅读(855)
评论(0)
推荐(0)
编辑
golang实现权重轮询调度算法
摘要: package main import ( "fmt" "time" ) var slaveDns = map[int]map[string]interface{}{ 0: {"connectstring": "root@tcp(172.16.0.164:3306)/shiqu_tools?charset=utf8", ...
阅读全文
posted @ 2017-08-30 14:03 张伯雨
阅读(1340)
评论(0)
推荐(0)
编辑
获取本机ip
摘要: func GetLocalIP() { host, _ := os.Hostname() addrs, _ := net.LookupIP(host) for _, addr := range addrs { if ipv4 := addr.To4(); ipv4 != nil { fmt.Println("IPv4: ", ipv4) ...
阅读全文
posted @ 2017-08-30 14:02 张伯雨
阅读(262)
评论(0)
推荐(0)
编辑
golang学习资料
摘要: http://yougg.github.io/static/gonote/GolangStudy.html
阅读全文
posted @ 2017-08-30 14:02 张伯雨
阅读(197)
评论(0)
推荐(0)
编辑
dnscache --源码笔记
摘要: //最新版本参见https://github.com/karlseguin/dnscache地址 或者 https://github.com/netroby/dnscache package dnscache// Package dnscache caches DNS lookupsimport ( "net" "sync" "time")//一个域名可能对应多个iptype Reso...
阅读全文
posted @ 2017-08-30 14:01 张伯雨
阅读(542)
评论(0)
推荐(0)
编辑
xsrftoken--源码笔记
摘要: // Package xsrftoken provides methods for generating and validating secure XSRF tokens.package xsrftoken // import "golang.org/x/net/xsrftoken"import ( "crypto/hmac" "crypto/sha1" "crypto/sub...
阅读全文
posted @ 2017-08-30 13:59 张伯雨
阅读(1302)
评论(0)
推荐(0)
编辑
forwardport--源码笔记--注释
摘要: package mainimport ( "encoding/json" "flag" "fmt" "io" "log" "net" "net/http" "os" "os/signal" "runtime" "sync" "syscall" "time")var restApiServer = flag.String(...
阅读全文
posted @ 2017-08-30 13:56 张伯雨
阅读(463)
评论(0)
推荐(0)
编辑
golang 通过exec Command启动的进程如何关闭的解决办法 以及隐藏黑色窗口
摘要: golang 通过exec Command启动的进程如何关闭的解决办法在用exec包调用的其他进程后如何关闭结束,可以使用context包的机制进行管理,context包的使用详见:https://godoc.org/contextexec.CommandContext方发实现了context,通过context可以对exec启动的进程结束。隐藏程序自身黑窗口的方法:Go build -ldfla...
阅读全文
posted @ 2017-08-30 13:54 张伯雨
阅读(2475)
评论(0)
推荐(0)
编辑
nsq理解
摘要: 核心概念在讨论NSQ如何在实践中使用前,先理解NSQ队列的架构原理是非常值得的。它的设计很简单,可以通过几个核心概念来理解。Topic ——一个topic就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建topic。Channels ——channel组与消费者相关,是消费者之间的负载均衡,channel在某种意义上来说是一个“队列”。每当一个发布者发送一条消息到一个topic,消息会被...
阅读全文
posted @ 2017-08-30 13:52 张伯雨
阅读(15573)
评论(0)
推荐(0)
编辑
Go缓存DNS
摘要: Go里面的DNSclient没有带任何的缓存,语言层面没有任何的缓存,但是我们可以通过下面这样的代码来这样当我们调用http.Client的时候就会采用这个缓存的ip了,里面用到的dnscache是这个包https://github.com/viki-org/dnscache
阅读全文
posted @ 2017-08-30 13:51 张伯雨
阅读(1169)
评论(0)
推荐(0)
编辑
如何使用Docker部署一个Go Web应用程序
摘要: 熟悉Docker如何提升你在构建、测试并部署Go Web应用程序的方式,并且理解如何使用Semaphore来持续部署。简介大多数情况下Go应用程序被编译成单个二进制文件,web应用程序则会包括模版和配置文件。而当一个项目中有很多文件的时候,由于很多文件没有同步就会导致错误的发生并且产生很多的问题。在本教程中,你将学习如何使用Docker部署一个Go web应用程序,并且认识到Docker将如何改进...
阅读全文
posted @ 2017-08-30 13:50 张伯雨
阅读(6109)
评论(0)
推荐(0)
编辑