专栏首页landvgolang 常见变成问题01

golang 常见变成问题01

Golang常见编程问题

--语言简单

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

values := []string{"a", "b", "c"}
for _, v := range values {
go func() {
fmt.Println(v)
}()
}

--goroutine 通信

  • 消息机制基于通信来共享。
  • go中goroutine之间是通chan通讯的,chan的处理了不少用到select
  • 当多个receiver channel都处于就绪状态时,激活的channel是随机的。
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 放数据

func putSignal(ch chan struct{}, sign struct{}) (ok bool) {

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

cpu 消耗问题 select 滥用用引发

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [OHIF-Viewers]医疗数字阅片-医学影像-cornerstone-core-Cornerstone.js-Cornerstone Examples-基石实例-下

    This is an example of displaying a ct image along with buttons to set ww/wc pres...

    landv
  • 提升营业额的正确方法

    怎样才能让一个酒店赚钱?说起来其实很简单:一方面提高营业额;一方面降低各种成本,它们的差距越大,赚钱越多。

    landv
  • 烽火2640路由器命令行手册-04-网络协议配置命令

    配置静态ARP映射,静态ARP映射会永久保留在ARP缓存中。如果要删除配置的静态ARP映射的话,使用 no arp 命令。

    landv
  • 求一个数的临近的较大的2的整数次幂

    在改进一下,就判断他是不是2的次方先。如果是的话,可以直接返回。就可以得到这种方法。面试官又说,不能用循环递归,函数库。这下麻烦了。

    forxtz
  • spark求最受欢迎的老师的问题

    曼路
  • spark过节监控告警系统实现

    马上要过年了,大部分公司这个时候都不会再去谋求开新业务,而大数据工匠们,想要过好年,就要保证过年期间自己对自己的应用了如执掌。一般公司都会有轮值人员,至少要有春...

    Spark学习技巧
  • 【技术分享】随机森林分类

    Bagging采用自助采样法(bootstrap sampling)采样数据。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始...

    腾讯智能钛AI开发者
  • spark基础练习(未完)

    1、filter val rdd = sc.parallelize(List(1,2,3,4,5)) val mappedRDD = rdd.map(2*_) ...

    用户3003813
  • Spark实现排序

    question: 用spark对数据进行排序,首先按照颜值的从高到低进行排序,如果颜值相等,在根据年龄的升序排序

    曼路
  • 使用AES进行文件加密算法

    Xiaolei123

扫码关注云+社区

领取腾讯云代金券