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

Golang 读写 Excel

Excelize 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于微软的 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。 安装 go get github.com/Luxurioust/excelize 创建 XLSX package main import ( "fmt" "os" "github.com/Luxurioust/excelize" ) func main() { xlsx := excelize.CreateFile() // Create a new sheet. xlsx.N...阅读全文

博文 2017-05-09 09:01:02 续日

golang中bytes包用法

本文转自 Golove的博客http://www.cnblogs.com/golove/p/3287729.html bytes 包中的函数和方法 // bytes 包实现了用于操作 []byte 的函数,类似于 strings 包中的函数 // bytes.go ------------------------------------------------------------ // Compare 用于比较两个 []byte,并返回 int 型结果 // a == b 返回 0 // a < b 返回 -1 // a > b 返回 1 // 如果参数为 nil 则相当于传入一个空 []byte func Compare(a, b []byte) int ---------------...阅读全文

博文 2016-01-31 20:00:01 chenbaoke

Go实战--golang中读写文件的几种方式

生命不止,继续 go go go !!! 读写文件应该是在开发过程中经常遇到的,今天要跟大家一起分享的就是在golang的世界中,如何读写文件。 使用io/ioutil进行读写文件 先回忆下之前的ioutil包介绍: Go语言学习之ioutil包(The way to go) 其中提到了两个方法: func ReadFile func ReadFile(filename string) ([]byte, error) ReadFile reads the file named by filename and returns the contents. A successful call returns err == nil, not err == EOF. Because ReadFile ...阅读全文

博文 2017-08-03 06:31:02 wangshubo1989

golang 中map并发读写操作

go中map并发使用是不安全的,当你使用goroutine同时对一个map进行读写操作时,不确定会发生什么(由于读写执行顺序不确定造成的).针对这种情况,我们要添加读写锁对sync.RWMutex其进行同步. var counter = struct{ sync.RWMutex m map[string]int }{m: make(map[string]int)} 从counter读取数据,使用读锁 counter.RLock() n := counter.m["some_key"] counter.RUnlock() fmt.Println("some_key:", n) 向counter写数据,使用写锁 counter.Lock() counter.m["some_key"]++ cou...阅读全文

博文 2015-06-17 20:02:28 chenbaoke

go中的读写锁RWMutex

读写锁是针对于读写操作的互斥锁。 基本遵循两大原则: 1、可以随便读。多个goroutin同时读。 2、写的时候,啥都不能干。不能读,也不能写。 解释: 在32位的操作系统中,针对int64类型值的读操作和写操作不可能只由一个CPU指令完成。如果一个写的操作刚执行完了第一个指令,时间片换给另一个读的协程,这就会读到一个错误的数据。 RWMutex提供四个方法: func (*RWMutex) Lock //写锁定 func (*RWMutex) Unlock //写解锁 func (*RWMutex) RLock //读锁定 func (*RWMutex) RUnlock //读解锁 代码实例: 1、可以随便读: package main import ( "sync" "time" ) v...阅读全文

博文 2015-05-07 10:48:11 baiyuxiong

Go 语言读写 Excel 文档

https://raw.githubusercontent.com/Luxurioust/excelize/master/excelize.png Excelize 是 Golang 编写的一个用来操作 Office Excel 文档类库,基于微软的 Office OpenXML 标准。可以使用它来读取、写入 XLSX 文件。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)的文档,还支持向 Excel 中插入图片,并且在保存后不会丢失图表样式。 项目主页 github.com/Luxurioust/excelize 安装 go get github.com/Luxurioust/excelize 创建 XLSX package main import ( "fmt" "os...阅读全文

博文 2017-05-15 02:40:39 xurime

Go语言(遍历文件夹)

今天来讲一个Go语言操作文件的问题,即如何遍历一个文件夹下的所有文件。 代码如下 package main import ( "path/filepath" "os" "fmt" "flag" ) func getFilelist(path string) { err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error { if f == nil { return err } if f.IsDir() { return nil } println(path) return nil }) if err != nil { fmt.Printf("filepath.Walk() returned %v\n...阅读全文

博文 2015-06-17 23:00:30 ACHelloWorld

golang日志处理

golang程序日志记录 package main import ( "flag" "fmt" "log" "os" "runtime" ) var ( logFileName = flag.String("log", "cServer.log", "Log file name") ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) flag.Parse() //set logfile Stdout logFile, logErr := os.OpenFile(*logFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if logErr != nil { fmt.Println("Fai...阅读全文

博文 2014-10-04 19:26:52 liaojie

[远程][10k-20k]Team247 招聘全栈工程师

### 关于我们 Team247 是一家位于硅谷的软件创业公司。 Team247 致力于将智慧产权投资于广大的互联网以及移动应用的初创公司,在过去的一年取得了高速的成长和发展。目前由于业务的不断增加,诚邀全栈工程师的加入 ### 待遇 - 社保补助 - 弹性化工作时间 - 灵活的工作地点 - 一年 12 天带薪假 ### 要求 - 两年以上的全栈开发经验 - 良好的英语读写能力,可以根据英文文档进行开发 - 在压力下能快速学习,按照自己的计划高质量地完成工作 - 具有团队合作精神与沟通协调能力 - 有安静的工作环境和高速网络连接 ### 联系方式 - 请发送简历至 jobs@theteam247.com,谢谢! ...阅读全文

Golang 文件读写之 os, bufio, io/ioutil 初体验

package main import ( //"bufio" "fmt" //"io" "io/ioutil" "os" "time" ) func main() { file1, err := os.OpenFile("hehehe.txt", os.O_RDWR|os.O_APPEND|os.O_CREATE, os.ModeType) if err != nil { panic(err) } defer file1.Close() // 往创建的文件中写入字符 //_, err = file1.WriteString("aaaaa\r\nbbbbb\r\ncccccc") //if err != nil { // panic(err) //} // A。 使用 bufio按行读取文件...阅读全文

博文 2014-10-09 16:00:02 hotkit

Go语言的文件操作:文件的读写,文件的新建打开和删除

# 建立与打开文件 // 新建文件可以通过如下两个方法: func Create(name string) (file *File, err Error) 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。 func NewFile(fd uintptr, name string) *File 根据文件描述符创建相应的文件,返回一个文件对象 // 通过如下两个方法来打开文件: func Open(name string) (file *File, err Error) 该方法打开一个名称为name的文件,但是是只读方式,内部实现其实调用了OpenFile。 func OpenFile(name string, flag int, perm u...阅读全文

博文 2018-10-07 02:35:15 ck_god

招聘游戏golang服务端工程师(C++、java、php做过游戏研发愿意转golang也行)

JD: 服务端开发工程师 负责网络游戏实时后端的开发工作,配合主程完成游戏功能的开发 喜爱游戏开发 本科以上学历 游戏服务端开发经验2年以上 了解分布式系统的常用架构和设计思想 英文读写能力 乐于沟通和表达 工作积极主动有责任心 公司地点在上海长宁区,靠近携程那边,薪资:15K-20K 到手薪资多 做赛车类游戏 感兴趣的简历可以投我邮箱:1586965998@qq.co...阅读全文

北京/上海/深圳 招Go(其他语言可转)

以下内容皆Copy于Gocn.. 后端工程师 工作职责: 1.负责Web后台服务开发及API架构和性能优化 2.负责开发区块链查看器、账户体系等后端系统 岗位要求: 1.两年以上C++、Java、Node.js或Golang开发经验,良好的编程风格 2.熟悉关系数据库和Key-Value数据库 3.了解常见数据队列系统,ZMQ/Kafka/RabbitMQ等 4.熟悉Linux开发环境,熟悉Git或其它代码管理工具 5.良好的英语读写能力。 其实岗位说明我觉得都长的差不多,表介意 不会Go的也行,英雄不问出处 北京有5家需求GO,1家卖矿机的,1家是迅雷旗下的,2家做比特币交易平台的,1家是正在崛起的小巨头 上海有4家需求Go, 1家做云计算的,1...阅读全文

Go语言下的文件读写操作

在Go语言中,文件是使用一个os.File类的对象指针表示的,也可以称这指针为文件句柄(filehandle),os.Stdin和os.Stdout也是属于这个*os.File类型的。 下面举例说明 package main import ( "bufio" "fmt" "io" "os" ) func main() { inputFile, inputError := os.Open(os.Args[1])//变量指向os.Open打开的文件时生成的文件句柄 if inputError != nil { fmt.Printf("An error occurred on opening the inputfile\n") return } defer inputFile.Close() in...阅读全文

博文 2014-10-23 16:00:01 学思

golang xlsx读写

func TestRequest_LoadFromRemote2(t *testing.T) { xlsxfile2, err := xlsx.OpenFile("E:/apihub/1数据核查/信息核查数据.xlsx") if err != nil{ fmt.Println( err) return } for _, sheet := range xlsxfile2.Sheets { for indexr, row := range sheet.Rows { if indexr < 2 { continue } //if indexr >= 3{ // break //} fmt.Print(fmt.Sprint(indexr)+"姓名:",strings.Trim(row.Cells[1...阅读全文

博文 2018-06-21 15:34:38 Feng_Sir

go map的并发读写

我加了锁,可还是报错。 fatal error: concurrent map iteration and map write 这是为何呢?百度的各种方法也都试了,都不行。 ```go package main import ( "fmt" "sync" ) func main() { var counter = struct{ sync.RWMutex m map[string]int }{m: make(map[string]int)} for i := 0; i < 2; i++ { go func() { for j := 0; j < 1000000; j++ { counter.Lock()...阅读全文

Golang MongoDB 驱动 mgo 的若干问题

mgo 是 MongoDB 的 Golang 驱动。 连接池 我们通过 Dial 函数创建一个新的 session: session, err := mgo.Dial(url) 创建的 session 能够和 MongoDB 集群中的所有服务器通讯。需要注意的是,对于一个集群只需要调用一次 Dial,通过此 Dial 返回的 session 的 New 和 Copy 方法能够创建更多的 session 出来,这些 session 共用底层的连接池(Dial 创建的多个 session 之间使用不同的连接池)。 更为具体的来看下 Strong session(Strong 为一种一致性模式,这里讨论 Strong session 是因为其相对简单,详见下文)。一个 Strong session...阅读全文

博文 2016-11-07 03:00:16 WHACKW

golang并发编程

golang普通方法:package main import ( "fmt" ) func rand_generator_1() int { return rand.Int() } func main() { fmt.Println(rand_generator_1()) } golang生成器:package main import ( "fmt" "math/rand" ) /** * 生成器 * 根据已知权限使用函数生成相应数据,异步调用节省了大量时间。 * @author: niuyufu */ func rand_generator_1() int { return rand.Int() } //直接返回通道channel func rand_generator_2() chan ...阅读全文

博文 2015-11-12 21:00:09 e421083458

360的Excel 文件读写库(golang)存在的一点小问题

本周使用360的Excel文件读写库时发现一个小问题 本周使用360的Excel文件的读写库的时候发现一点小问题。产生问题的代码如下: package main import excelize "github.com/360EntSecGroup-Skylar/excelize/v2" func main() { Main2() } func Main2() { f := excelize.NewFile() // Create a new sheet. index := f.NewSheet("sheet1") // Set value of a cell. f.SetCellValue("sheet1", "A2", "Hello world.") f.SetCellValue("she...阅读全文

博文 2020-01-12 23:32:52 golang推广大使

请问Go中的Channel可不可以在不写入数据的情况下判断是否可写?

小白求解。。。 类似的,还有在不执行读取动作的前提下能否判断一个channel是否可读? 我不想用select case因为那样一旦判断可写/读的话这个读写操作就事实上产生了。我需要等待两个channel同时可读的时候再将它们的值同时读出来。。...阅读全文

golang 中 channel 的非阻塞访问方法

在golang中,基本的channel读写操作都是阻塞的,如果你想要非阻塞的,可以使用如下示例: 即只要在select中加入default,阻塞立即变成非阻塞: package main import "fmt" func main() { messages := make(chan string) signals := make(chan bool) select { case msg := <-messages: fmt.Println("received message", msg) default: fmt.Println("no message received") } msg := "hi" select { case messages <- msg: fmt.Println("...阅读全文

博文 2018-10-24 15:34:49 乐剑天

golang之包和锁的机制

互斥锁 同一时刻只有一个携程在操作 package main import ( "fmt" "math/rand" "sync" "time" ) //互斥锁 var lock sync.Mutex func testMap() { var a map[int]int a = make(map[int]int, 5) a[8] = 10 a[3] = 10 a[2] = 10 a[1] = 10 for i := 0; i < 2; i++ { func(b map[int]int) { lock.Lock() b[8] = rand.Intn(100) lock.Unlock() }(a) } lock.Lock() fmt.Println(a) lock.Unlock() time.Sl...阅读全文

博文 2018-01-10 16:30:02 pyyu

go语言channel的别样用法

1.返回值使用通道 func main() { // 生成随机数作为一个服务 randService := randGenerator() // 从服务中读取随机数并打印 fmt.Printf("%d\n",<-randService) } func randGenerator() chan int { // 创建通道 out := make(chan int) // 创建协程 go func() { for { //向通道内写入数据,如果无人读取会等待 out <- rand.Int() } }() return out } 2.参数使用通道 //一个查询结构体 type query struct { //参数Channel sql chan string //结果Channel resu...阅读全文

博文 2014-10-04 19:26:43 mahang

Go 原子操作

> > 本文讲解 golang 中 sync.atomic 的常见操作 atomic 提供的原子操作能够确保任一时刻只有一个goroutine对变量进行操作,善用 atomic 能够避免程序中出现大量的锁操作。 atomic常见操作有: * 增减 * 载入 * 比较并交换 * 交换 * 存储 下面将分别介绍这些操作。 ---- 增减操作 ---- atomic 包中提供了如下以Add为前缀的增减操作: - func AddInt32(addr *int32, delta int32) (new int32) ( http://link.zhihu.com/?target=https%3A//golang.org/pkg/sync/atomic/%23AddInt32 ) - func Add...阅读全文

博文 2017-11-22 02:36:28 薛锦

(厦门)招聘公链开发工程师

岗位名称:公链开发工程师 20K-30K 坐标厦门岗位需求:1. 熟悉比特币或以太坊代码2. 了解常用的加密原理, 熟练掌握ECC加密和签名算法3. C++ 3年以上,需熟练掌握c++ new features4. 较强的英语读写能力5. 能承受较大压力加分项:1. 了解匿名技术原理2. 参与过公链底层开发3. 掌握rust或golang4. 有BAT工作经历岗位职责:参与公链开发,包括但不限于底层代码编写,数字钱包,浏览器后端代码编写以及线上部署运维等工作。有意向者简历投向407946127@qq.com(投递时注明招聘信息来源链才网)公司名称:趣熵(厦门)软件有限公司地址:厦门是湖里区万科云玺1号楼薪酬:20K-30K(具体面议...阅读全文

go源码阅读笔记(unsafe)

go源码阅读笔记(unsafe) unsafe 包主要是可以使得用户绕过go的类型规范检查,能够对指针以及其指向的区域进行读写操作。 package math import "unsafe" // Float32bits returns the IEEE 754 binary representation of f. func Float32bits(f float32) uint32 { return *(*uint32)(unsafe.Pointer(&f)) } // Float32frombits returns the floating point number corresponding // to the IEEE 754 binary representation b. fu...阅读全文

博文 2016-03-18 03:00:05 qq_15437667

用Golang写一个搜索引擎(0x02)--- 倒排索引技术

这一篇,我们来说说搜索引擎最核心的技术,倒排索引技术,倒排索引可能需要分成几篇文章才说得完,我们先会说说倒排索引的技术原理,然后会讲讲怎么用一些数据结构和算法来实现一个倒排索引,然后会说一个索引器怎么通过文档来生成一个倒排索引。 倒排索引 什么是倒排索引呢?索引我们都知道,就是为了能更快的找到文档的数据结构,比如给文档编个号,那么通过这个号就可以很快的找到某一篇文档,而倒排索引不是根据文档编号,而是通过文档中的某些个词而找到文档的索引结构。 倒排索引技术简单,高效,简直是为搜索引擎这种东西量身定做的,就是靠这个技术,实现一个搜索引擎才成为可能,我们也才能在海量的文章中通过一个关键词找到我们想要的内容。 我们看个例子,有下面的几个文档: 文档编号 文档内容 1 这是一个Go语言实现的搜索引擎 ...阅读全文

博文 2016-07-20 11:10:55 吴yh坚

ssdb的golang驱动的同步问题

如果数据库连接只有一个,在某个时间点(指的是某个及其短的时间内),多个读写的话,会出问题,修改了下,加了个mutex,算是解决了此问题,贴下备忘 var mutex sync.Mutex func (c *Client) Do(args ...interface{}) ([]string, error) { var resp []string var err error mutex.Lock() err = c.send(args) resp, err = c.recv() mutex.Unlock() return resp, err ...阅读全文

博文 2014-10-04 19:26:16 ziyouchutuwenwu

golang学习的点点滴滴:读写文件(面向过程版)

package main import ( "fmt" "bufio" "io" "os" "flag" "strconv" ) // 使用命令行 -in 默认为infile var in *string = flag.String("in", "infile", "input file name ...") var out *string = flag.String("out", "outfile", "output file name ...") func main() { // 解析命令行 flag.Parse() defer func() { // 如果发现异常... if ex := recover();nil!=ex { fmt.Println(ex) } }() value, ...阅读全文

博文 2014-10-04 19:27:45 亓斌哥哥

如何才能高效处理固定格式的数据记录?

各位大牛, 新手请教一个问题,正在做一个处理一份固定格式的数据的小程序,这个固定格式数据形式如下: (1)800种情况; (2)每种情况都有20项的配置属性; 本来打算把这些情况填到一个excel表格中,然后再利用go的相关package处理这个表格,但是觉得频繁地打开读写文件的话,程序的效率会不高。 想请教一下各位大牛,实现这样一个功能用什么方法比较好?? 谢谢...阅读全文

golang学习的点点滴滴:读写文件(面向对象版)

package main import ( "fmt" "bufio" "io" "os" "flag" "strconv" ) // 定义一个结构体 type ReadWrite struct { In *string Out *string } // 定义初始化方法 func (rw *ReadWrite) Init() { rw.In = flag.String("in", "in", "in") rw.Out = flag.String("out", "out", "out") flag.Parse() } // 定义读文件的方法 func (rw *ReadWrite) Read() (result []int, err error) { file, err1 := os.Open...阅读全文

博文 2014-10-04 19:27:44 亓斌哥哥

golang中io操作与其中读写指针移动的体现

图1 图2 从图1和图2的对比中可以 看到,图2少了第15行的读取操作,然后图2代码运行的结果,就是全部的hello worldABCDEFG,图1的代码就只有从read之后算起的ABCDEFG。原因是什么呢?读写指针在其中作怪!每次的读写操作都是从指针位置开始的。图1中,第一次read之后,读写指针已经跑到hello word这个地方了,不是在0处,所以第二次read的结果是从这个非零指针之后开始往后读的,所以结果就只有后面的ABCDEFG。图2中,刚开始没有进行read操作,所以读写指针一直保持在零处,所以下一次read是从零处开始读取的。结果为全部的hello worldABCDEFG。 图3 从图3可以看到,用buf.string()这种方式可以看到并没有进行读指针的移动。 图4 从...阅读全文

博文 2017-08-17 07:05:12 舒小贱

Golang log日志

golang控制台输出log和两种将log输出到文件的方法 func Logs() { /* O_RDWR 读写模式打开文件 O_APPEND 写操作时将数据附加到文件尾部 O_CREATE 如果不存在将创建一个新文件 */ logFile, err := os.OpenFile("./golang.log", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0766) if err != nil { panic(err.Error()) } else { // 控制台打印log log.Println([]string{"你好", "golang日志"}) // 方法一,将文件设置为log输出的文件 log.SetOutput(logFile) // 输出前缀...阅读全文

博文 2020-03-27 01:32:47 是个懒人

golang文件读写

读写文件要用到os包中的 func OpenFile(name string, flag int, perm FileMode) (*File, error) 该方法第一个参数为文件路径,第二个参数控制文件的打开方式,第三个参数控制文件模式 可用的打开方式有 const ( //只读模式 O_RDONLY int = syscall.O_RDONLY // open the file read-only. //只写模式 O_WRONLY int = syscall.O_WRONLY // open the file write-only. //可读可写 O_RDWR int = syscall.O_RDWR // open the file read-write. //追加内容 O_APPE...阅读全文

博文 2016-06-28 17:00:05 cjh1005221032

Go 并发(四):select篇

载于公众号:灰子学技术原文链接:https://mp.weixin.qq.com/s/nJRVbhRQCgWHR1eHSfBpFA一、前言介绍:对于Go语言并发通讯,是使用的协程goroutine,而协程之间的通讯采用的是channel。但是channel不管是有缓存的,还是无缓存的都会有阻塞的情况出现,只不过无缓存的阻塞会更加频繁。而协程长时间阻塞了之后,Go语言本身又没有提供这种超时的解决机制,所以开发者需要自己考虑实现这种超时机制。这种超时机制在Go语言中则是使用select来解决的。相关的背景知识:1.Go语言并发篇(一):之go语句篇:https://mp.weixin.qq.com/s/FD-MP9r5sEn1QYRAYZE_4g2.Go语言之goroutine的调度原理: ht...阅读全文

csv文件读写操作,支持追加

```go package main import ( "encoding/csv" "fmt" "io" "log" "os" ) func main() { //准备读取文件 fileName := "D:\\gotest\\src\\source\\test.csv" fs, err := os.Open(fileName) if err != nil { log.Fatalf("can not open the file, err is %+v", err) } defer fs.Close() r := csv.NewReader(fs) //针对大文件,一行一行的读取文件 for { row, err := r.Read() if err != nil && err != io....阅读全文

博文 2019-04-13 17:00:11 xiaoxuan

[新品发布]全球首个百万IOPS云盘来了 阿里云推出超高性能云盘ESSD

摘要: 搭配ECS云服务器使用, ESSD可提供单盘高达100万IOPS的随机读写能力和低至0.1毫秒的单路时延,相比SSD云盘分别提升了50倍性能上限和降低80%读写时延,单台云服务器整体存储性能提升500%. 点此查看原文:http://click.aliyun.com/m/40293/ **阿里云发布超高性能ESSD云盘 100万IOPS随机读写刷新纪录** 1月9日,阿里云正式推出全球首个跨入IOPS百万时代的云盘——ESSD,单盘IOPS高达100万,这是阿里云迄今为止性能最强的企业级块存储服务。 搭配ECS云服务器使用, ESSD可提供单盘高达100万IOPS的随机读写能力和低至0.1毫秒的单路时延,相比SSD云盘分别提升了50倍性能上限和降低80%读...阅读全文

兄弟连区块链培训教程并发技术3:管道通信

很多人喜欢Go语言,其实是因为Go语言有其独特的语言属性在支撑着其在编程语言界的发展,今天兄弟连Go语言+区块链培训老师给大家介绍一下关于Go语言并发技术3:管道通信,下面我们一起来看一下吧。( http://bt.itxdl.cn/ )channel 介绍channel 提供了一种通信机制,通过它,一个 goroutine 可以想另一 goroutine 发送消息。channel 本身还需关联了一个类型,也就是 channel 可以发送数据的类型。例如: 发送 int 类型消息的 channel 写作 chan int 。channel 创建channel 使用内置的 make 函数创建,下面声明了一个 chan int 类型的 channel:ch := make(chan int)· ...阅读全文

博文 2018-09-21 15:34:48 兄弟连区块链培训

golang文件操作

文件读写 package main import ( "io/ioutil" "os" "fmt" ) func main() { file_write("hello world!\n", "a.txt") content := file_read("a.txt") fmt.Println(content) } func file_read(path string) string { fi, err := os.Open(path) if err != nil { panic(err) } defer fi.Close() fd, err := ioutil.ReadAll(fi) fmt.Println(err) return string(fd) } func file_write(co...阅读全文

博文 2015-07-06 11:00:01 别人说我名字很长

Golang并发:无阻塞通道读写

阻塞场景 无论是有缓存通道、无缓冲通道都存在阻塞的情况。 无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景: 1)通道中无数据,但执行读通道。 2)通道中无数据,向通道写数据,但无协程读取。 有缓存通道的特点是,有缓存时可以向通道中写入数据后直接返回,缓存中有数据时可以从通道中读到数据直接返回,这时有缓存通道是不会阻塞的,它阻塞场景是: 1)通道的缓存无数据,但执行读通道。 2)通道的缓存已经占满,向通道写数据,但无协程读。 使用default实现的无阻塞通道阻塞有一个缺陷:当通道不可读或写的时候,会即可返回。实际场景,更多的需求是,我们希望尝试读一会数据,或者尝试写一会数据,如果实在没法读写再返回,程序继续做其它的事情。 使用定时器替代default可以解决这个问题,给...阅读全文

博文 2018-12-29 14:34:45 bocsoft

Go语言 线程简单读写

一个线程负责读取 主线程负责写入 // test02 project main.go package main import ( "fmt" "time" ) /* 一个线程负责读取 主程序负责写入 */ //负责读取i func Process(ch chan int) { for { i := <-ch fmt.Println("Process:", i) } } func main() { fmt.Println("Hello World!") ch := make(chan int, 1) go Process(ch) count := 1 for { select { case ch <- count: count = count + 1 default: time.Sleep(1...阅读全文

博文 2015-06-17 23:02:25 body100123

golang文件读写

读写文件要用到os包中的 func OpenFile(name string, flag int, perm FileMode) (*File, error) 该方法第一个参数为文件路径,第二个参数控制文件的打开方式,第三个参数控制文件模式 可用的打开方式有 const ( //只读模式 O_RDONLY int = syscall.O_RDONLY // open the file read-only. //只写模式 O_WRONLY int = syscall.O_WRONLY // open the file write-only. //可读可写 O_RDWR int = syscall.O_RDWR // open the file read-write. //追加内容 O_APPE...阅读全文

博文 2016-08-31 12:00:06 cjh1005221032