Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,但是业务逻辑不够复杂)

Go Programming Blueprints

  1. http.Handle("/", &templateHandler{filename: "chat.html"});

    1. http.Handle静态方法?
    2. 带参数的函数对象参数? 就是个普通的struct——为何不需要new?
  2. go get github.com/gorilla/websocket(方便的包依赖管理!)
  3. Go语句不需要;标记结束
  4. TDD: 在没有定义type struct之前假设已经存在?
  5. 控制流:这里类似于Swift,if/for不需要加()
  6. 初始化/赋值(:=) vs (<-)chan流作输出右输入(放到左边可以认为是个单元运算?)
  7. map类型的特殊语法:map[keyType]valueType -->只能认为Go里面map当作内置类型处理了
    1. 因此不需要像Java里定义key对象类的equals/hashCode方法,也需要像C++是把map容器类作为模板库来实现(非语言特性)
    2. chan类型是否也可以认为如此呢?
    3. 把chan/map放在类型的前面,有点Haskell的风格?
  8. chan可以认为就是Go routine之间消息通信的管道?每个chan里面的消息必须说同一种类型?
    1. struct内的定义是join chan *client,但使用却是 for { select { case client := <-r.join: ... } },编程风格太诡异了

      1. 只能认为Go里面的*把代表指针类型,应该理解为引用?并且访问其成员使用.而不是->
      2. 这里的for-select似乎借鉴了Erlang的惯用法
    2. 创建chan:make(chan []byte) //不叫new叫make~
  9. 任意参数:a ...interface{}
  10. 给struct定义(成员)方法?有点感觉像是Objective-C。。。
  11. 认证:handler wrapper(设计模式)
  12. 处理文件上传:file, header, err := req.FormFile("avatarFile") //文件保存在哪?multipart.File接口类型?
    1. data, err := ioutil.ReadAll(file)
    2. 接口应该越通用越好——但标准库确保已经定义了所有常用的吗?
  13. net/http包中内置的文件服务器:
    1. http.Handle("/avatars/", http.StripPrefix("/avatars/", http.FileServer(http.Dir("./avatars"))))
  14. bufio
    1. s := bufio.NewScanner(os.Stdin) //也许可用正则表达式进行扫描?
    2. for s.Scan() { ... s.Next() ... } //让我总是想起了Java的StringTokenizer类
  15. os/exec:用管道连接多个进程
    1. exec.Command:nextCmd.Stdin = thisCmd.StdoutPipe(),然后挨个调用cmd对象的Start()方法并Wait()
  16. NSQ
    1. 安装驱动:go get github.com/bitly/go-nsq
    2. 安装MongoDB驱动:go get gopkg.in/mgo.v2
      1. mongod --dbpath ./db
      2. iter := db.DB("ballots").C("polls").Find(nil).Iter()
  17. TCP长连接
    1. netc, err := net.DialTimeout(netw, addr, 5*time.Second) //Go的命名真tm见鬼,dial?
    2. httpClient = &http.Client{
      Transport: &http.Transport{

      Dial: dial, //使用定制的dial方法(?)
      }, }
  18. 环境变量:`env:"SP_TWITTER_KEY,required"`
  19. fmt.Println(reflect.TypeOf(struct{}{}).Size()) // =0
  20. stopchan <-chan struct{} //仅接受的channel?这种语法太诡异了,运算符可以是类型签名的一部分
  21. 捕获OS信号
    1. termChan := make(chan os.Signal, 1)
    2. signal.Notify(termChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
  22. 实现RESTful API
    1. var vars map[*http.Request]map[string]interface{}
    2. var varsLock sync.RWMutex //Go里面使用读写锁,性能不会有问题吗?
    3. 又见wrapper:func withAPIKey(fn http.HandlerFunc) http.HandlerFunc { ... //这里已经使用了高阶函数了(Python装饰器?)
      1. withCORS(withVars(withData(db, withAPIKey(handlePolls)))))
  23. The Facade interface exposes a single Public method, which will return the public view of a struct
  24. q.Lat, _ = strconv.ParseFloat(req.URL.Query().Get("lat"), 64) //库的API设计得很简洁
  25. var ZIP Archiver = (*zipper)(nil) //编译器会执行接口类型一致性检查
    1. var _ Interface = (*Implementation)(nil)
    2. if err := os.MkdirAll(filepath.Dir(dest), 0777); err != nil { ...
    3. DirHash:实质上是将目录转换为一个key string对象,用字符串的比较来代替了对目录属性的比较(解耦合了)
  26. case <-time.After(time.Duration(*interval) * time.Second): ... //嗯?返回一个channel,此channel将发送指定的超时消息
  27. GOPATH //相当于Maven里的repo概念,或者JAVA_HOME?
    1. go get code.google.com/p/go.tools/cmd/goimports //嗯?怎么不是内置的

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 04:15:14

Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,但是业务逻辑不够复杂)的相关文章

读书笔记-APUE第三版-(6)系统数据文件和信息

常见系统数据文件 下表列出了常见的系统数据文件及其查找函数. 以/etc/passwd文件为例,读取数据的程序基本框架如下: void get_pw_entry() { struct passwd *ptr; setpwent(); while ((ptr = getpwent()) != 0) { -- } endpwent(); return ptr; } 每个数据文件都提供了一个get方法返回文件下一个记录项. set方法充值当前位置到文件开始处. end方法关闭数据文件. 表格中的get

C++ Programming language读书笔记

http://blog.163.com/leonary_dy/blog/static/405528602009122103416862/ 虽然很多人一再强调语言细节不重要,可我还是要花时间重读经典.上次我认认真真读这本书还要追溯到两年前,现在我对C++的理解更深了一层,可以从书中读到一些两年前无法领悟的东西. 声明:本笔记只记录我以前不了解的部分,请初学者不要作为书籍摘要 我看的是TCPL电子版第三版,June 1997第一次印刷.这是网上最常见的版本,前两页书皮虽然写着special版,其实后

《利用python进行数据分析》读书笔记--第十一章 金融和经济数据应用(二)

3.更多示例应用 本节介绍一些其他的例子. 信号前沿分析 本小节将介绍一种简化的截面动量投资组合,并得出如何得到模型参数化网格.

【读书笔记-数据挖掘概念与技术】认识数据

属性分类: 标称属性(定性) 二元属性(定性) 序数属性(定性) 数值属性(定量) 标称属性--"与名称相关",它的值是一些符号或事物的名称. eg.头发颜色(黑色.棕色.淡黄色.红色) 婚姻状况(单身.已婚.离异.丧偶) 二元属性--标称属性的一种,只有两个类别或状态:0或1(布尔属性). 有对称与非对称之分,对称--两种状态具有同等价值并且携带相同的权重eg.性别 非对称--其状态的结果不是同样重要eg.化验结果(阴性0.阳性1) 序数属性--它的值之间具有有意义的序或秩评定,但相

Effective TCP/IP Programming读书笔记

TCP/IP深入思考 这是我读Effective TCP/IP Programming的 读书笔记和思考,以及做的一些实验.强烈建议后端工程师有空读一读这本书,有些细节的确是我们平时没有注意的,读了最好自己动手做一些实验加深理解. fin的含义 对端发送fin会导致read()返回,但send()照样可以发送,也就是单纯的fin其实相当于shutdown(SHUT_WR). 当对端应用程序崩溃后(未close),本段一直调用send(),对端会返回RST,此时read()会返回Connectio

《Swift编程语言》中文翻译及读书笔记page25

The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里可以使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swift语句. eg: var x = 194 var y = 184 var z = 7311 上边三行swift语句可写成一行 var x = 194, y = 184, z = 7311 在本页还提及了swift里的int数据,这和其他语言里int整形数据没啥区别. 特别之处1)提及了UInt8

