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,) go func(ch chan int) {
for{
val := <-ch
fmt.Println("val:",val)
}
}(ch) tick :=time.NewTicker( * time.Second)
for i := ;i <;i++{
select {
case ch <-i:
case <-tick.C:
fmt.Println("1 Second")
}
time.Sleep( * 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 滥用用引发

golang 常见变成问题01的更多相关文章

  1. Golang 常见设计模式之单例模式

    之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式.单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在.根据这一特 ...

  2. Golang 常见设计模式之选项模式

    熟悉 Python 开发的同学都知道,Python 有默认参数的存在,使得我们在实例化一个对象的时候,可以根据需要来选择性的覆盖某些默认参数,以此来决定如何实例化对象.当一个对象有多个默认参数时,这个 ...

  3. golang 常见疑惑总结

    经常会有一些朋友问go语言的一些问题和疑惑,其实好多问题在官方文档和stackoverflow里都有详细的讲解,只要你肯花时间读一遍官方文档和Effective Go基本上都有找到答案.本文总结一下大 ...

  4. Golang常见误区(二)

    35. 关闭 HTTP 的响应体 使用 HTTP 标准库发起请求.获取响应时,即使你不从响应中读取任何数据或响应为空,都需要手动关闭响应体.新手很容易忘记手动关闭,或者写在了错误的位置: // 请求失 ...

  5. Golang gRPC微服务01: 介绍

    gRPC 是什么 gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信.底层通信采用的是 HTTP2 协议.gRPC在设计上使用了 ProtoBuf 这种接口描述语言.这种IDL语言可以 ...

  6. Golang 源码解读 01、深入解析 strings.Builder、strings.Join

    strings.Builder 源码解析. 存在意义. 实现原理. 常用方法. 写入方法. 扩容方法. String() 方法. 禁止复制. 线程不安全. io.Writer 接口. 代码. stri ...

  7. Golang常见误区(一)

    1.左大括号一般不能单独一行 在其他大多数语言中,{ 的位置你自行决定.Go 比较特别,遵守分号注入规则(automatic semicolon injection):编译器会在每行代码尾部特定分隔符 ...

  8. golang常见错误

    import import unuse package: error : imported and not used: "os" := = c := 1 // error non- ...

  9. VS编译常见错误枚举01

    fatal error C1189: #error :  This file requires _WIN32_WINNT to be #defined at least to 0x0403. Valu ...

随机推荐

  1. Ubuntu18.04 GitLab仓库服务器搭建

    首先安装必须的一些服务 sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates sudo apt ...

  2. iOS webrtc资料总结

    1. webrtc远端图像尺寸改变时,如何调整webrtc ios view的大小 https://www.jianshu.com/p/5e1a8f5bbcf7 2. webRTC实现音频通话听筒和扬 ...

  3. 在SQL Server中,为何都建议禁止 VIA 协议,VIA协议具体内容是什么?

    在SQL Server 在SQL Server中,为何都建议禁止 VIA 协议,VIA协议具体内容是什么? 中,为何都建议禁止 VIA 协议,VIA协议具体内容是什么? 在SQL Server中,为何 ...

  4. 4.linux下配置Golang的环境变量

    装好linux后优先在linux上配置Golang开发环境. 1.到Go语言中文网下载Linux安装包 https://studygolang.com/dl 2.到下载的目录下解压,下载的文件一般在“ ...

  5. python3基础之“函数(2)”

    1.def:定义一个函数 def f(x): return x+1 #返回函数值 a=f(2) print(a) >>3 def even_odd(x): if x%2==0: " ...

  6. 微信web开发问题记录

    问题一.微信浏览器中无法使用reload重载文档[VUE框架] 问题分析: 微信不支持location.reload()方法,在微信浏览器中会失效 Vue中的路由跳转是类似于ajax局部刷新,因此使用 ...

  7. FPM-OVP增强实例-银行账户

    本文是基于NWBC银行账户信息进行增强,相关过程如下: 1.定位需要增强的界面 首先登陆SAP-GUI(尽量EN登陆,ZH可能乱码),输入TCODE:NWBC跳转到浏览器界面,新建银行账户: 注意上图 ...

  8. js 字节操作

    获取byte的高4位bit和低4位bit function getHeight4(ata){//获取高四位 int height; height = ((data & 0xf0) >&g ...

  9. Java经典逻辑编程50题 (转)

    注: 转自https://blog.csdn.net/Alias_fa/article/details/52985112  (摘了题目部分和部分分析,想看原作代码的见原作链接) [程序1] 題目:古典 ...

  10. C#中hashtable如何嵌套遍历

    嵌套hashtable的遍历取值怎么做 hastable中嵌套了hashtable,想用递归的方式把所有hashtable中的key和value取出来 foreach (DictionaryEntry ...