代码改变世界

随笔档案-2012年06月

论go语言中goroutine的使用

2012-06-30 19:31 by 轩脉刃, 31305 阅读, 收藏, 编辑
摘要: go中的goroutine是go语言在语言级别支持并发的一种特性。初接触go的时候对go的goroutine的欢喜至极,实现并发简便到简直bt的地步。但是在项目过程中,越来越发现goroutine是一个很容易被大家滥用的东西。goroutine是一把双面刃。这里列举一下goroutine使用的几宗罪:1 goroutine的指针传递是不安全的fun main() { request := request.NewRequest() //这里的NewRequest()是传递回一个type Request的指针 go saveRequestToRedis1(request) go saveReuqe 阅读全文

Go语言_eclipse环境搭建

2012-06-19 18:54 by 轩脉刃, 14212 阅读, 收藏, 编辑
摘要: 1 下载eclipse 2 下载goeclipse http://code.google.com/p/goclipse/wiki/InstallationInstructions 3... 阅读全文

Go语言_HTTP包

2012-06-18 22:00 by 轩脉刃, 54331 阅读, 收藏, 编辑
摘要: 在Golang中写一个http web服务器大致是有两种方法: 1 使用net包的net.Listen来对端口进行监听 2 使用net/http包 这里是讨论如何使用net/http包创建一个web... 阅读全文

一个简易的SocketIM

2012-06-17 20:12 by 轩脉刃, 3789 阅读, 收藏, 编辑
摘要: 今天做了一个简易的socketIM的小示例。基本思想是开启两个winform,每个winform既充当服务器也充当客户端。一个监听8000端口,另外一个监听8001端口,两个winform接收到信息之... 阅读全文

Go语言_net篇

2012-06-16 23:45 by 轩脉刃, 8740 阅读, 收藏, 编辑
摘要: 这篇想阅读的是go的net包,net包提供了各种网络IO类型,比如有TCP/IP, UDP, 域名解析, Unix domain socket 使用这个包能很容易发送一个tcp请求,创建服务器也再也不需要像C语言那样createSocket等一系列繁琐的操作了,用起来那感觉不是一般地爽啊! 下面先创建一个简单的Server端: package main import ( "net" "fmt" ) func main() { if ln, err := net.Listen("tcp", ":8080"); err 阅读全文

网站logo漫谈

2012-06-15 23:14 by 轩脉刃, 2086 阅读, 收藏, 编辑
摘要: 一个网站,网站名,域名,网站logo是最先要考虑的几个元素。 网站的logo需要在网站的各个页面中经常出现,也是网站在用户脑中最形意的印象,因此网站的logo需要包含的条件应该有: 1 精美,独特... 阅读全文

Go语言_array,slice,map

2012-06-14 22:16 by 轩脉刃, 30938 阅读, 收藏, 编辑
摘要: 首先庆祝下golang终于通过了gfw的审核,可以不用FQ访问了。goer就可以光明正大地访问http://golang.org/ 这次还是要说说array,slice,map。虽然前面已经说过了,... 阅读全文

nginx源码学习资源(不断更新)

2012-06-13 21:32 by 轩脉刃, 34125 阅读, 收藏, 编辑
摘要: nginx源码学习是一个痛苦又快乐的过程,下面列出了一些nginx的学习资源。 首先要做的当然是下载一份nginx源码,可以从nginx官方网站下载一份最新的。 看了nginx源码,发现这是... 阅读全文

Go语言_时间篇

2012-06-12 13:50 by 轩脉刃, 32049 阅读, 收藏, 编辑
摘要: 哎,先发下牢骚,Go文档还是太弱了,特别是标准库中的文档说明,很多函数几乎就一句话过了。这点确实该向Microsoft的MSDN好好学学。 Go的time包是标准库中的包之一 不用说,几乎是... 阅读全文

Linux IO模型漫谈(6)- 信号驱动IO模型

2012-06-11 22:10 by 轩脉刃, 6141 阅读, 收藏, 编辑
摘要: Unix上有定义了许多信号。源自Berkeley的实现使用的是SIGIO信号来支持套接字和终端设备上的信号驱动IO。 信号驱动IO模型主要是在UDP套接字上使用,在TCP套接字上几乎是没有什么使用的... 阅读全文

Go语言_反射篇

2012-06-10 22:51 by 轩脉刃, 34005 阅读, 收藏, 编辑
摘要: Go语言的基本语法的使用已经在前几篇陆陆续续学完了,下面可能想写一些Go的标准库的使用了。 先是reflect库。 reflect库的godoc在http://golang.org/pkg/ref... 阅读全文

Go语言_接口篇

2012-06-09 23:13 by 轩脉刃, 16659 阅读, 收藏, 编辑
摘要: 在Go中,接口interface其实和其他语言的接口意思也没什么区别。interface理解其为一种类型的规范或者约定。一种类型是不是“实现”了一个接口呢?就看这种类型是不是实现了接口中定义的所有方法... 阅读全文

nginx源码学习Unix - Unix域协议

2012-06-08 10:53 by 轩脉刃, 2909 阅读, 收藏, 编辑
摘要: 说到什么是域协议就会出现这么个解释: UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所使用的API相同。UNIX域协议可以视为IPC方法之一。 我们白话解释下Unix域协议在什么情况下使用和怎么使用? Unix域协议主要用在同一台机子的不同进程之间传递套接字。为什么不用TCP或者U... 阅读全文

Linux IO模型漫谈(5)- IO复用模型之select

2012-06-07 09:05 by 轩脉刃, 5796 阅读, 收藏, 编辑
摘要: 首先需要了解的是select函数: select函数 #include<sys/select.h> #include<sys/time.h> int select (int maxfd , f... 阅读全文

Go语言_并发篇

2012-06-06 09:55 by 轩脉刃, 31685 阅读, 收藏, 编辑
摘要: 当被问到为什么用Go语言,一定不得不提的是Go语言的并发程序编写。在C语言中编写非常繁琐复杂的并发程序在Go语言中总是显得如此便捷。 Go中并发程序依靠的是两个:goroutine和channel ... 阅读全文

Linux IO模型漫谈(4)- 非阻塞IO

2012-06-05 09:03 by 轩脉刃, 4470 阅读, 收藏, 编辑
摘要: 首先先说一下,阻塞IO会在哪些地方阻塞住呢?输入操作read, 输出操作write,接受请求操作accept,发送请求操作connect,这四个地方阻塞进程。 非阻塞IO的模型图示在前面的章节有讲过,它和阻塞IO的最大区别就是:如果连接或者操作不能立即建立,那么连接的建立照样能发起,只是会返回一个错误信息。 同样,先说明几个用到的函数和操作: 1 fcntl函数 其全名为”file control“。顾名思义,fcntl可以执行各种操作符控制操作。#include <fcntl.h>int fcntl(int fd, int cmd, .. /* int arg */)第一个参数f 阅读全文

Linux IO模型漫谈(3) -- 阻塞式IO实现

2012-06-04 09:48 by 轩脉刃, 2248 阅读, 收藏, 编辑
摘要: 在理解代码前有几个函数先说一下: 1 sockaddr_in 套接字地址结构 struct sockaddr_in { uint8_t sin_len; //长度字段,这个sockaddr_in结构的长度,一般不用设置和检查它 sa_family_t sin_family; //协议族,TCP,UDP等协议族就设置为AF_INET... 阅读全文

Go语言_函数学习篇

2012-06-03 08:38 by 轩脉刃, 10766 阅读, 收藏, 编辑
摘要: 这里要说一下是Go函数和一些其他语言不一样的地方 1 函数格式不同 func GetMsg(i int) (r string) { fmt.Println(i) r = "hi" return r}func说明这个是个函数GetMsg是函数名(i int) 函数接收一个int参数(r string) 函数返回一个string类型返回值2 函数可以返回多个返回值这点和c,php都不一样,和lua是一样的 func GetMsg(i int) (r string, err string) { fmt.Println(i) r = "hi" err = &qu 阅读全文

Go语言_基础学习篇

2012-06-02 07:36 by 轩脉刃, 18283 阅读, 收藏, 编辑
摘要: GO文件目录结构该图是go-windows的目录结构如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序bin文件夹:go的每个项目生成的二进制可执行程序。windows下会生成.exe文件,linux下会生成可执行文件。Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),也是可以执行的。这是让PHP,Python等脚本语言望成莫及的。pkg文件夹:第三方库。里面存放你的项目中引用的 阅读全文

服务器性能查看常用命令

2012-06-01 06:35 by 轩脉刃, 23809 阅读, 收藏, 编辑
摘要: 最近在调试程序的时候经常需要查看服务器的性能问题。那么到底是需要查看服务器的哪些性能呢,如何查看性能呢?下面主要就说一下一些查看服务器性能的命令。 注:由于参数过多,我只列出了几个常观察的参数,更多的参数说明有附带链接作为参考 free –m 查看内存使用情况 这个命令比较简单,-m 代表下面的是以M为单位 Mem是表示物理内存,主要看 Mem free代表还有多少内存可以 说一下第二行的 -/+ buffers/cache: used = 第一行的used - buffers - cached (表示实际使用的内存总数) free = 第一行的free + buffer... 阅读全文