随便记记(一)

一、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 // underlying reader

N int64   // max bytes remaining

}

c) construct struct by embedding struct

1

2

3

4

5

6

7
// sync/pool.go

type poolLocal struct {

private interface{}   // Can be used only by the respective P.

shared  []interface{} // Can be used by any P.

Mutex                 // Protects shared.

pad     [128]byte     // Prevents false sharing.

}

在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))))

}

原文地址:https://www.cnblogs.com/lijianming180/p/12286147.html

时间: 2024-11-10 13:07:07

随便记记(一)的相关文章

python之路第二天 随便记记 今天主要很郁闷

为何要有操作系统 为了让程序员更轻松的完成命令电脑工作而存在的,控制硬件,服务于软件. 操作系统的位置 操作系统位于软件和硬件之间.操作系统由内核(运行于内核态,控制硬件)和系统调用(运行于用户态,为软件提供一个调用接口)组成 **操作系统的功能 1.为应用程序提供如何使用硬件资源的抽象 2.使硬件和软件的应用变的有序化 **多道技术 多道指的是多道程序 空间上复用:内存可以存在多个文件,内存必须实现物理级别隔离,特点(安全性,稳定性) 时间上的复用:CPU可以切换(一个软件占用CPU时间过长,

有个名字叫随便乱记

<img src="image.jpg" data-src-600px="image-600px.jpg" data-src-800px="image-800px.jpg" /> 对应的CSS代码: @media (min-device-width:600px){ img[data-src-600px]{ content: attr(data-src-600px,url); } } @media (min-device-width:8

无聊记记

然后呢,我分别返回视图名为a和b:为什么a能找到,而b的时候是404:我配置了两个视图解析器,第一个找不到的话,第二个能找到啊?遇到过这个问题的朋友基本上会有类似的问题: 2.分析 此处我们使用了InternalResourceViewResolver,其有一个buildView方法,该方法一定会创建一个View:所以呢View永远不为null(即使该jsp不存在):问题就是出在这:因为我们使用这个的时候默认是使用servlet forward转发的,此时并不知道该jsp是否存在. 3.解决方案

NG2&amp;4折腾记 --- 记NG2升级NG4 RC1之修正问题跑起来

前言 尝试把正式项目NG2.X升级到RC1..修正一些问题可以正确跑起来,等下回滚嗯... 问题1:template标签已经废弃了 信息来源:启动的时候控制台有提示,官方日志也有说 解决方案:全局搜索 ,替换<ng-template></ng-template> 问题2: 动画已经独立出一个专门的模块 信息来源:官方文档,及手动不信邪尝试[动画的一些引入已经不包含在@angular/core]了: 解决方案: 手动搜索引入动画的页面,还好之前有过分离一下,改起来不是很多(个别写在c

tensorflow 学习记记——环境安装

环境:centos 8.0.1905用jupyter huanjing https://tensorflow.google.cn/install/docker [[email protected] ~]$ sudo podman run -it -rm -p 8888:8888 tensorflow/tensorflow:1.15.2-py3-jupyter [sudo] david 的密码: ________ _______________ ___ __/___________________

随便写写2014创业记(二)

这篇文章既然已经开始写了,那就坚持写完吧.可能文章中有很多不符合各位胃口的,请暂且不要去理会其是不是做错了还是做对了,经过这么长的时间我明白一个很简单的道理,只要你做事情就肯定会有错的地方或者不如意的地方. 四. 坚持 每次出去户外下山之后心里总是给自己说一句"我活在回来了",这话当然有点夸张.2014年这一年我很庆幸的说"我们公司活下来了".对于2014年上半年来说是痛苦的半年,去年展望的美好全在今年上半年破灭.基本上过年前后属于一个市场淡季,很多项目接洽工作都没

Designing Evolvable Web API with ASP.NET 随便读,随便记 “The Internet,the World Wide Web,and HTTP”——HTTP

HTTP 我们将只聚焦在于与创建 Web APIs有关的部分. HTTP 是信息系统中的一个应用层协议,是Web的支柱. 其原先由 Berners-Lee, Roy Fielding 和 Henrik Frystyk Nielsen 三位计算机科学家们创作的.HTTP 为 客户端与服务器端之间跨网络相互传输信息定义了一个接口.它隐藏了双方的实现细 节. HTTP 设计用来戏剧性地改变系统,而容许一定程度上的延迟和数据的过时. 这种设计允许 计算机中间媒体,如代理服务器来协调通信,提供诸多好处,

Designing Evolvable Web API with ASP.NET 随便读,随便记 &ldquo;The Internet,the World Wide Web,and HTTP&rdquo;

1982年,诞生了 Internet; 1989年,诞生了World Wide Web . "World Wide Web"的构造为主要由 三部分构成: resources 资源 URIs 统一资源标识符 representations  呈现 其中,资源并不特指数据库之类的.任何东西可以是资源. URIs 分为两类: URLs 和URNs . URL 具有标识,并定位资源的功能. URN 则只是起标识作用. 通常讲,URI 默认指的是 URL. Google 建议,不要对实施了缓存的

XNA Game Studio 4.0 Programming 随便读,随便记 &ldquo;Game Class&rdquo;

XNA 中的 Game 类,是所有神奇事情发生的地方.几乎游戏中所有的事情都由它来操办. 它是项目中的王者,让我们深入窥探一番: 虚方法 Game 本身从众多其它地方继续了许多能力才能完成游戏中的事情.因而它必然会重写一些方法, 以更好地完成任务.我们已经看到了一些: Initialize ,如你所见,这个方法在Game类自身创建后,调用一次.在这里你可 以执行一些初始化游戏的动作,比如加载游戏的其它组件. Update ,这个方法,顾名思义,就是用来更新的.你可以在这里执行游戏状态的 更新.比