Go语言中文网 为您找到相关结果 20

golang判断短chan channel是否关闭

golang判断短chan channel是否关闭 群里有朋友问,怎么判断chan是否关闭,因为close的channel不会阻塞,并返回类型的nil值,会导致死循环.在这里写个例子记录一下,并且分享给大家 如果不判断chan是否关闭 Notice: 以下代码会产生死循环 package main import ( "fmt" ) func main() { c := make(chan int, 10) c <- 1 c <- 2 c <- 3 close(c) for { fmt.Println(<-c) } } 判断短chan是否关闭 package main import ( "fmt" ) func main() { c := make(chan int, 10) c <- 1 c...阅读全文

博文 2015-08-13 09:00:01 moxiaopeng

golang如何优雅处理退出

有时候我们想在Go程序中处理Signal信号,比如收到SIGTERM信号后优雅的关闭程序(参看下一节的应用)。Go信号通知机制可以通过往一个channel中发送os.Signal实现。首先我们创建一个os.Signal channel,然后使用signal.Notify注册要接收的信号。package main import "fmt" import "os" import "os/signal" import "syscall" func main() { // Go signal notification works by sending `os.Signal` // values on a channel. We'll create a channel to // receive th...阅读全文

博文 2016-10-08 14:00:02 e421083458

golang官方的websocket怎么知道客户端关闭连接

目前我使用code.google.com/p/go.net/websocket包来做websocket通讯,目前有一个主动推送通知的功能需要保存所有的连接conn,然后有新消息的时候主动推送给对应的conn,但是如果一个客户的conn关闭之后,我需要移除这个conn,但是看到websocket没有对应的isClose的判断。有什么好的办法解决吗...阅读全文

golang channel的关闭问题

golang channel的关闭问题 碰到一个问题,如何判断一个channel是否已经关闭了。 答案是:没有办法 下面有一些特例用来处理channel的关闭问题。 如果确定不会向channel写入信息 下面函数可以判断一个channel是否已经关闭。 func IsClosed(ch <-chan interface{}) bool { select { case <-ch: return true default: } return false } 因为如果channel没有关闭,<-ch将不会返回,直到chanel已经被关闭。 另外,<-chan可以带两个参数: x, ok := <-ch if !ok { // closed } 处理关闭一个已经关闭的channel func MyC...阅读全文

博文 2019-03-23 12:34:41 CodingCode

golang编译程序在linux上的部署

1.交叉编译 Windows 下编译 Linux 64位可执行程序,这里需要解释一下 GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它 具体命令如下: SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go 首先进入cmd命令行,cd到go环境的安装目录下的src目录;然后依次执行以下命令(执行前先安装tdm64-gcc-4.8.1-3): set GOOS=linux set GOARCH=386 set CGO_ENABLED=0 make.bat 如果要生成64位lin...阅读全文

博文 2019-05-16 20:34:46 锐心凌志

HBase长时间无法关闭问题及处理(Waiting on regionserver(s) to go down)

HBase长时间无法关闭[Waiting on regionserver(s) to go down] 为了释放已经删除的region,重启hbase,执行./bin/stop-hbase.sh。 等了很久还未关闭,查看master日志,显示一直在等待regionserver 2015-07-08 09:11:25,800 INFO org.apache.hadoop.hbase.master.ServerManager: Waiting on regionserver(s) to go down Colander-hb01,60020,1435801056660 再去查看此regionserver情况,日志显示Region is not online 2015-07-08 09:17:34...阅读全文

博文 2016-09-04 14:00:01 u010027484

Linux下Golang编译程序在后台运行及开机启动

编译 > go build test.go 指定输出文件名 > go build -o custom_name 修改可执行权限 > chmod 777 程序名称 程序后台运行 > nohup ./custom_name & 不输出错误信息 > nohup ./custom_name >/dev/null 2>&1 & 关闭程序 查询进程号 > ps aux|grep custom_name 关闭进程 > kill 进程编号 开机启动glang > vi /etc/rc.local 添加 cd [程序路径,如:/home/website/www/] nohup ./custom_name...阅读全文

博文 2019-05-08 09:35:01 承诺一时的华丽

golang -- channel使用

Channel 重复关闭channel ch := make(chan bool) close(ch) close(ch) // 这样会panic的,channel不能close两次 读取的时候channel提前关闭了channel close(ch) i := <- ch //不会panic, 但是i读取到的是零值(""/false/nil) 向已经关闭的channel写数据 ch := make(chan string) close(ch) ch <- "test" //会panic 判断channel是否close i, ok := <- ch if ok { println(i) } else { println("channel closed") } for循环读取channel ...阅读全文

博文 2014-10-04 19:26:56 flyking

HBase长时间无法关闭问题及处理(Waiting on regionserver(s) to go down)

HBase长时间无法关闭[Waiting on regionserver(s) to go down] 为了释放已经删除的region,重启hbase,执行./bin/stop-hbase.sh。 等了很久还未关闭,查看master日志,显示一直在等待regionserver 2015-07-08 09:11:25,800 INFO org.apache.hadoop.hbase.master.ServerManager: Waiting on regionserver(s) to go down Colander-hb01,60020,1435801056660 再去查看此regionserver情况,日志显示Region is not online 2015-07-08 09:17:34...阅读全文

博文 2016-09-02 13:00:04 u010027484

HBase长时间无法关闭问题及处理(Waiting on regionserver(s) to go down)

HBase长时间无法关闭[Waiting on regionserver(s) to go down] 为了释放已经删除的region,重启hbase,执行./bin/stop-hbase.sh。 等了很久还未关闭,查看master日志,显示一直在等待regionserver 2015-07-08 09:11:25,800 INFO org.apache.hadoop.hbase.master.ServerManager: Waiting on regionserver(s) to go down Colander-hb01,60020,1435801056660 再去查看此regionserver情况,日志显示Region is not online 2015-07-08 09:17:34...阅读全文

博文 2016-09-02 12:00:01 u010027484

golang 1.8 优雅关闭

// main.go package main import ( "fmt" "log" "net/http" "os" "os/signal" "syscall" "time" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World, %v\n", time.Now()) }) s := &http.Server{ Addr: ":8080", Handler: http.DefaultServeMux, ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Secon...阅读全文

博文 2017-09-04 16:00:03 zhangboyu

golang channel 关闭方式

golang channel 关闭方式 package main import ( "fmt" "strconv" ) func publishTask(c chan string, count int) { for i := 1; i <= count; i++ { taskName := "task: " + strconv.Itoa(i) c <- taskName //publish a new task } close(c) } func receiveTask(c chan string) { closed := false for { if closed { return } fmt.Println("Waiting for a new task ...") select { ...阅读全文

博文 2018-08-28 17:38:19 夜空一起砍猩猩

golang编译程序在linux上的部署

本文主要介绍在window环境下,使用开发工具liteide对go程序进行交叉编译(在一个平台上生成另一个平台的可执行程序),将生成的可执行文件部署在Linux服务器上,使我们开发的程序能直接运行在linux上。 开发环境 开发环境为 :windows 开发IDE为:liteidex 操作步骤 1.交叉编译 Windows 下编译 Linux 64位可执行程序,这里需要解释一下 GOOS:目标平台的操作系统(darwin、freebsd、linux、windows) GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它 具体命令如下: SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go bu...阅读全文

博文 2019-02-24 19:34:42 不屈真实

golang编译程序在linux上的部署

本文主要介绍在window环境下,使用开发工具liteide对go程序进行交叉编译(在一个平台上生成另一个平台的可执行程序),将生成的可执行文件部署在Linux服务器上,使我们开发的程序能直接运行在linux上。开发环境开发环境为 :windows开发IDE为:liteidex操作步骤1.交叉编译Windows 下编译 Linux 64位可执行程序,这里需要解释一下GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)GOARCH:目标平台的体系架构(386、amd64、arm) 交叉编译不支持 CGO 所以要禁用它具体命令如下:SET CGO_ENABLED=0SET GOOS=linuxSET GOARCH=amd64go build main.go首先...阅读全文

golang并发----安全的关闭通道

在接收方从通道内拿到所有数据后发送一个done来通知发送方关闭channel func worker(msg chan string, done chan bool) { for { select { case <-done: fmt.Println("Done.") close(msg) return default: msg<-"hello world." time.Sleep(500*time.Millisecond) } } } func main() { msg := make(chan string) done := make(chan bool) timeout := time.After(5 * time.Second) // 将done传入worker 如果main接收完成...阅读全文

Golang关闭需要结束的goroutine

package main import ( "fmt" "math/rand" "time" ) func main() { newRandStream := func(done <-chan interface{}) <-chan int { randStream := make(chan int) go func() { defer fmt.Println("randstream closeed, exited!") defer close(randStream) for { select { case randStream <- rand.Int(): case <-done: return } } }() return randStream } done := make(chan i...阅读全文

博文 2019-06-14 10:02:43 FredricZhu