Monthly Archives: 七月 2013

Hello World

go语言入门[3]—-并发&线程通讯

go语言的的多线程是通过“goroutine”来实现的,通过“go”关键字新建一个goroutine
比如:

    go hello()

其实,goroutine比线程更小,“十几个goroutine可能体现在底层也就五六个线程”,且是内存共享的

不同的goroutine之间,通过channel来通讯,比如下面的的程序,主线程是一个http sever,收到http请求后,将url塞入channel,然后下面的“see”函数在来处理这个channel

package main
 
import (
	"fmt"
    "net/http"
)
//定义一个channel
var cc chan string
 
func main() {
    fmt.Println("--ubox-event--start--")
 
    //新建一个channel	
    cc = make(chan string)
    //使用一个goroutine启动see函数,编号为1
    go see("1")
    //启动httpServe
    http.HandleFunc("/*", httpServe)
    http.ListenAndServe(":8008", nil)
}
 
func httpServe(w http.ResponseWriter, req *http.Request) {
    url := req.URL.String()
    w.Write([]byte("Hello"))
    //将url塞入channel
    cc <- url
}
 
func see(n string) {
    fmt.Println("--see--" + n + "--start--")
    //通过range参数取出channel,每当上面httpServe被塞入一次,这里即执行一次
    for s := range cc {
        fmt.Println("--see--url-" + n + "-" + s)
    }
}

go run 启动上面的程序,然后访问localhost:8008/xxxxx,便会看到 “–see–url-1-/xxxxx”

有意思的是 ,如果你在上面再启动两个goroutine,即go see(“2″),go see(“3″)

然后不断访问localhost:8008/xxxxx,打印出来的并不一直是 “url-1”,而是 url-1、url-2、url-3轮流出现,且每次访问只出现一次,也就是说channel并不会一直分配给第一个range

他山石

[转]前端开发的一些经验

上上周百度技术沙龙的是前端开发专题,第二场,来自豆瓣的前辈王克军所讲的“工程之美”给我留下了深刻的印象,以下ppt节选

  • 业务逻辑复杂时,通用和业务代码的分离、复杂度控制
  • 需求多变时,大而全的通用组件无用武之地,轻量的,功能单一的更便于复用
  • 工具防止人做愚蠢的事,也阻碍人干聪明的事
  • 工具不是越强大越好,而是简单有效最好
  • 工具不是越傻瓜越好,要留给他人发挥的空间
  • 前端开发,80%是工程问题,20%是技术问题
  • 模块要完全独立(借助工具实现)
  • 通用代码中绝不混杂业务逻辑
  • 代码逻辑复杂时,应该按业务拆分,不是按展现拆分
  • 代码架构借鉴SOLID原则(职能分离、开闭、里斯替换、接口分离、依赖反转)
  • 从实际开发中积累形成生态体系
  • 技术问题上开放,工程问题上保守
  • 在完成的基础上追求完美
  • 工具要简单,配置要简单
  • 工具是可以替换的,而且总是多变的,不要成为工具的努力
  • 对于复杂的问题,不断进行才接直到足够简单
  • 学点原研哉的Exformation哲学
  • 更多的时间做有趣的事!

“我们的发明常常是漂亮的工具,只是吸引我们的注意力,使我们离开了严肃的事物。”—-卢梭《瓦尔登湖》

更多精彩,请关注现场视频(估计过几天会更新上来):http://www.infoq.com/cn/zones/baidu-salon/

 

 

 

业界杂谈

微信

虽然微信已经出来2年了,作为一个对新鲜事物不甚敏感的人,我是从三个月前,因为要为公司做微信相关的项目,才开始关注微信的
开始的时候,还以为微信api就像微博一样,也就是发发微博之类的功能,但仔细看了微信公众账号的api以后,最大的感觉就是:哇塞,这玩意好牛逼~~~微信并没有说自己可以干什么,却也没说自己不能干什么~~~微信就是一个一对一的交流平台(当然,也可以一对多),可以文字、图片、位置、语音~~就像两个人聊天一样,所以能通过聊天做的事,通过微信也能做

昨天的腾讯合作伙伴大会,下午的微信专场里,除了介绍5.0的新功能意外,还有十个来自各行业的微信公众账号做经验介绍,这其中,既有各类企业用户,也有如广东公安这样的政府部门,在他们的使用中,大概包括了下面的功能

1. 客户服务
基于微信的一对一交互,客服平台是最常见的微信功能,甚至不需要对它做什么开发,直接使用腾讯自身的微信后台就可以完成这个功能
2. 营销
虽然腾讯并不想让微信成为营销工具,并且给群发功能加了很多限制,但却也挡不住用户从微博上继承来的习惯,不过效果怎么样,就很难说了
3. 查询
比如说,在做了账号关联后,查询订单信息,查询信用卡账户信息,查询的介质,可以是文字,也可以是语音、图片、以及位置
4. 替代APP,完成更加复杂的功能
对于界面要求不高的应用,完全可以使用微信公众账号替代APP,比如生活服务类的应用 出门问问,完全没有APP,通过微信实现所有的文字、语音的问询服务等功能

在5.0的微信,还将加入微信支付的功能,这样,一大批电商就可以直接在微信里卖东西了

关于使用微信的一些使用建议,@青龙老贼 给出建议最有参考价值:互动塑造品牌,服务创造价值,走原创化精品化专业化的道路