Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,可是业务逻辑不够复杂)
Go Programming Blueprints
- http.Handle("/", &templateHandler{filename: "chat.html"});
- http.Handle静态方法?
带參数的函数对象參数?就是个普通的struct——为何不须要new?
- go get github.com/gorilla/websocket(方便的包依赖管理!)
- Go语句不须要;标记结束
- TDD: 在未定义type struct之前如果已经存在?
- 控制流:这里类似于Swift。if/for不须要加()
- 初始化/赋值(:=) vs (<-)chan流作输出右输入(放到左边能够觉得是个单元运算?)
- map类型的特殊语法:map[keyType]valueType -->仅仅能觉得Go里面map当作内置类型处理了
- 因此不须要像Java里定义key对象类的equals/hashCode方法,也须要像C++是把map容器类作为模板库来实现(非语言特性)
- chan类型是否也能够觉得如此呢?
- 把chan/map放在类型的前面。有点Haskell的风格?
- chan能够觉得就是Go routine之间消息通信的管道?每一个chan里面的消息必须说同一种类型?
- struct内的定义是join chan *client,但使用却是 for { select { case client := <-r.join: ... } },编程风格太诡异了
- 仅仅能觉得Go里面的*把代表指针类型,应该理解为引用?而且訪问其成员使用.而不是->
- 这里的for-select似乎借鉴了Erlang的惯使用方法
- 创建chan:make(chan []byte) //不叫new叫make~
- struct内的定义是join chan *client,但使用却是 for { select { case client := <-r.join: ... } },编程风格太诡异了
- 随意參数:a ...interface{}
- 给struct定义(成员)方法?有点感觉像是Objective-C。
。。
- 认证:handler wrapper(设计模式)
- 处理文件上传:file, header, err := req.FormFile("avatarFile") //文件保存在哪?multipart.File接口类型?
- data, err := ioutil.ReadAll(file)
- 接口应该越通用越好——但标准库确保已经定义了全部经常使用的吗?
- net/http包中内置的文件server:
- http.Handle("/avatars/", http.StripPrefix("/avatars/", http.FileServer(http.Dir("./avatars"))))
- bufio
- s := bufio.NewScanner(os.Stdin) //或许可用正則表達式进行扫描?
- for s.Scan() { ... s.Next() ... } //让我总是想起了Java的StringTokenizer类
- os/exec:用管道连接多个进程
- exec.Command:nextCmd.Stdin = thisCmd.StdoutPipe(),然后挨个调用cmd对象的Start()方法并Wait()
- NSQ
- 安装驱动:go get github.com/bitly/go-nsq
- 安装MongoDB驱动:go get gopkg.in/mgo.v2
- mongod --dbpath ./db
- iter := db.DB("ballots").C("polls").Find(nil).Iter()
- TCP长连接
- netc, err := net.DialTimeout(netw, addr, 5*time.Second) //Go的命名真tm见鬼,dial?
- httpClient = &http.Client{
-
Transport: &http.Transport{
- Dial: dial, //使用定制的dial方法(?)
- }, }
-
Transport: &http.Transport{
- 环境变量:`env:"SP_TWITTER_KEY,required"`
- fmt.Println(reflect.TypeOf(struct{}{}).Size()) // =0
- stopchan <-chan struct{} //仅接受的channel?这样的语法太诡异了,运算符能够是类型签名的一部分
- 捕获OS信号
- termChan := make(chan os.Signal, 1)
- signal.Notify(termChan, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP)
- 实现RESTful API
- var vars map[*http.Request]map[string]interface{}
- var varsLock sync.RWMutex //Go里面使用读写锁。性能不会有问题吗?
- 又见wrapper:func withAPIKey(fn http.HandlerFunc) http.HandlerFunc { ... //这里已经使用了高阶函数了(Python装饰器?)
- withCORS(withVars(withData(db, withAPIKey(handlePolls)))))
- The Facade interface exposes a single Public method, which will return the public view of a struct
- q.Lat, _ = strconv.ParseFloat(req.URL.Query().Get("lat"), 64) //库的API设计得非常简洁
- var ZIP Archiver = (*zipper)(nil) //编译器会运行接口类型一致性检查
- var _ Interface = (*Implementation)(nil)
- if err := os.MkdirAll(filepath.Dir(dest), 0777); err != nil { ...
- DirHash:实质上是将文件夹转换为一个key string对象,用字符串的比較来取代了对文件夹属性的比較(解耦合了)
- case <-time.After(time.Duration(*interval) * time.Second): ... //嗯?返回一个channel,此channel将发送指定的超时消息
- GOPATH //相当于Maven里的repo概念。或者JAVA_HOME?
- go get code.google.com/p/go.tools/cmd/goimports //嗯?怎么不是内置的
Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,可是业务逻辑不够复杂)的更多相关文章
- C++ Programming language读书笔记
C语言,结构化程序设计.自顶向下.逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序.选择.循环三种基本控制结构构造. 模块结构:"独立功能,单出.入口&quo ...
- OpenCV 2 Computer Vision Application Programming Cookbook读书笔记
### `highgui`的常用函数: `cv::namedWindow`:一个命名窗口 `cv::imshow`:在指定窗口显示图像 `cv::waitKey`:等待按键 ### 像素级 * 在灰度 ...
- 《利用python进行数据分析》读书笔记--第十一章 金融和经济数据应用(一)
自2005年开始,python在金融行业中的应用越来越多,这主要得益于越来越成熟的函数库(NumPy和pandas)以及大量经验丰富的程序员.许多机构发现python不仅非常适合成为交互式的分析环境, ...
- java io读书笔记(3)数值类型的数据
input stream读取字节:out stream写入字节.Readers读取字符而Writers写入字符.因此,如果我们想理解input和output,我们首先就要明白 java如何处理字节,整 ...
- Oracle SQL 疑难解析读书笔记(二、汇总和聚合数据)
2.1 对某字段的值进行汇总 仅仅在两种特殊情况下,Oracle在聚合函数中考虑了NULL值.第一种是在GROUPING功能里,用来检验包含了NULL值的分析函数的结果,是直接由所在的表得来,还是由分 ...
- The art of multipropcessor programming 读书笔记-硬件基础1
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- The art of multipropcessor programming 读书笔记-硬件基础2
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- The art of multipropcessor programming 读书笔记-3. 自旋锁与争用(2)
本系列是 The art of multipropcessor programming 的读书笔记,在原版图书的基础上,结合 OpenJDK 11 以上的版本的代码进行理解和实现.并根据个人的查资料以 ...
- 《Swift编程语言》中文翻译及读书笔记page25
The Swift Programming Language读书笔记学习笔记 第25页 本页主要说在swift语言里能够使用分号,但分号不作为每条swift语言语句的结尾 而是间隔写在一行的多条swi ...
随机推荐
- 令人惊叹的Chrome浏览器插件
Chrome是一个简洁而又高效(高性能,高消耗)的浏览器.接下来让我吐血推荐一些常用的Chrome插件. 日常插件 uBlock Origin ----- 比Adblock性能更高的广告插件. Adk ...
- MyBatis多个接口参数报错:Available parameters are [0, 1, param1, param2], 及解决方法
1. sql语句如下: SELECT * FROM tb_crm_user WHERE id = #{userId, jdbcType=INTEGER} AND user_name = #{userN ...
- how can I ues Dataset to shuffle a large whole dataset?
The Dataset.shuffle() implementation is designed for data that could be shuffled in memory; we're co ...
- [译]__main__ 顶级脚本环境
'main'是其中顶级代码执行的范围的名称.一个模块的__name__可以从标准输入,脚本,或从一个交互式命令行中等方式被设置成等于'main'. 一个模块可以发现它是否是通过检查自身在主运行范围__ ...
- rsync配置和同步数据
rsync的搭建配置1.环境和配置文件 rsyncd.conf(主配置文件) rsyncd.secrets(密码文件) pc1:192.168.0.1,rsync的服务器,配置rsyncd.conf文 ...
- Stack&Vector源码分析 jdk1.6
参照:http://www.cnblogs.com/tstd/p/5104099.html Stack(Fitst In Last Out) 1.定义 public class Stack<E& ...
- 【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理
题目描述 称一个1,2,...,N的排列P1,P2...,Pn是Mogic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,...N的排列中有多少是Mogic的,答案可能很 ...
- 爬虫【自动登陆github和抽屉】
自动登陆github用户详情页 代码 #! /usr/bin/env python # -*- coding: utf- -*- # __author__ = "wuxiaoyu" ...
- uva 103 Stacking Boxes(最长上升子序列)
Description Stacking Boxes Background Some concepts in Mathematics and Computer Science are simp ...
- 前端开发 CSS中你所不知道的伪类与伪元素的区别--摘抄
做过前端开发的人都熟悉伪类与伪元素,而真正能够彻底了解这二者的区别的人并不多.伪类与伪元素确实很容易混淆. 伪元素主要是用来创建一些不存在原有dom结构树种的元素,例如:用::before和::aft ...