前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang 常见变成问题01

golang 常见变成问题01

作者头像
landv
发布2019-07-10 14:29:54
3460
发布2019-07-10 14:29:54
举报
文章被收录于专栏:landvlandv

Golang常见编程问题

--语言简单

代码语言:javascript
复制
func CopyFile (dst, src string) (w int64, err error) {
srcFile, err := os.Open (src)
defer srcFile.Close ()
if err != nil {
return
}
//using srcFile to do sth
return
}
  • 函数可以返回多个值
  • 推荐将 error 作为最后一一个返回值
  • Defer , 常用用来做资源清理、记录执行行时间等

--go range

代码语言:javascript
复制
values := []string{"a", "b", "c"}
for _, v := range values {
go func() {
fmt.Println(v)
}()
}

--goroutine 通信

  • 消息机制基于通信来共享。
  • go中goroutine之间是通chan通讯的,chan的处理了不少用到select
  • 当多个receiver channel都处于就绪状态时,激活的channel是随机的。
代码语言:javascript
复制
package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {

    runtime.GOMAXPROCS(runtime.NumCPU())
    ch := make(chan int,1024)

    go func(ch chan int) {
        for{
            val := <-ch
            fmt.Println("val:",val)
        }
    }(ch)

    tick :=time.NewTicker(1 * time.Second)
    for i := 0;i <30;i++{
        select {
        case ch <-i:
        case <-tick.C:
            fmt.Println("1 Second")
        }
        time.Sleep(200 * time.Millisecond)
    }
    close(ch)
    tick.Stop()
}

//val: 0
//val: 1
//val: 2
//val: 3
//val: 4
//val: 5
//val: 6
//1 Second
//val: 8
//val: 9
//1 Second
//val: 11
//val: 12
//val: 13
//val: 14
//1 Second
//val: 16
//val: 17
//val: 18
//val: 19
//val: 20
//val: 21
//val: 22
//val: 23
//val: 24
//1 Second
//val: 26
//val: 27
//val: 28
//val: 29

往 chan 中放数据时,如果缓冲区已经满那么将 block 以下方方式可以试探往 chan 放数据

代码语言:javascript
复制
func putSignal(ch chan struct{}, sign struct{}) (ok bool) {

select {
case ch <- sign:
ok = true
default:// 省略了会 block
}
}
return

cpu 消耗问题 select 滥用用引发

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Golang常见编程问题
    • --语言简单
      • --go range
        • --goroutine 通信
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档