検索
ホームページバックエンド開発GolangGo 言語でファイルを読み取るにはどうすればよいですか?さまざまな手法の簡単な分析

Go 言語でファイルを読み取るにはどうすればよいですか?さまざまな手法の簡単な分析

この記事では、Golang でファイルを読み取る方法について説明します。これらのファイルを処理するには次のパッケージを使用します。

  • os パッケージは、操作レベルの操作を実行するためのプラットフォームに依存しないインターフェイスを提供します。
  • IOutil このパッケージは、内部実装についてあまり知らなくてもファイルを操作できる使いやすいユーティリティ関数を提供します。
  • bufio パッケージはバッファリングされた IO を実装しており、入出力操作のパフォーマンスとスループットの向上に役立ちます。
  • log パッケージは、単純なログ記録パッケージを実装します。これをプログラム全体で使用します。プログラムではログパッケージの Fatal() 関数を使用します。

ファイル全体の読み取り

ファイル全体を一度に簡単に読み取り、変数に保存できます。ただし、大きなファイルに対してこれを行うべきではないことに注意してください。 ioutil.ReadFile() 関数を使用してファイルを読み取り、ファイルの内容を変数に保存します。

まず、プログラムと同じディレクトリにファイルを保存しましょう。したがって、フォルダー構造は次のようになります。

___ 
| 
|_ _ _ _ ilovego.txt | 
|_ _ _ _ main.go

main.go 関数に次のように記述します:

package main

import (
	"fmt"
	"io/ioutil"
	"log"
)

