随便记记
Posted lijianming180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随便记记相关的知识,希望对你有一定的参考价值。
一、for循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| - 常规 for i := 0; i < count; i++ {} - "while" for condition { } - "do-while" for { doSomething() if condition { break } } - iterator loop for k, v := range f.Value {} - dead loop for {}
|
二、Orthogonal Composition
1、vertical composition thought(垂直组合思维)
Go语言通过type embedding实现垂直组合。组合方式莫过于以下这么几种:
a) construct interface by embedding interface
通过在interface中嵌入interface type name,实现接口行为聚合,组成大接口。这种方式在stdlib中尤为常用。
1 2 3 4
| type ReadWriter interface { Reader Writer }
|
b) construct struct by embedding interface
1 2 3 4
| type MyReader struct { io.Reader N int64 }
|
c) construct struct by embedding struct
1 2 3 4 5 6 7
| type poolLocal struct { private interface{} shared []interface{} Mutex pad [128]byte }
|
在struct中嵌入interface type name和在struct嵌入struct,都是“ 大专栏 随便记记(一)委派模式(delegate)”的一种应用。在struct中嵌入interface方便快速构建满足某一个interface的dummy struct,方便快速进行unit testing,仅需实现少数需要的接口方法即可,尤其是针对Big interface时。
struct中嵌入struct,被嵌入的struct的method会被提升到外面的类型中,比如上述的poolLocal struct,对于外部来说它拥有了Lock和Unlock方法,但是实际调用时,method调用实际被传给poolLocal中的Mutex实例。
2、small interface thought(小接口思维)
interface是Go语言真正的魔法。前面提到过,interface好比程序肌体的骨架关节,上下连接着骨架部件。interface决定了Go语言中类型的水平组合方式。interface与其实现者之间的关系是隐式的,无需显式的”implements”声明(但编译器会做静态检查);interface仅仅是method集合,而method和普通function一样声明,无需在特定位置。
3、horizontal composition thought(水平组合思维)
middleware这个词的含义可大可小,在Go Web编程中,常常指的是一个满足Handler interface的HandlerFunc类型实例。实质上:
1
| middleware = wrapper function + adapter function type
|
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| func (h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t := time.Now() log.Printf("[%s] %q %vn", r.Method, r.URL.String(), t) h.ServeHTTP(w, r) }) } func authHandler(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := validateAuth(r.URL.Query().Get("auth")) if err != nil { http.Error(w, "bad auth param", http.StatusUnauthorized) return } h.ServeHTTP(w, r) }) } func main() { http.ListenAndServe(":8080", logHandler(authHandler(http.HandlerFunc(index)))) }
|
以上是关于随便记记的主要内容,如果未能解决你的问题,请参考以下文章
python之路第二天 随便记记 今天主要很郁闷
nginx与负载均衡
记记法——《认知天性》
tensorflow 学习记记——环境安装
Sublime Text3自定义代码片段
懒加载问题之事务原因