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包中内置的文件server:
    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 //嗯?怎么不是内置的

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

  1. C++ Programming language读书笔记

    C语言,结构化程序设计.自顶向下.逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序.选择.循环三种基本控制结构构造. 模块结构:"独立功能,单出.入口&quo ...

  2. OpenCV 2 Computer Vision Application Programming Cookbook读书笔记

    ### `highgui`的常用函数: `cv::namedWindow`:一个命名窗口 `cv::imshow`:在指定窗口显示图像 `cv::waitKey`:等待按键 ### 像素级 * 在灰度 ...

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

    自2005年开始,python在金融行业中的应用越来越多,这主要得益于越来越成熟的函数库(NumPy和pandas)以及大量经验丰富的程序员.许多机构发现python不仅非常适合成为交互式的分析环境, ...

  4. java io读书笔记(3)数值类型的数据

    input stream读取字节:out stream写入字节.Readers读取字符而Writers写入字符.因此,如果我们想理解input和output,我们首先就要明白 java如何处理字节,整 ...

  5. Oracle SQL 疑难解析读书笔记(二、汇总和聚合数据)

    2.1 对某字段的值进行汇总 仅仅在两种特殊情况下,Oracle在聚合函数中考虑了NULL值.第一种是在GROUPING功能里,用来检验包含了NULL值的分析函数的结果,是直接由所在的表得来,还是由分 ...

  6. The art of multipropcessor programming 读书笔记-硬件基础1

    本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...

  7. The art of multipropcessor programming 读书笔记-硬件基础2

    本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...

  8. The art of multipropcessor programming 读书笔记-3. 自旋锁与争用(2)

    本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...

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

    The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里能够使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swi ...

随机推荐

  1. 大数据学习——sparkRDD

    https://www.cnblogs.com/qingyunzong/p/8899715.html 练习1:map.filter //通过并行化生成rdd val rdd1 = sc.paralle ...

  2. PHP模版引擎twig wordpress中调用文章第一张图片

    wordpress当文章没有添加Featured media的时候, 就调用文章第一张图片, 调用的wordpress代码函数为: <?php echo catch_that_image(); ...

  3. HTTP的一些概念

    1. 什么是回调? 回调是异步编程时的基础,将后续逻辑封装成起始函数的参数,逐层嵌套 2. 什么是同步/异步? 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指: ...

  4. jQuery 样式操作、文档操作、属性操作的方法总结

    文档操作: addClass()             向匹配的元素添加指定的类名.after()                    在匹配的元素之后插入内容.append()         ...

  5. hdu6034[模拟] 2017多校1

    /*hdu6034[模拟] 2017多校1*/ //暴力模拟26个26进制数即可, 要注意进位 #include<bits/stdc++.h> using namespace std; t ...

  6. Welcome-to-Swift-23访问控制(Access Control)

    访问控制可以限定你在源文件或模块中访问代码的级别,也就是说可以控制哪些代码你可以访问,哪些代码你不能访问.这个特性可以让我们隐藏功能实现的一些细节,并且可以明确的指定我们提供给其他人的接口中哪些部分是 ...

  7. Qtree

    Qtree Ⅰ 题意:https://vjudge.net/problem/SPOJ-QTREE 带修路径查询最大边权 sol :树链剖分,之后每条重链就是一个连续的区间,拿线段树维护即可  简单讲讲 ...

  8. 刷题总结——date(ssoj)

    题目: 题目背景 SOURCE:NOIP2015-SHY-9 题目描述 小Y和小Z好不容易有机会相见啦,可是邪恶的小H却不想让他们相见.现在有一些城市,城市之间有双向路径相连,有路径相连的城市之间可以 ...

  9. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆   代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为.将代码中的各种元 ...

  10. log4j.xml——java日志处理组件配置简介

    (从一篇好文开始)log4j(一)——为什么要用log4j? 三:看完栗子后的感想 (1)很明显我们在编写代码的时候有各种需要打印日志的需求,比如:我们调试代码的时候:我们的应用出现了问题,我们分析. ...