golang串联编程

package main

import (

"fmt"

_ "math/rand"

_ "time"

)

type EndPoint func(req interface{}) interface{}

type Middleware func(EndPoint) EndPoint

func Chain(others ...Middleware) Middleware {

return func(e EndPoint) EndPoint {

for i := len(others) - 1; i >= 0; i-- {

e = others[i](e)

}

return e

}

}

func genMiddleware(i int) Middleware {

return func(next EndPoint) EndPoint {

fmt.Println("flag...", i)

return next

}

}

func StartMain() {

var mids []Middleware

for i := 10; i > 0; i-- {

mids = append(mids, genMiddleware(i))

}

mid := Chain(mids...)

e := func(request interface{}) interface{} {

fmt.Println("start...")

return nil

}

finalfun := mid(e)

finalfun(3)

finalfun(3)

}

时间: 2024-11-02 21:08:11

golang串联编程的相关文章

golang并发编程

golang并发编程 引子 golang提供了goroutine快速实现并发编程,在实际环境中,如果goroutine中的代码要消耗大量资源时(CPU.内存.带宽等),我们就需要对程序限速,以防止goroutine将资源耗尽.以下面伪代码为例,看看goroutine如何拖垮一台DB.假设userList长度为10000,先从数据库中查询userList中的user是否在数据库中存在,存在则忽略,不存在则创建. //不使用goroutine,程序运行时间长,但数据库压力不大 for _,v:=ra

Golang Web编程的Get和Post请求发送与解析

本文的是一篇入门文章,通过一个简单的例子介绍Golang的Web编程主要用到的技术. 文章结构包括: Client-Get 请求 Client-Post 请求 Server 处理 Get 和 Post 数据 在数据的封装中,我们部分采用了json,因而本文也涉及到Golang中json的编码和解码. 一.Client-Get package main import ( "fmt" "net/url" "net/http" "io/iou

Golang语言编程规范

Golang语言编程规范 一.说明 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须). Go宣告支持驼峰命名法,排斥下划线法. 自定义原则: a.统一工作区间,避免目录及文件名随意 b.规范变量/结构体/方法及接口名 c.规范注释 d.单元测试/程序效率等建议 两个等级: (S)建议,(M)必须.以下是细节. 二.代码组织结构 (M)一个目录只包含一个包,模块复杂拆分子模块/子目录 (S)内部项目GO

在C#中使用类golang信道编程(一)

BusterWood.Channels是一个在C#上实现的信道的开源库.通过使用这个类库,我们可以在C#语言中实现类似golang和goroutine的信道编程方式.在这里我们介绍3个简单的信道的例子. 通过信道发送消息(https://gobyexample.com/channels): static void SimpleMessage() { var channel = new Channel<String>(); Task.Run(async () => { await chan

golang 时间编程

编程离不开时间,时间管理,严格的说分成两块,一个是当前的时刻,对应的是一个点,还有是一段时间间隔.本文简单的讲讲go的时间相关的编程,比较简单,高手可以一笑而过. golang对时间的支持,是package time做的事儿,里面有好多的函数,我就不一一举例学习,毕竟这是官方文档干的事情.我们初步的学习下常用的函数. 第一个是UNIX epoch time,确切的说就是自1970-01-01 00:00:00 GMT以来的秒数,不知道如何获取的,可以在shell下执行 date +%s gola

[读书] Golang Web 编程

1.golang的安装工具 1.1 GVM 第三方开发的Go多版本管理工具 2.golang环境变量 2.1 GOROOT=D:\go (golang 安装目录) 2.2 GOBIN=D:\go\bin (golang 生成的BIN目录) 2.3 GOPAT=D:\code\golang (golang 工作区,允许多个目录,;隔开) 执行goget命令时,会将包放在第一个配置的gopath目录中 GOPATH约定三个子目录:src(源码) .bin(编译生成的文件, .a).pkg(编译后的可

Golang Sockek编程

网络基本概念 网络编程的目的:直接或间接地通过网络协议与其他计算机进行通讯 网络编程中两个主要问题: 如何准确定位网络上一台或多台主机(通过 IP 地址) 找到主机后如何进行数据传输(有 OSI 模型和 TCP/IP 模型) OSI 模型将网络分为 7 层,过于理想化,未能广泛推广 TCP/IP 是事实上的国际标准 OSI TCP/IP TCP/IP 对应的协议 应用层 应用层 HTTP.FTP.DNS 表示层 会话层 传输层 传输层 TCP.UDP 网络层 网络层 IP.ARP.ICMP 数据

golang面向对象编程思想

抽象介绍: 在定义一个结构体的时候,实际上就是把一类事物的共有属性(字段)和行为(方法) 提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象. 封装: 把抽象出的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只有通过被授权的操作(方法),才能对字段进行操作. 1)将结构体.字段(属性)的首字母小写 2)给结构体所在包提供一个工厂模式的函数,首字母大写,类似一个构造函数 3)提供一个首字母大写的Set方法(类似其它语言的public),用于对属性判断并赋值 model.g

golang代码片段(摘抄)

以下是从golang并发编程实战2中摘抄过来的代码片段,主要是实现一个简单的tcp socket通讯(客户端发送一个数字,服务端计算该数字的立方根然后返回),写的不错,用到了go的并发以及看下郝林大神是如何处理socket通讯的.具体代码记录如下,多看多学习多共勉: package main import ( "net" "strings" "fmt" "time" "io" "bytes&quo