golang文件读取-按指定BUFF大小读取方式

a.txt文件内容:

ABCDEFGHI

HELLO GOLANG

package main
import (
  "fmt"
  "os"
  "io"
)
func main() {
  fileName := "C:\\Robert\\日志分析\\tools_go\\vdn_sqlInterface\\a.txt"
  file, err := os.OpenFile(fileName, os.O_RDWR, 0666)
  if err != nil {
    fmt.Println("Open file error!", err)
    return
  }
  defer file.Close()
  stat, err := file.Stat()
  if err != nil {
    panic(err)
  }
  var size = stat.Size()
  fmt.Println("file size=", size)
  // define read block size = 2
  buf := make([]byte, 2)
  for {
    length, err := file.Read(buf)
    if err != nil {
      if err == io.EOF {
        break
      } else {
        fmt.Println("Read file error!", err)
        return
      }
    }
    fmt.Println(length, string(buf))
  }
  fmt.Println("File read ok!")
}

输出:

每次读取2个字节的大小并输出

file size= 23
2 AB
2 CD
2 EF
2 GH
2 I
2
H
2 EL
2 LO
2 G
2 OL
2 AN
1 GN
File read ok!

补充:golang 数组append前后的地址变化

我就废话不多说了,大家还是直接看代码吧~

func main() {
 res := make([]int, 0)
 res = append(res, 1) //同函数内append前后地址不变
 for i, v := range res {
 println(i,v)
 }
}

打印:

0 1

func solve(res []int) {
 res = append(res, 1) //不在同一函数内append前后地址变
}

func main() {
 res := make([]int, 0)
 for i, v := range res {
 println(i,v)
 }
}

打印:

因为append改变了原res的地址。所以改为:

func solve(res []int) []int {
 return append(res, 1)
}

func main() {
 res := make([]int, 0)
 for i, v := range solve(res) {
 println(i,v)
 }
}

打印:

