go语言记log:log,logger

介绍一下golang如何记log。 log首先是golang自带的package log。使用godoc查看,godoc -http=:8001,然后就可以在localhost:8001/pkg/log就可以查看了。 最重要的是SetOutput这个函数,原型是func SetOutput(w io.Writer),决定了log应该输出到什么地方,默认是标准输出。下面是把log输出到文件的一个简单代码示例。12345678910111213141516package mainimport ( "...阅读全文

阅读:3472 评论:0

MongoDB和Redis-NoSQL数据库-文档型-内存型

1NoSQL简述CAP(Consistency,Availabiity,Partitiontolerance)理论告诉我们,一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。关系型数据库通过把更新操作写到事务型日志里实现了部分耐用性,但带来的是写性能的下降。MongoDB等NoSQL数据库背后蕴涵的哲学是不同的平台应该使用不同类型的数据库,MongoDB通过降低一些特性来达到性能的提高,这在很多大型站点中是可行的。因为MongoDB是非原子性的,所以如果如果应用...阅读全文

2016-05-03 15:25 HANYI7399
阅读:3215 评论:0

Golang Gob编码

gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。 有一点需要注意, 发送方的结构和接受方的结构并不需要完全一致 结构体中缺省的字段将不会被发送。而且在接收方,并不需要所有的字段都要有对应的结构...阅读全文

阅读:7187 评论:0

原 大话设计模式(golang) 五、工厂方法模式

模式特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。 程序实例:计算器。 package main import ( "fmt" ) type Operation struct { a float64 b float64 } type OperationI interface { GetResult() float64 SetA(float64) SetB(float64) } func (op *Operation) SetA(a float64)...阅读全文

阅读:2304 评论:0

golang中使用protobuf

安装 goprotobuf 1.从 https://github.com/google/protobuf/releases 获取 Protobuf 编译器 protoc(可下载到 Windows 下的二进制版本 wget https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz tar zxvf protobuf-2.6.1.tar.gz cd protobuf-2.6.1 ./config...阅读全文

2016-09-30 18:14 lr982330245
阅读:2684 评论:0

go语言JSON处理

JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON与XML最大的不同在于XML是一个完整的标记语言,而JSON不是。JSON由于比XML更小、更快,更易解析,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。目前我们看到很多的开放平台,基本上都是采用了JSON作为他们的数据交...阅读全文

阅读:1281 评论:0

利用mongo的findAndModify原子性操作实现auto increment ID

实际情况 默认情况下,mongo使用_id自动生成uniq id,而且在mongo自带的命令里,无法指定一个自增字段。自增字段在多线程时必须是原子性的,这在大数据情况下很难实现伸缩性(scalability)。 Generally in MongoDB, you would not use an auto-increment pattern forthe _id field, or any field, because it does not scale for databaseswith la...阅读全文

2016年04月28日发布 flybywind
阅读:1339 评论:0

golang 内存分析/动态追踪

golang pprof 当你的golang程序在运行过程中消耗了超出你理解的内存时,你就需要搞明白,到底是 程序中哪些代码导致了这些内存消耗。此时golang编译好的程序对你来说是个黑盒,该 如何搞清其中的内存使用呢?幸好golang已经内置了一些机制来帮助我们进行分析和追 踪。 此时,通常我们可以采用golang的pprof来帮助我们分析golang进程的内存使用。 pprof 实例 通常我们采用http api来将pprof信息暴露出来以供分析,我们可以采用net/http/pprof 这...阅读全文

阅读:14978 评论:0

Golang unsafe包使用笔记

Golang unsafe包使用笔记 unsafe包简介 unsafe包提供了访问底层内存的方法。是用unsafe函数可以提高访问对象的速度。 应用场景 通常用于对大数组的遍历。 访问数组 package main import ( "fmt" "unsafe" ) func main() { array := []int{1, 2, 3} base := uintptr(unsafe.Pointer(&array[0])) size := unsafe.Sizeof(array[0]) ptr...阅读全文

阅读:1766 评论:0

Golang动手写一个Http Proxy

本文主要使用Golang实现一个可用但不够标准,支持basic authentication的http代理服务。 为何说不够标准,在HTTP/1.1 RFC中,有些关于代理实现标准的条目在本文中不考虑。 Http Proxy是如何代理我们的请求 Http 请求的代理如下图,Http Proxy只需要将接收到的请求转发给服务器,然后把服务器的响应,转发给客户端即可。 Https 请求的代理如下图,客户端首先需要发送一个Http CONNECT请求到Http Proxy,Http Proxy建立一条...阅读全文

阅读:10442 评论:0

golang 性能测试pprof

植入: 在main包中 import _ "net/http/pprof" 在main函数中添加 go func() { log.Println(http.ListenAndServe("0.0.0.0:6060", nil)) }() 就这样两步就完成了pprof植入 分析: go tool pprof http://localhost:6060/debug/pprof/heap 查看堆栈 自动弹出网页展示svg图,如果 报错:Failed to execute dot. Is Graphvi...阅读全文

2017-09-18 10:27 coder-886
阅读:4240 评论:1

Golang单例模式

单例模式,是一种常用的软件设计模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。 1. 懒汉模式(Lazy Loading) 懒汉模式是开源项目中使用最多的一种,最大的缺点是非线程安全的 type singleton struct { } // private var instance *singleton // public func GetInstance() *singleton {...阅读全文

2017.10.13 15:24* iCaptain
阅读:4135 评论:0

golang管理http代理

说明 由于使用go的自带的net/http库并结合http代理使用时会遇到too many open files和too many open connections这样的错误,导致无法创建新的连接,其原因是没有释放已用过的连接,本文只是用来总结解决这个问题的设置 代码 组装http请求时设置访问完成时自动关闭连接,这样就不会让服务器和客户端一直保持连接,从而造成资源耗光了 http_requ, _ := http.NewRequest(req.Method, dest_url, req.Body...阅读全文

2017-11-01 11:03:09 能东棍
阅读:3611 评论:0

Go 原子操作

> > 本文讲解 golang 中 sync.atomic 的常见操作 atomic 提供的原子操作能够确保任一时刻只有一个goroutine对变量进行操作,善用 atomic 能够避免程序中出现大量的锁操作。 atomic常见操作有: * 增减 * 载入 * 比较并交换 * 交换 * 存储 下面将分别介绍这些操作。 ---- 增减操作 ---- atomic 包中提供了如下以Add为前缀的增减操作: - func AddInt32(addr *int32, delta int3...阅读全文

阅读:3256 评论:1

Golang 微框架 Gin 简介

所谓框架 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫。golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架。既然构造框架的门...阅读全文

2017-12-04 00:03:06 mickelfeng
阅读:48525 评论:1

用 Go 写一个服务容器( Service Container )

我最近一直在做一个相当大的 API 项目,里面包括很多路由规则( routes )、服务接口( services )和处理函数( handlers )等。首先,我注意到 `main.go` 文件的启动过程开始越来越臃肿。 为了避免设置全局的服务接口,我使用共享结构体( struct )将服务接口与处理函数绑定在一起。举个例子: main.go ```go package main func main() { r := gin.Default() ...阅读全文

2017-12-10 21:48:33 jzhongming
阅读:4801 评论:6

Golang 网络爬虫框架gocolly/colly 一

Golang 网络爬虫框架gocolly/colly 一 gocolly是用go实现的网络爬虫框架,目前在github上具有3400+星,名列go版爬虫程序榜首。gocolly快速优雅,在单核上每秒可以发起1K以上请求;以回调函数的形式提供了一组接口,可以实现任意类型的爬虫;依赖goquery库可以像jquery一样选择web元素。 gocolly的官方网站是http://go-colly.org/,提供了详细的文档和示例代码。安装colly: go get -u github.com/goco...阅读全文

2017-12-29 19:57 majianguo
阅读:30792 评论:1

gf框架之gvalid - 强大灵活的数据校验/表单校验模块

gf提供了非常强大易用的数据校验功能,通过gvalid包提供,封装了40种常用的校验规则,支持单数据多规则校验、多数据多规则批量校验、自定义错误信息、自定义正则校验等特性。由于gf是模块化、低耦合设计,gvalid包也可以在项目中单独引入使用。 使用方式: ```go import "gitee.com/johng/gf/g/util/gvalid" ``` ### 校验规则 40种常用的校验规则: required 格式:req...阅读全文

阅读:3633 评论:0

实现支持批量 ping 的golang 库包

一个监控项目有个需求,会对一批域名进行探测,这里包括,丢包率,http 响应时间,探测频率大概时间是2min 一个周期。这里的域名大概有几百个,后期可能上千。由于是golang 写的调度和agent, 所以,这里探测丢包率是一个有意思的问题。由于目前git 上没有一个好用的支持batch ping 的库包,参照其他人的实现,我自己实现了一个。 该文章后续仍在不断的更新修改中, 请移步到原文地址http://dmwan.cc, git 地址:https://github.com/caucy/bat...阅读全文

2018-05-02 11:33:04 鼎铭
阅读:3408 评论:0

golang yaml与json配置文件互

在java中可利用snakeyaml库进行yaml与json配置文件格式互转,原理就是yaml解析为map对象,再将ma对象p转为json,反之亦然 本文重点介绍yaml文件的解析 golang中比较流行的yaml.v2提供了对yaml配置文件的操作,encoding/json库提供了对json配置文件的操作,但比较繁琐的是可能需要在代码中定义对应配置文件结构的struct结构来存储解析结构,缺少灵活度。但也可以利用Unmarshal、marshal来直接解析成map存储。 将yaml配置内容解...阅读全文

2018.09.28 11:07 鹅鹅鹅_
阅读:5456 评论:0