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

Golang 文件操作的深入研究

关于几种读取文件方法的详细区别 一般来说常用的有四种 使用File自带的Read方法 使用bufio库的Read方法 使用io/ioutil库的ReadAll() 使用io/ioutil库的ReadFile() 先说结论 当每次读取块的大小小于4KB,建议使用bufio.NewReader(f), 大于4KB用bufio.NewReaderSize(f,缓存大小) 要读Reader, 图方便用ioutil.ReadAll() 一次性读取文件,使用ioutil.ReadFile() 反正不建议用普通的Read 总之要性能就bufio,方便就ioutil https://segmentfault.com/a/11... 这篇文章有深入研究 以下列出各种方法的示例 OS包 func read1(p...阅读全文

golang ioutil.ReadAll引发的内存异常

ioutil.ReadAll 是一个常用的数据读取方法,经常用来读取http请求的response数据,或者读取文件数据。 demo1: http func handle(r *http.Request, w http.ResponseWriter) { file, err := os.Open("tmp.zip") // error checks... b, err := ioutil.ReadAll(file) // error checks fmt.FPrintf(w, b) } demo2 : 模拟shell md5sum 获取文件MD5 func genmd5(file string) string{ cf, err := os.Open(file) //err check def...阅读全文

博文 2020-01-17 01:32:46 Cargador

Kafka存储机制是怎样的?

kafka通过topic来分主题存放数据,主题内有分区,分区可以有多个副本,分区的内部还细分为若干个segment。 所谓的分区其实就是在kafka对应存储目录下创建的文件夹,文件夹的名字是主题名加上分区编号,编号从0开始。 **一、segment** 所谓的segment其实就是在分区对应的文件夹下产生的文件。 一个分区会被划分成大小相等的若干segment,这样一方面保证了分区的数据被划分到多个文件中保证不会产生体积过大的文件;另一方面可以基于这些segment文件进行历史数据的删除,提高效率。 一个segment又由一个.log和一个.index文件组成。 **1..log** .log文件为数据文件用来存放数据分段数据。 **2..in...阅读全文

golang的websocket封装

实现代码如下: import ( "errors" "github.com/gorilla/websocket" "sync" ) type Connection struct { wsConn *websocket.Conn inChan chan []byte outChan chan []byte closeChan chan byte mutex sync.Mutex isClosed bool } func InitConnection(wsConn *websocket.Conn)(conn *Connection ,err error){ conn=&Connection{ wsConn:wsConn, inChan:make(chan []byte,1000), outCha...阅读全文

博文 2018-12-19 13:34:47 小小Desperado

Golang的socket编程(四):解决粘包问题及制定通信协议

一、概述前面已经完成了一个完美的多并发CS模型,但美中不足的是没有解决粘包问题。 1.1 什么是粘包问题?在网络传输中,数据都是通过数据流来传输的,也就是以比特来传输。传输的过程中我们可能会遇到各种各样的问题导致数据传输异常,最常见的就是网络发送时延。网络时延会导致服务端此时收到的数据的时间有偏差,然后就导致数据接收数据的时间不一致。 可以看一个例子,修改上篇的服务端和客户端为以下内容: 1234567891011121314151617for { data := make([]byte, 2048) n, err := conn.Read(data) if n == 0{ fmt.Printf("%s has disconnect", conn.RemoteAddr()) break } ...阅读全文

博文 2018-05-17 09:28:49 马谦的博客

小猿圈分享-golang实现协程安全的几种方式

近些年go语言越来越多的被用在公司的开发中,同时学习go语言的朋友越来越多,小猿圈也为了跟上时代的脚步,给大家整理一些用go语言实现协程安全的几种方式。1.channel - monitor goroutinevar deposits =make(chan int) // send amount to depositvar balances =make(chan int) // receive balancefunc Deposit(amountint) { deposits <- amount }func Balance()int { return <-balances }func teller() { var balance int // balance is confined tote...阅读全文

博文 2019-05-16 13:34:39 小猿圈IT教育

Golang读取文件三种方式

golang读取文件操作 func ReadFiles() { // ReadFile file, err := ioutil.ReadFile("./demo/mongo.go") if err != nil { fmt.Println(err.Error()) } else { fmt.Println(string(file)) } // open read f, err := os.Open("./demo/mongo.go") if err != nil { fmt.Println(err.Error()) } else { defer f.Close() var strings string for { buf := make([]byte, 1024) n, err := f.R...阅读全文

博文 2020-04-11 13:32:42 是个懒人

Bufio中的一些疑问

各位大神可以帮忙解读下面的代码吗?菜鸟刚写,有的地方了解得不透 万分感激 ```go func main() { sr := strings.NewReader("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890") buf := bufio.NewReaderSize(sr, 0) b := make([]byte, 10) //返回缓存区,未读取的数据长度 fmt.Println(buf.Buffered()) s, _ := buf.Peek(5) s[0], s[1], s[2] = 'a', 'b', 'c' fmt.Printf("%d %q\n", buf.Buffered(), s) b...阅读全文

golang 按行读取、读取整个文件

参考如下: https://studygolang.com/articles/21868?fr=sidebar 读取整个文件的四种方式: https://www.jianshu.com/p/711c453bff16 golang 按行读取文件 file, err := os.Open("app-2019-06-01.log") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { lineText := scanner.Text() } golang 按文件读取 b, err := ioutil.ReadFile("app-2019-...阅读全文

博文 2020-01-15 13:32:41 翻江倒海一条鱼

Golang教程:goroutine信道

在上一篇教程中,我们讨论了如何使用协程实现并发。在这篇教程中,我们将讨论信道以及如何使用信道实现协程间通信。 什么是信道 信道(Channel)可以被认为是协程之间通信的管道。与水流从管道的一端流向另一端一样,数据可以从信道的一端发送并在另一端接收。 声明信道 每个信道都有一个与之关联的类型。此类型是允许信道传输的数据类型,除此类型外不能通过信道传输其他类型。 chan T 是一个 T 类型的信道。 信道的 0 值为 nil。值为 nil 的信道变量没有任何用处,我们需要通过内置函数 make 来创建一个信道,就像创建map和 slice一样。 下面的代码声明了一个信道: 1 package main 2 3 import "fmt" 4 5 func main() { 6 var a ch...阅读全文

博文 2018-06-07 15:30:01 liuzhongchao

golang实现文件copy

package main import ( "fmt" "io" "os" ) func main() { //打开源文件 sFile,err := os.Open("C:/GoProject/file/helloworld.txt") defer sFile.Close() if err !=nil{ fmt.Println("os.Open err = ",err) return } //创建目标文件 tFile,err := os.Create("C:/GoProject/file/helloworld_copy.txt") defer tFile.Close() if err !=nil{ fmt.Println("os.Create err= ",err) } //循环读取文件,写...阅读全文

博文 2019-07-22 16:32:42 七八个星天

GoLang使用Redis

1、Redis 优势 性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作 2、安装Redis 可前往官网:https://redis.io/,redis的安装、启动这里不多做介绍 3、安装redigo开源库 可使用命令行自动安装或者到github下载手动安装 go get github.com/garyburd/redigo/redis github地址: https://github.com/garyburd/redigo 4、redigo读写redis操作demo package main import ( ...阅读全文

Go 中 io 包的使用方法

前言 在 Go 中,输入和输出操作是使用原语实现的,这些原语将数据模拟成可读的或可写的字节流。为此,Go 的 io 包提供了 io.Reader 和 io.Writer 接口,分别用于数据的输入和输出,如图: Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作本文重点介绍如何实现标准库中 io.Reader 和 io.Writer 两个接口,来完成流式传输数据。 io.Reader io.Reader 表示一个读取器,它将数据从某个资源读取到传输缓冲区。在缓冲区中,数据可以被流式传输和使用。如图: 对于要用作读取器的类型,它必须实现 io.Reader 接口的唯一一个方法 Read(p []byte)。换句话说,只要实现了 Read(p []byte) ,那它就是一个...阅读全文

博文 2018-07-11 11:34:44 simon

Golang文件读取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/naiwenw/article/details/79281208 参考 Go实战–golang中读写文件的几种方式 读文件 读取的文件放在file/test:也就是file包下的test这个文件,里面写多一点文件 读文件方式一:利用ioutil.ReadFile直接从文件读取到[]byte中 func Read0() (string){ f, err := ioutil.ReadFile("file/test") if err != nil { fmt.Println("read fail", err) } return string(f) } 读文件方式二:先从文件读取到file中,在从fil...阅读全文

博文 2018-12-17 18:31:33 naiwenw

Go基础系列:读取标准输入

fmt包中提供了3类读取输入的函数: Scan家族:从标准输入os.Stdin中读取数据,包括Scan()、Scanf()、Scanln() SScan家族:从字符串中读取数据,包括Sscan()、Sscanf()、Sscanln() Fscan家族:从io.Reader中读取数据,包括Fscan()、Fscanf()、Fscanln() 其中: Scanln、Sscanln、Fscanln在遇到换行符的时候停止 Scan、Sscan、Fscan将换行符当作空格处理 Scanf、Sscanf、Fscanf根据给定的format格式读取,就像Printf一样 这3家族的函数都返回读取的记录数量,并会设置报错信息,例如读取的记录数量不足、超出或者类型转换失败等。 以下是它们的定义方式: $ go...阅读全文

博文 2018-11-23 09:11:42 f-ck-need-u

Golang文件读写

创建文件通过os包的Create、NewFile方法创建func Create(name string)(file *File,err Error)func NewFile(fd uintprt,name string)*File打开文件func Open(name string)(file *File,err Error)func OpenFile(name string,flag int,perm uint32)(file *File,err Error)写文件func (file *File) Write(b []byte)(n int,err Error)func (file *File)WriteAt(b []byte,off int64)(n int,err Error)func...阅读全文

博文 2018-10-28 23:34:39 水无寒

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/74777112 生命不止,继续 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 retur...阅读全文

博文 2018-12-15 13:31:32 wangshubo1989

open-falcon-hbs学习

open-falcon-hbs 标签(空格分隔): go falcon 主要功能 处理agent心跳请求,填充host表 ip白名单下发所有agent 下发执行插件信息 下发监控端口、进程 缓存监控策略 模块结构 内存数据Map结构 HostMap: (hostname, hostId int) HostGroupsMap: (hostId, groupsId []int) GroupPlugins: (groupId, pluginsPath []string) GroupTemplates: (groupId, templatesID []int) TemplateCache: (templateId, Template) type Template struct { Id int `j...阅读全文

博文 2017-02-09 08:29:08 SkyWay

golang 读取文件的四种方式

参考 Go实战--golang中读写文件的几种方式 读文件 读取的文件放在file/test:也就是file包下的test这个文件,里面写多一点文件 读文件方式一:利用ioutil.ReadFile直接从文件读取到[]byte中 func Read0() (string){ f, err := ioutil.ReadFile("file/test") if err != nil { fmt.Println("read fail", err) } return string(f) } 读文件方式二:先从文件读取到file中,在从file读取到buf, buf在追加到最终的[]byte func Read1() (string){ //获得一个file f, err := os.Open("fi...阅读全文

博文 2019-07-05 11:32:45 w85278161

go实现文件的创建、删除和读取

文件目录的创建和删除 package main import( "fmt" "os" ) func main(){ //创建目录和权限 os.Mkdir("./benben",0777) //创建多级目录和设置权限 os.MkdirAll("./benben/test",0777) //删除目录 err:=os.Remove("./benben") if err!=nil{ fmt.Println(err) } //删除多级目录 os.RemoveAll("./benben") } 文件的创建 package main import ( "os" "fmt" ) func main(){ //文件的创建,Create会根据传入的文件名创建文件,默认权限是0666 file,err:=os.C...阅读全文

博文 2019-02-04 12:34:42 w85278161

golang os.File 读取内容在Mac和Linux表现行为不同

package mainimport ("io/ioutil""log""os""time")func main() {f, err := os.OpenFile("/tmp/tmp_file", os.O_RDWR|os.O_CREATE|os.O_EXCL, 0600)if err != nil {log.Fatal(err)}defer f.Close()defer os.Remove(f.Name())b, err := ioutil.ReadAll(f)if err != nil {log.Fatal(err)}log.Printf("content: %s\n", string(b))time.Sleep(1 * time.Minute)f.Seek(0, 0)b, err = ...阅读全文

博文 2019-08-25 19:02:40 hell0_98a8

golang中crypto/elliptic包

elliptic包实现了几条覆盖素数有限域的标准椭圆曲线。 type Curve type Curve interface { // Params返回椭圆曲线的参数 Params() *CurveParams // IsOnCurve判断一个点是否在椭圆曲线上 IsOnCurve(x, y *big.Int) bool // 返回点(x1,y1)和点(x2,y2)相加的结果 Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int) // 返回2*(x,y),即(x,y)+(x,y) Double(x1, y1 *big.Int) (x, y *big.Int) // k是一个大端在前格式的数字,返回k*(Bx,By) ScalarMult(x1, y1 *bi...阅读全文

博文 2018-12-09 14:34:43 laijh

go-读取输入参数

前言 编写程序的时候,需要读取用户输入的参数来做一些事情。在golang里面有两个库可以来制作这块的功能。 flag flag包,加载输入信息。官方两个例子: // Example 1: A single string flag called "species" with default value "gopher". var species = flag.String("species", "gopher", "the species we are studying") // Example 2: Two flags sharing a variable, so we can have a shorthand. // The order of initialization is undef...阅读全文

博文 2020-01-31 18:32:41 阿彪2020

golang读取文本文件(转)

一般文件比较小的话可以将文件全部读入内存中,然后转换成string再按行分割一下: func GetFileContentAsStringLines(filePath string) ([]string, error) { logger.Infof("get file content as lines: %v", filePath) result := []string{} b, err := ioutil.ReadFile(filePath) if err != nil { logger.Errorf("read file: %v error: %v", filePath, err) return result, err } s := string(b) for _, lineStr :=...阅读全文

博文 2019-06-16 17:32:40 杜子龙

chan

1.主协程只负责调用子协程,但是不会被子协程阻塞2.在主协程中,无缓冲的chan需要输入输出成对出现,否则会死锁3.select 特殊处理可以阻止死锁的发生,或者使用缓冲chan4.主协程读取空的chan(若果永远没有输入-死锁,如果子协程有输入-正常)package mainimport ( "fmt" "time")var send = make(chan string,1)func goroutine2(){ fmt.Println(111) time.Sleep(5000*time.Millisecond) send <- "sss"}func main() { fmt.Println("Hello Golang") go goroutine2() fmt.Println(<- se...阅读全文

博文 2019-09-30 15:32:49 aside section ._1OhGeD

土拨鼠goroutine读取数据和chan的关系.

1 goroutine之间通信go推荐使用chan的方式,chan本身是安全的有类型的 2 chan的数据结构在src/runtime/hchan中 type hchan struct { //当前队列中剩余元素的个数 qcount uint // total data in the queue //环形队列的长度可以存放数据的长度 dataqsiz uint // size of the circular queue //环形队列的指针 buf unsafe.Pointer // points to an array of dataqsiz elements //每个元素的大小 elemsize uint16 //表示的关闭状态 closed uint32 //元素的类型 elemtype...阅读全文

博文 2019-08-28 14:19:29 blackdinosuar

golang源码分析 sync.Once

# 源码分析 sync.Once ## 源码 ``` func (o *Once) Do(f func()) { if atomic.LoadUint32(&o.done) == 1 { return } // Slow-path. o.m.Lock() defer o.m.Unlock() if o.done == 0 { defer atomic.StoreUint32(&o.done, 1) f() } } ``` ## 疑问 + 为什么要把原子操作和锁一起用? + 我没能理解为什么要使用原子操作,试想如果o.Do已经成功执行过一次的情况,此时o.done的值为1,如果同时有100个线程调用o.Do,那么由于 atomi...阅读全文

golang 文件操作

golang 文件操作 获取文件大小 "path/filepath" import ( "path/filepath" ) func GetFileSize(filename string) int64 { var size int 64 filepath.Walk(filename, func(path string, f os.FileInfo, err error) error { if err != nil{ return err }else{ result = f.size(); return nil } }) return result; } 读取文件 import ( "fmt" "os" ) func ReadFile(){ filePath := './data.json'...阅读全文

博文 2019-08-23 10:33:03 直立猿

关于文本读取的问题

func readMaze(fileName string) [][]int{ file, err := os.Open(fileName) if err != nil{ panic(err) } var row, col int fmt.Fscanf(file, "%d %d", &row, &col) maze := make([][]int, row) for i := range maze { maze[i] = make([]int, col) for j := range maze[i] { fmt.Fscanf(file, "%d", &maze[i][j]) } } return maze } func main() { maze := readMaze("src/maze/...阅读全文

博文 2018-09-17 17:34:59 Mosan

业务总结

业务笔记 在数据库中存表情 https://www.zhihu.com/question/21873949 什么时候选择前后分离,什么时候选择数据绑定? 通常我们经常说前后分离比数据硬绑定来得优雅,来的方便,however,不同的方式有不同的业务需求。 举个例子:对于app的个人用户界面,如果采用前后分离调接口的方式,那么会出现界面加载完毕,而数据后加载,也就是说:我本身已经登录了这个app,在下拉后有短时间的==请登录==三个字停留,这样用户体验是相当不好的,至少用户对你这个系统的稳定性、公司的稳定性和安全性产生了怀疑,让用户抱着怀疑的态度用你的产品,如果你的产品不是特别刚需和具有独特性,可能你就宣布GG了。 举例二:比如你的文章列表和文章界面使用了前后分离,即使是数据后显示出来,这样也是...阅读全文

博文 2017-09-06 15:34:47 yulibaozicom

golang修仙记之gorm(一)

学习了如何连接数据库、简单的错误处理、关闭数据库、创建表、创建表中的一条记录、读取表的记录、更新表的记录、删除标的记录 package main import ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" "time" ) type User struct { gorm.Model Name string Age int Birthday time.Time } func main() { // connect the database db, err := gorm.Open("mysql", "user:password@tcp(ip:port)/database?charset=utf8&par...阅读全文

博文 2019-03-09 12:35:42 PowerMichael

Golang使用CSV读取、导出文件

导出csv文件 func WriteCsv() { //创建文件 f, err := os.Create("test.csv") if err != nil { panic(err) } defer f.Close() // 写入UTF-8 BOM f.WriteString("\xEF\xBB\xBF") //创建一个新的写入文件流 w := csv.NewWriter(f) data := [][]string{ {"1", "刘备", "23"}, {"2", "张飞", "23"}, {"3", "关羽", "23"}, {"4", "赵云", "23"}, {"5", "黄忠", "23"}, {"6", "马超", "23"}, } //写入数据 w.WriteAll(data)...阅读全文

博文 2020-03-25 23:32:48 是个懒人