0 1

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • golang读取文件的常用方法总结

    使用go语言读取文件的各种方式整理. 一次性加载到内存中 // * 整个文件读到内存,适用于文件较小的情况 //每次读取固定字节 //问题容易出现乱码,因为中文和中文符号不占一个字符 func readAllIntoMemory(filename string) (content []byte, err error) { fp, err := os.Open(filename) // 获取文件指针 if err != nil { return nil, err } defer fp.Close(

  • 浅谈Golang是如何读取文件内容的(7种)

    本文旨在快速介绍Go标准库中读取文件的许多选项. 在Go中(就此而言,大多数底层语言和某些动态语言(如Node))返回字节流. 不将所有内容自动转换为字符串的好处是,其中之一是避免昂贵的字符串分配,这会增加GC压力. 为了使本文更加简单,我将使用string(arrayOfBytes)将bytes数组转换为字符串. 但是,在发布生产代码时,不应将其作为一般建议. 1.读取整个文件到内存中 首先,标准库提供了多种功能和实用程序来读取文件数据.我们将从os软件包中提供的基本情况开始.这意味着两个先决

  • golang 使用 viper 读取自定义配置文件

    viper 支持 Yaml.Json. TOML.HCL 等格式,读取非常的方便. viper 官网有案例:https://github.com/spf13/viper go get github.com/spf13/viper 创建 config.yaml 文件 database: driver: mysql host: 127.0.0.1 port: 3306 username: blog dbname: blog password: 123456 建一个 config.go 用于初始化配置

  • Golang 实现分片读取http超大文件流和并发控制

    分片读取http超大文件流 Golang中的HTTP发送get请求,在获取内容有两种情况. Golang发送http get请求方式 resp, err := http.Get(sendUrl) if err != nil { fmt.Println("出错", err) return } 第一种方式是直接全部读取出来,这种方式在小数据量的时候很方便. body变量直接全部接收resp响应内容 body, err2 := ioutil.ReadAll(resp.Body) 第二种方式,

  • golang逐行读取文件的操作

    我就废话不多说了,大家还是直接看代码吧~ func ReadLine(fileName string) ([]string,error){ f, err := os.Open(fileName) if err != nil { return nil,err } buf := bufio.NewReader(f) var result []string for { line, err := buf.ReadString('\n') line = strings.TrimSpace(line) if

  • 如何利用Golang解析读取Mysql备份文件

    前言 前期误操作,导致数据库表删除,虽然数据量不多,但是通过binlog恢复比较麻烦,通过备份文件来恢复,备份文件达36个G打开都是问题: 使用备份文件恢复 大文件编辑器,glogg-latest-x86_64-setup通过该文件打开备份文件,虽然过程稍慢,但是能够打开,且正常读取编辑信息,要恢复的数据量不大时采取是没问题的,但是如果表几十万行,操作起来就比较麻烦了: Golang读取备份文件 采用Golang读取,借助编程语言的优势来读取备份,经过测试读取指定备份文件(约36GB)表,大约需

  • golang文件读取-按指定BUFF大小读取方式

    a.txt文件内容: ABCDEFGHI HELLO GOLANG package main import ( "fmt" "os" "io" ) func main() { fileName := "C:\\Robert\\日志分析\\tools_go\\vdn_sqlInterface\\a.txt" file, err := os.OpenFile(fileName, os.O_RDWR, 0666) if err !=

  • Golang 文件操作:删除指定的文件方式

    我就废话不多说了,大家还是直接看代码吧~ package main import "os" func main () { err := os.Remove(logFile) if err != nil { // 删除失败 } else { // 删除成功 } } 补充:[Golang]文件/文件夹一般操作:判断.复制.删除.遍历 1. 检查指定路径是否为文件夹 func IsDir(name string) bool { if info, err := os.Stat(name); e

  • Android 按指定大小读取图片的实例

    在Android开发中,我们经常遇到Android读取图片大小超过屏幕显示的图(一般只要显示一定规格的预览图即可),在图片特别多或者图片显示很频繁的时候要特别注意这个问题,下面介绍个按指定大小读取图像的方法. 实现原理:首先获取图片文件的图像高和宽,如果小于指定比例,则直接读取:如果超过比例则按指定比例压缩读取. 捕获OutOfMemoryError时注意点:后面返回的是null,不要马上从别的地方再读图片,包括R文件中的,不然依然会抛出这个异常,一般在初始化的时候缓存默认图片,然后显示缓存中的

  • C++ 读取文件内容到指定类型的变量方法

    如下所示: #include <iostream> #include <fstream> #include <sstream> #include <string> using namespace std; int main(){ cout << "input the file name: "; string file_name; cin >> file_name; cout << endl; // if

  • .net core 读取本地指定目录下的文件的实例代码

    项目需求 asp.net core 读取log目录下的.log文件,.log文件的内容如下: xxx.log ------------------------------------------begin--------------------------------- 写入时间:2018-09-11 17:01:48  userid=1000  golds=10  -------------------------------------------end-------------------

  • Java 读取文本指定的某一行内容的方法

    Java读取文本指定的某一行内容,使用的都是IO的方法,下面具体看例子: /** * @author:罗大锤 * @date: 2017年9月6日 下午2:35:43 * @version 1.0 * @method:读取文本具体某行内容 * @parameter * @since * @return */ public class OpenTextLine { public static void main(String[] args) throws IOException { long ti

  • python读取excel指定列数据并写入到新的excel方法

    如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据--------------------------------- fileName="C:\\Users\\st\\Desktop\\test\\20170221131701.xlsx" bk=xlrd.open_workbook(fileName) shxrange=range(bk.nsheets) try: sh=bk.sheet

  • Python读取excel指定列生成指定sql脚本的方法

    需求 最近公司干活,收到一个需求,说是让手动将数据库查出来的信息复制粘贴到excel中,在用excel中写好的公式将指定的两列数据用update这样的语句替换掉. 例如: 有个A库,其中有两个A.01和A.02字段,需要将这两个字段替换到下面的sql语句中, update A set A.01 = 'excel第一列的值' where A.02 = 'excel第二列的值' 虽然excel中公式写好了,但是还需要将总计的那行复制粘贴到txt文档中,所以索性太麻烦,果断用Python写了一个自动化

  • tensorflow实现测试时读取任意指定的check point的网络参数

    tensorflow在训练时会保存三个文件, model.ckpt-xxx.data-00000-of-00001 model.ckpt-xxx.index model.ckpt-xxx.meta 其中第一个储存网络参数值,第二个储存每一层的名字,第三个储存图结构 随着训练的过程,每隔一段时间都会保存一组以上三个文件,而在训练之前我们并不知道什么时候可以达到最佳的拟合,训练时间过短会导致欠拟合,训练时间过长则会导致过拟合. 如果每次测试时,我们都自动调用最新一次的check point,那很可能

  • 如何使用Python读取.xlsx指定行列

    目录 引言 一.读取工作表内容(.xlsx转化为DataFrame) 二.获取指定行指定列数据(DataFrame转化为numpy.ndarray) 三.数据处理(numpy.ndarray转化为list/set/dict) 参考文章: 总结 引言 本文以Python3.9.1读取data.xlsx中包含的西瓜数据集3.0数据为例,数据集如下: 编号 色泽 根蒂 敲声 纹理 脐部 触感 密度 含糖率 好瓜 1 青绿 蜷缩 浊响 清晰 凹陷 硬滑 0.697 0.46 是 2 乌黑 蜷缩 沉闷 清

随机推荐