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,) 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的更多相关文章
- Golang 常见设计模式之单例模式
之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式.单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在.根据这一特 ...
- Golang 常见设计模式之选项模式
熟悉 Python 开发的同学都知道,Python 有默认参数的存在,使得我们在实例化一个对象的时候,可以根据需要来选择性的覆盖某些默认参数,以此来决定如何实例化对象.当一个对象有多个默认参数时,这个 ...
- golang 常见疑惑总结
经常会有一些朋友问go语言的一些问题和疑惑,其实好多问题在官方文档和stackoverflow里都有详细的讲解,只要你肯花时间读一遍官方文档和Effective Go基本上都有找到答案.本文总结一下大 ...
- Golang常见误区(二)
35. 关闭 HTTP 的响应体 使用 HTTP 标准库发起请求.获取响应时,即使你不从响应中读取任何数据或响应为空,都需要手动关闭响应体.新手很容易忘记手动关闭,或者写在了错误的位置: // 请求失 ...
- Golang gRPC微服务01: 介绍
gRPC 是什么 gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信.底层通信采用的是 HTTP2 协议.gRPC在设计上使用了 ProtoBuf 这种接口描述语言.这种IDL语言可以 ...
- Golang 源码解读 01、深入解析 strings.Builder、strings.Join
strings.Builder 源码解析. 存在意义. 实现原理. 常用方法. 写入方法. 扩容方法. String() 方法. 禁止复制. 线程不安全. io.Writer 接口. 代码. stri ...
- Golang常见误区(一)
1.左大括号一般不能单独一行 在其他大多数语言中,{ 的位置你自行决定.Go 比较特别,遵守分号注入规则(automatic semicolon injection):编译器会在每行代码尾部特定分隔符 ...
- golang常见错误
import import unuse package: error : imported and not used: "os" := = c := 1 // error non- ...
- VS编译常见错误枚举01
fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x0403. Valu ...
随机推荐
- Linux操作系统六大优点
打开百度App,看更多图片 1.免费开源.Linux是一款完全免费的操作系统,任何人都可以从网络上下载到它的源代码,并可以根据自己的需求进行定制化的开发,而且没有版权限制. 2.模块化程度高.Linu ...
- Oracle开放1521端口 telnet不通解决办法
在windosw虚拟机server2012上安装Oracle数据库后,远程连接失败,报 java.sql.SQLException: The Network Adapter could not est ...
- Java调用WebService方法总结(9,end)--Http方式调用WebService
Http方式调用WebService,直接发送soap消息到服务端,然后自己解析服务端返回的结果,这种方式比较简单粗暴,也很好用:soap消息可以通过SoapUI来生成,也很方便.文中所使用到的软件版 ...
- 采集15个代理IP网站,打造免费代理IP池
采集的站点: 免费代理IP http://ip.yqie.com/ipproxy.htm66免费代理网 http://www.66ip.cn/89免费代理 http://www.89ip.cn/无忧代 ...
- Python 实现自动导入缺失的库
原文:由浅入深:Python 中如何实现自动导入缺失的库? 作者:豌豆花下猫 在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No module nam ...
- Android Jetpack组件之Lifecycles库详解
Android Jetpack 组件是库的集合,这些库是为了协同工作而构建的,不过也可以单独采用,接下来会一一详细地学习这些库, 下面源码版本是com.android.support:appcompa ...
- 昨日万圣节ABAP怪兽级代码谜团,公布答案啦
首先非常感谢大家在周末还抽出宝贵的时间耗在Jerry昨天发布的文章 一段让人瑟瑟发抖的ABAP代码 上面. 虽然Jerry在文末开玩笑的声称,只有文章阅读量上千或者评论数超过50,才公布答案.其实这只 ...
- vscode编辑器自定义配置
{ //删除文件确认 "explorer.confirmDelete": false, // 主题 "workbench.iconTheme": "v ...
- 【转】如何使用jupyter编写数学公式(译)
[1.如何使用jupyter编写数学公式(译)][1] [1]: https://www.jianshu.com/p/93ccc63e5a1b
- git 放弃merge 回到上一次commit
用git reset --hard 放弃正在合并中merge,返回上一次的commit