go方法的深入探究(7.21增补)

1)哪些类型可以有方法:         1)只能对命名类型和命名类型的指针编写方法;         2)不能对接口类型和接口类型的指针编写方法;         3)只能在定义命名类型的那个包编写其方法。 2)receiver是值的方法,编译器会隐式的生成一个receiver是对应类型指针的同名方法。反过来却不会。 3)结构体的匿名字段的类型限制:         1)不可以是未命名类型;         2)可以是命名类型或命令类型的指针类型;   ...阅读全文

阅读:2479 评论:0

[Go语言]无辜的goroutine

简介: 本文主要是针对一些对于goroutine的“指控”提出我自己的看法,特别是轩脉刃的一篇博客文章《论go语言中goroutine的使用》提出了goroutine的几宗罪。实际上goroutine确实有增加程序复杂度而容易导致问题之处,特别是死锁;但是另外的一些指控,我认为实际上goroutine是没有直接责任的。 以下就《论go语言中goroutine的使用》的内容一一提出我的观点。 第一个指控:goroutine的指针传递是不安全的 原文: fun main() { request :=...阅读全文

2013-04-03 15:11 stevewang
阅读:4918 评论:0

Go语言并发之美:解释其中内核、外延

多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之 上丰富的外延,可以解决现实世界中各种各样的问题。本文以GO语言为例,解释其中内核、外延。 并发模式之内核 这种并发模式的内核只需要协程和通道就够了。其中协程负责执行代码,通道负责在协程之间传递事件。 并发编程一直以来都是个...阅读全文

阅读:4202 评论:2

深入Go语言网络库的基础实现

Go语言的出现,让我见到了一门语言把网络编程这件事情给做“正确”了,当然,除了Go语言以外,还有很多语言也把这件事情做”正确”了。我一直坚持着这样的理念——要做"正确"的事情,而不是"高性能"的事情;很多时候,我们在做系统设计、技术选型的时候,都被“高性能”这三个字给绑架了,当然不是说性能不重要,你懂的。 目前很多高性能的基础网络服务器都是采用的C语言开发的,比如:Nginx、Redis、memcached等,它们都是基于”事件驱动 + 事件回掉函数”的方式实现,也就是采用epoll等作为网络收...阅读全文

阅读:7439 评论:1

深入讨论channel timeout

Go 语言的 channel 本身是不支持 timeout 的,所以一般实现 channel 的读写超时都采用 select,如下: select { case <-c: case <-time.After(time.Second): } 这两天在写码的过程中突然对这样实现 channel 超时产生了怀疑,这种方式真的好吗?于是我写了这样一个测试程序: package main import ( "os" "time" ) func main() { c := make(chan int, 10...阅读全文

阅读:14496 评论:2

go语言写日志

go语言有一个标准库,log,提供了最基本的日志功能,但是没有什么高级的功能,如果需要高级的特性,可以选择glog或log4go。 glog是google提供的,类似于google的c++ log库,使用起来非常简单,下面介绍一下;log4go的用法和log4j一样,可配置性比较高。 glog只提供了少数几个选项,通过命令行控制,例如: -log_dir: 日志文件保存目录 -alsologtostderr: 日志写入文件的同时,输出到stderr -v:配置V输出的等级。 glog使用非常简单...阅读全文

2013 年 08 月 09 日 铁哥
阅读:4222 评论:1

Go中的系统Signal处理

Go中的系统Signal处理 九 21 bigwhite技术志 Blog, Blogger, C, Daemon, Debian, Go, Golang, Google, Interface, Linux, map, Opensource, Programmer, Redhat, Signal, Slice, Ubuntu, Unix, 信号, 切片, 博客, 开源, 接口, 程序员, 结构体, 编程,语言 2 Comments 我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有...阅读全文

阅读:3932 评论:0

【玩转Golang】reflect.DeepEqual

如果有两个map,内容都一样,只有顺序不同 m1:=map[string]int{"a":1,"b":2,"c":3}; m2:=map[string]int{"a":1,"c":3,"b":2}; 我们怎么判断二者是否一致呢? 如果你打算这么写: fmt.Println("m1==m2",m1==m2) 这是行不通的,go没有重写map的==操作符,编译器会报告错误: invalid operation: m1 == m2 (map can only be compared to nil) 意...阅读全文

2015-01-13 06:32 dajianshi
阅读:11778 评论:3

Go之获取Windows下文件是否隐藏

起初,做了个小程序,用来检测磁盘中所有的文件 package main import( "fmt" "io/ioutil" "os" ) var dirpath ="D:\\" func main(){ CheckDir(dirpath) } func CheckDir(dirpath string){ dirs, err := ioutil.ReadDir(dirpath) if err !=nil{ panic("目录输入有误!") } for _, dir := range dirs { ...阅读全文

2015-01-30 13:15 anbylau2130
阅读:5432 评论:0

Golang编程经验总结

如何选择web框架: 首先Golang语言开发web项目不一定非要框架,本身已经提供了Web开发需要的一切必要技术。当然如果想要ruby里面Rail那种高层次全栈式的MVC框架, Golang里面暂时没有,但是不是所有人都喜欢这种复杂的框架。Golang里面一些应用层面的技术需要自己去组装,比如session,cache, log等等. 可选择的web框架有martini, goji等,都是轻量级的。 Golang的web项目中的keepalive 关于keepalive, 是比较复杂的, 注意...阅读全文

2015-02-03 16:38 u013834131
阅读:16021 评论:0

Go语言的堆栈分析

本文为理解翻译,原文地址:http://www.goinggo.net/2015/01/stack-traces-in-go.html Introduction 在Go语言中有一些调试技巧能帮助我们快速找到问题,有时候你想尽可能多的记录异常但仍觉得不够,搞清楚堆栈的意义有助于定位Bug或者记录更完整的信息。 本文将讨论堆栈跟踪信息以及如何在堆栈中识别函数所传递的参数。Functions 先从这段代码开始: Listing 1 01 package main 02 03 func main() {...阅读全文

阅读:7517 评论:0

近期遇到的3个Golang代码问题

近期遇到的3个Golang代码问题 一 23 bigwhite技术志 Channel, GDB, Go, Golang, goroutine, heartbeat, martini, runtime, template, top, Web, 坑, 惯用法, 模板, 调度 No Comments 这两周来业余时间都在用Golang写代码,现在处于这样一个状态:除了脚本,就是Golang了。反正能用golang实现的,都用golang写。 Golang语言相对成熟了,但真正写起来,还是要注意一些“坑...阅读全文

阅读:14122 评论:3

Golang测试技术

Golang测试技术 十 22 bigwhite技术志 Concurrency, Go, Golang, GopherCon, http, Mock, Package, Unittest, 包, 单元测试, 并发, 构建, 标准库, 测试框架, 竞争检测 No Comments 本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对单...阅读全文

阅读:3016 评论:0

Scala与Golang的并发实现对比

并发语言俨然是应大规模应用架构的需要而提出,有其现实所需。前后了解了Scala和Golang,深深体会到现代并发语言与旧有的Java、C++等语言在风格及理念上的巨大差异。本文主要针对Scala和Golang这两个我喜爱的并发语言在并发特性上的不同实现,做个比较和阐述,以进一步加深理解。 一. Scala与Golang的并发实现思路Scala语言并发设计采用Actor模型,借鉴了Erlang的Actor实现,并且在Scala 2.10之后,Scala采用的是Akka Actor模型库。Actor...阅读全文

阅读:19101 评论:0

Go和HTTPS

转自:http://tonybai.com/2015/04/30/go-and-https/ 近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列)。对HTTPS的了解则始于那次自行搭建ngrok服务,在那个过程中照猫画虎地为服务端生成了一些私钥和证书,虽然结果是好 的:ngrok服务成功搭建起来了,但对HTTPS、数字证书等的基本原理并未求甚解。于是想趁这次的机会,对HTTPS做一些深度挖掘。主要途...阅读全文

2015-06-01 17:38 sevenyuan
阅读:6375 评论:0

golang逐行处理文件

golang 提供了package bufio。bufio.NewReader()创建一个默认大小的readbuf,当然,也可以bufio.NewReaderSize。 func NewReader(rd io.Reader) *Reader NewReader returns a new Reader whose buffer has the default size(4096). func NewReaderSize(rd io.Reader, size int) *Reader NewRe...阅读全文

2015-08-25 21:00 冷絮
阅读:6410 评论:0

Go程序调试、分析与优化

Go程序调试、分析与优化 八 25 bigwhite技术志 atomic, BradFitzpatrick, Channel, Concurrency, Darwin, debugging, Go, Golang, goroutine, gotools, Linux, Mutex, optimization, parallelism, Perl, pprof, Ubuntu, YAPC, 优化, 原子操作, 并发, 并行, 调试, 锁 No Comments Brad Fitzpatrick在Y...阅读全文

阅读:7417 评论:0

神奇的go语言(聊天室的开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 这是一篇关于聊天室开发的博客,原来文章的地址来自于此。这篇文章非常具有代表性,对于代码中的函数部分内容,不想多说什么,只是对它的实现进行一些必要的讲解。关于代码,大家既可以在这里阅读,也可以跳转到那篇博客,继续阅读。package main import( "fmt" "os" "net" ) //////////////////////////////////////////////////...阅读全文

2014-07-21 23:10 feixiaoxing
阅读:1983 评论:0

Go语言TCP Socket编程

Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的。 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,socket...阅读全文

十一月 17, 2015 bigwhite
阅读:30009 评论:4