func main() {

	content, err := ioutil.ReadFile("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(content))
}

ただし、まず ReadFile() 関数について説明します。 状況:

  • 定義: メソッド宣言 func ReadFile(filename string) ([]byte, error)
  • 関数: 読み取りパスが関数パラメータ ファイルに渡され、ファイルの内容を返します。内部的に使用される os.ReadFile(fileName) メソッド
  • Returns: ファイルの内容とエラーをバイト配列で返します。呼び出しが成功すると、err == nil

内部 ReadFile 関数は次のように実装されます:

func ReadFile(filename string) ([]byte, error) {
    return os.ReadFile(filename)
}

さて、プログラムに戻りましょう:

  • ioutil.ReadFile("readthisfile.txt") byteArray とエラーを返します。 byteArray を「content」変数に保存し、エラーを「err」変数に保存します。
  • 次に、if 条件を設定します。err 値が nil でない場合は、log.Fatal() 関数を使用してエラー err を出力します。 Fatal() 関数は、os.Exit(1) を呼び出す Print() 関数と同等であることに注意してください。
  • 最後に、fmt.Println() 関数を使用してファイルの内容を印刷します。 content 変数はバイト配列であり、文字列に変換する必要があるため、単純に出力することはできません。 string(content)

次に、新しい ilovego.txt ファイルを作成し、次の内容を書き込みます:

I Love Golang,
This is One of the Best Languages on the World!

最後に、上記のコードを実行すると、次の出力が表示されます:

$ go run main.go
I Love Golang, 
This is One of the Best Languages on the World!

Press line読み取り

スキャナ スキャナは、改行で区切られたテキスト行で構成されるファイルなどのデータを読み取るための便利なインターフェイスを提供します。マーカーを介してデータを読み取ります。Split 関数はマーカーを定義します。デフォルトでは、この関数はデータを行に分割し、行の端を削除します。

package main

import (
	"fmt"
	// "io/ioutil"
	"bufio"
	"log"
	"os"
)

func main() {

	// opening the file using Open function
	f, err := os.Open("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	// create a scanner for the file
	scanner := bufio.NewScanner(f)

	// loop through the scanner until it return fasle
	for scanner.Scan() {

		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		log.Fatal(err)
	}
}
  • os.Open() パラメータで渡されたファイルを開きます。ファイルを開くときにエラーが発生した場合は、同じエラーが返されます。それ以外の場合、エラーは nil になります。
  • 次に、スキャナを使用してファイルを読み取り、ファイルの内容の終わりまで 1 行ずつスキャンします。
  • 最後に、ファイルを閉じます。

プログラムを実行すると、結果は次のようになります:

Go 言語でファイルを読み取るにはどうすればよいですか?さまざまな手法の簡単な分析

単語ごとに読み取ります

ファイルを単語ごとに読み取る:

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {

	f, err := os.Open("ilovego.txt")

	if err != nil {
		fmt.Println(err)
	}

	defer f.Close()

	scanner := bufio.NewScanner(f)
	scanner.Split(bufio.ScanWords)

	for scanner.Scan() {

		fmt.Println(scanner.Text())
	}

	if err := scanner.Err(); err != nil {
		fmt.Println(err)
	}
}

コードを実行する:

$ go run main.go
I
Love
Golang,
This
is
One
of
the
Best
Languages
on
the
World!

ファイルをチャンクで読み取る

ファイル全体を読み取ることもできます。 at Once これは簡単な方法のように思えますが、メモリ管理の観点からプログラムを最適化する必要がある場合があります。 Golang は、ファイル全体を読み取るのではなく、あるいは 1 行ずつ読み取るのではなく、ファイルを分割して読み取る方法を提供します。行のサイズが大きすぎると、行ごとの読み取りも非効率になる可能性があるためです。

package main

import (
	"bufio"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {

	f, err := os.Open("ilovego.txt")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	reader := bufio.NewReader(f)
	buf := make([]byte, 16)

	for {
                // reading a file upto buffer
		n, err := reader.Read(buf)

		if err != nil {

			if err != io.EOF {

				log.Fatal(err)
			}

			break
		}

		fmt.Print(string(buf[0:n]))
	}

	fmt.Println()
}

バイナリ読み取り

hex パッケージは 16 進数のエンコードとデコードを実装します。

package main

import (
	"bufio"
	"encoding/hex"
	"fmt"
	"io"
	"log"
	"os"
)

func main() {

	f, err := os.Open("sid.jpg")

	if err != nil {
		log.Fatal(err)
	}

	defer f.Close()

	reader := bufio.NewReader(f)
	buf := make([]byte, 256)

	for {
		_, err := reader.Read(buf)

		if err != nil {
			if err != io.EOF {
				fmt.Println(err)
			}
			break
		}

		fmt.Printf("%s", hex.Dump(buf))
	}
}

总结

本文介绍了 Go 语言读取文件的几种方式,ioutil.ReadFile 函数将整个文件读成一个字符串。这个函数很方便,但不应该用于非常大的文件。希望能对你有所帮助!

推荐学习:Golang教程

以上がGo 言語でファイルを読み取るにはどうすればよいですか?さまざまな手法の簡単な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
GOインターフェイスでアサーションとタイプスイッチを入力しますGOインターフェイスでアサーションとタイプスイッチを入力しますMay 02, 2025 am 12:20 AM

gohandlesinterfacesandtypeassertionseffectivivivivivity、強化された柔軟性と耐毒性を強化します

エラーを使用し、エラーを使用して、goでエラー検査を行いますエラーを使用し、エラーを使用して、goでエラー検査を行いますMay 02, 2025 am 12:11 AM

言語エラー処理は、エラーとエラーを介してより柔軟になり、読みやすくなります。 1.エラーは、エラーが指定されたエラーと同じであり、エラーチェーンの処理に適しているかどうかを確認するために使用されます。 2.エラー。エラータイプを確認するだけでなく、エラーを特定のタイプに変換することもできます。これは、エラー情報を抽出するのに便利です。これらの関数を使用すると、エラー処理ロジックを簡素化できますが、エラーチェーンの正しい配信に注意を払い、コードの複雑さを防ぐために過度の依存性を回避できます。

GOのパフォーマンスチューニング:アプリケーションの最適化GOのパフォーマンスチューニング:アプリケーションの最適化May 02, 2025 am 12:06 AM

tomakegogoapplicationsRunfasterAndMore -efficient、useprofilingtools、leverageconconcurrency、andmanagememoryefcectively.1)useprofforcpuandmemoryprofilingtoidentififybottlenecks.2)

GOの未来:トレンドと開発GOの未来:トレンドと開発May 02, 2025 am 12:01 AM

go'sfutureisbrightwithtrendslikeRikeRovedTooling、generics、cloud-nativeadoption、performulenhancements、andwebassemblyintegration、butchallengesincludemaintainingsimplicitandimplovingeror handling。

Goroutinesの理解:Goの同時性に深く潜りますGoroutinesの理解:Goの同時性に深く潜りますMay 01, 2025 am 12:18 AM

GoroutinesAreSareSareSareSormethodSthaturncurlyntingo、Enableing and LightweightConcurrency.1)theyRuntimeSimeSingMultiplexing、SountyStorunonFeweroSthReads.2)ゴルチンズを失ったことを許可します

go:目的と使用法でのinit機能を理解するgo:目的と使用法でのinit機能を理解するMay 01, 2025 am 12:16 AM

initistoistoInitializevariables、setupconutupurations、orforformndexedarysetupbe foreThemainfunctionexecutes.useinitby:1)inginginyourcodeTorunautorunaintalunain、2)KeepingItshortandpocusedonsimpletasks、3)ConsididiriveSusinginsingingingingingingingingingingingingingingingingingingingingingingsingpltassksを使用すると、

GOインターフェイスの理解:包括的なガイドGOインターフェイスの理解:包括的なガイドMay 01, 2025 am 12:13 AM

go interfacesaremethodsignaturesetsetsattypesmustimplement、unableingpolymorphism withintinheritance forcleaner、modularcode.theyareimplictilistifisisfiestified、houseforfflexibleapisanddeaupling、busrecarefulusoavoidoidoimoidimeerrororsypertety。

GOのパニックからの回復:いつ、どのように使用するか()GOのパニックからの回復:いつ、どのように使用するか()May 01, 2025 am 12:04 AM

Goで回復()関数を使用して、パニックから回復します。特定の方法は次のとおりです。1)回復()を使用して、延期関数でパニックをキャプチャして、プログラムのクラッシュを避けます。 2)デバッグの詳細なエラー情報を記録します。 3)特定の状況に基づいてプログラムの実行を再開するかどうかを決定します。 4)パフォーマンスに影響を及ぼさないように注意して使用します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!