《深入理解计算机系统》 Chapter 7 读书笔记

<深入理解计算机系统>Chapter 7 读书笔记 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(货被拷贝)到存储器并执行. 链接的时机 编译时,也就是在源代码被翻译成机器代码时 加载时,也就是在程序被加载器加载到存储器并执行时 运行时,由应用程序执行 链接器使分离编译称为可能. 一.编译器驱动程序 大部分编译系统提供编译驱动程序:代表用户在需要时调用语言预处理器.编译器.汇编器和链接器. 1.将示例程序从ASCⅡ码源文件翻译成可执行目标文件的步骤 (1)运

[读书笔记]30岁前的每一天

30岁之后,我觉得梦想离我越来越近了.我从事自己热爱的工作,有许多时间陪伴家人和朋友.我找到了生命的另一半,因为他的存在,我有勇气面对生活的任何艰难困苦.我走向了财富自由的道路,不再为薪水收入的多少而烦恼. 财富自由,是实现梦想最重要的基础,财富自由意味着你有足够的时间去做你想做的事,不必再熬夜加班,不必再看老板的脸色."踏上财富自由之路"这一部分,讲述投资理财最基础的观念和技能,希望能帮助你作出改变. 梦想要好高骛远,行动要脚踏实地,这就是记事本存在的意义.很多人都用记事本,可是很多

Probabilistic Programming and Bayesian Methods for Hackers读书笔记

本文为<Probabilistic Programming and Bayesian Methods for Hackers>读书笔记,网页链接为https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers 由于csdn无法编辑公式,以及上传图片麻烦,所以直接上传word 目录 第1章  贝叶斯方法原则及概率编程初步...3 1.1 贝叶斯推断的哲学意义...3 1.