<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

线程上下文切换和进程上下文切换的区别

线程上下文切换和进程上下问切换一个最主要的区别是线程的切换虚拟内存空间依然是相同的,但是进程切换是不同的。这两种上下文切换的处理都是通过操作系统内核来完成的。内核的这种切换过程伴随的最显著的性能损耗是...
  • weiyuefei
  • weiyuefei
  • 2016年07月23日 12:17
  • 1802

Go Context包使用

前言 做为go的使用者,大家应该都多多少少的见过Context包。可是因为我得懒惰都没有跳转进去好好看看,导致我对Context包理解并不深。写博客是一个很好的方式提醒自己不要懒惰,而且还能当成自己...
  • Paddy90
  • Paddy90
  • 2017年12月11日 18:39
  • 73

go context专题(三)- context 工作机制和代码分析

go context专题(二)- context 设计思想和用法
  • hittata
  • hittata
  • 2017年08月29日 20:58
  • 328

使用Golang的Context管理上下文

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

协程分析之context上下文切换

协程现在已经不是个新东西了,很多语言都提供了原生支持,也有很多开源的库也提供了协程支持。最近为了要给tbox增加协程,特地研究了下各大开源协程库的实现,例如:libtask, libmill, boo...
  • waruqi
  • waruqi
  • 2016年11月17日 16:01
  • 2256

Go语言简单实现FTP协议.

package ftp import ( "errors" "fmt" "io" "net" "os" "strconv" "strings" ) type Ftp struct {...
  • fyxichen
  • fyxichen
  • 2015年09月24日 13:13
  • 2735

spring-context.jar jar包 上下文

  • 2012年05月26日 22:41
  • 444KB
  • 下载

利用Spring Context上下文创建自定义对象

  • 2014年07月04日 19:34
  • 2.72MB
  • 下载

Android中上下文(context)用法详解

  • 2016年08月26日 20:30
  • 49KB
  • 下载

几个 Context 上下文的区别

在 java 中, 常见的 Context 有很多,  像: ServletContext, ActionContext, ServletActionContext, Application...
  • Anglebeat
  • Anglebeat
  • 2014年06月17日 10:49
  • 1759
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:<5> go 上下文传递context
举报原因:
原因补充:

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