<5> go 上下文传递context

原创 2015年11月19日 21:17:42

有go有channal,slick,map,interface,func等等,其中func可以当作参数传递的这个功能也是很多动态语言支持的。
现在看下怎么使用


import (
    "fmt"
)

type Do struct {
    Name string
}

func (this Do) Lock() {
    fmt.Println(this.Name + " Lock ...")
}

func (this Do) UnLock() {
    fmt.Println(this.Name + " Unlock ~")
}

// 假设需要做加锁解锁
func Say() {
    do := Do{Name: "Say"}
    do.Lock()
    defer do.UnLock()
    fmt.Println("say doing")
}
// 假设需要做加锁解锁
func Fuck() {
    do := Do{Name: "Fuck"}
    do.Lock()
    defer do.UnLock()
    fmt.Println("fuck doing")
}

// 改造 -withContext
func withDoContext(fn func()) {
    do := Do{Name: "do"}
    do.Lock()
    defer do.UnLock()

    fn()
}

func Quit() {
    withDoContext(func() {
        fmt.Println("quit doing")
    })
}

func Reboot() {
    fmt.Println("reboot doing")
}

// 带有返回值的context

// 改造 -withContext
func withDoContextString(fn func() string) string {
    do := Do{Name: "do"}
    do.Lock()
    defer do.UnLock()

    return fn()
}

func main() {
    fmt.Println("Start Main func()")
    Say()
    Fuck()
    // 改造后
    Quit()
    withDoContext(Reboot)

    msg := withDoContextString(func() string { return "hahah" })
    fmt.Println("msg ", msg)
}

输出:

Start Main func()
Say Lock ...
say doing
Say Unlock ~
Fuck Lock ...
fuck doing
Fuck Unlock ~
do Lock ...
quit doing
do Unlock ~
do Lock ...
reboot doing
do Unlock ~
do Lock ...
do Unlock ~
msg  hahah
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

golang x/net/context包笔记

golang x/net/context包笔记基本是 https://blog.golang.org/context 的笔记,能翻墙的话,还是建议大家看看简介以前一直见到这个包,感觉很神秘,而cont...
  • sryan
  • sryan
  • 2016-07-20 15:49
  • 3155

设置聊天游戏服务器的思路

设置聊天游戏服务器的思路 转自:http://studygolang.com/articles/9627 聊天具体流程是这样,先登录帐号,获取token,验证帐号可以POST或者直接TCP...

利用ContentProvider和ContentResolver达到QQ换肤以及数据共享查询(暂无内容)

利用ContentProvider和ContentResolver达到QQ换肤以及数据共享查询(暂无内容)

Android的Intent与Intent Filter使用

Intent是一种数据结构。系统提供了三类发送Intent的函数:context.startActivity()、context.startActivityForResult(),context.st...

DOS重定向命令

">>"是DOS重定向命令.使用方式如下::/>Command FilePath如:将系统环境变量保存到C盘的1.txt文件中.运行CMD命令,执行set >> c:/1.txt
  • dyc13
  • dyc13
  • 2006-10-13 16:41
  • 1869

使用Golang的Context管理上下文

golang 1.7版本中context库被很多标准库的模块所使用,比如net/http和os的一些模块中,利用这些原生模块,我们就不需要自己再写上下文的管理器了,直接调用函数接口即可实现,利用con...

Golang context包入门

Golang context包入门 转自:http://studygolang.com/articles/9624 概述 Golang 的 context Package 提供了一种...

增强自制力遏制尖锐湿疣的发生

增强自制力遏制尖锐湿疣的发生   尖锐湿疣危害大不好治愈且易复发,下面一起看一个例子:   我是位私营企业主,饭局吃喝自然少不了,来了大客户,不容易搞定还要去洗浴,酒吧,夜总会等场合消费。谈成生意...

go程序包源码解读——golang.org/x/net/context

强烈建议读者先完成http://blog.golang.org/pipelines的阅读,此文对于go的channel的用法会让初学者有一种豁然开朗的感觉。 简介context是一个在go中时常用到的...

Golang 1.7.3 Context 简单用法.类似sync.WaitGroup

package mainimport ( "context" "fmt" "time" )func main() { ctx, cancelFunc := contex...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)