Skip to content

Commit 3ffbe91

Browse files
authored
Merge pull request #373 from devlights/devlights/add-os-dirfs-example-368
Add fileio_fs_dirfs.go
2 parents 68d1969 + a8b315f commit 3ffbe91

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

internal/examples/basic/fileio/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@
1111
|fileio\_null\_writer.go|fileio\_null\_writer|ioutil.Discard のサンプルです.|
1212
|fileio\_stdin.go|fileio\_stdin\_scanner|os.Stdin と bufio.Scanner のサンプルです.|
1313
|fileio\_permission.go|fileio\_stat\_permission|os.FileMode でパーミッションを判定するサンプルです.|
14-
14+
|fileio\_fs\_dirfs.go|fileio\_fs\_dirfs|os.DirFS() を利用してファイルの読み込みを行うサンプルです.|

internal/examples/basic/fileio/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ func (r *register) Regist(m mappings.ExampleMapping) {
2222
m["fileio_null_writer"] = NullWriter
2323
m["fileio_stdin_scanner"] = StdinWithScanner
2424
m["fileio_stat_permission"]= StatPermission
25+
m["fileio_fs_dirfs"] = FsDirFS
2526
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package fileio
2+
3+
import (
4+
"io"
5+
"io/fs"
6+
"os"
7+
8+
"github.com/devlights/gomy/output"
9+
)
10+
11+
// FsDirFS は、 os.DirFS() を利用してファイルの読み込みを行うサンプルです.
12+
//
13+
// REFERENCES:
14+
// - https://golang.org/pkg/io/fs/
15+
// - https://golang.org/pkg/os/#DirFS
16+
func FsDirFS() error {
17+
//
18+
// io/fs パッケージは Go1.16で追加されたパッケージ.
19+
// このパッケージの目的はファイルシステムを抽象化するためにある.
20+
//
21+
// 今までの io.Reader や io.Writer が読み書きを抽象化していたのと
22+
// 同様にファイルシステムという概念も抽象化してしまおうという事になる.
23+
//
24+
// osパッケージ側には DirFS という関数が追加され、ここから特定のディレクトリの
25+
// fs.FS を取得することが出来るようになった。
26+
//
27+
28+
//
29+
// 以下は os.Open("./.gitpod.yml") しているのと同じことになる
30+
//
31+
var (
32+
dir fs.FS
33+
file fs.File
34+
buf []byte
35+
err error
36+
)
37+
38+
// DirFSを利用して、特定のディレクトリを指す fs.FS を取得
39+
dir = os.DirFS(".")
40+
output.Stdoutf("[DirFS]", "%[1]v(%[1]T)\n", dir)
41+
42+
// 対象の fs.FS から、そのディレクトリ内のファイルを開く
43+
file, err = dir.Open(".gitpod.yml")
44+
if err != nil {
45+
return err
46+
}
47+
48+
buf, err = io.ReadAll(file)
49+
if err != nil {
50+
return nil
51+
}
52+
53+
output.Stdoutl("[.gitpod.yml]", string(buf))
54+
55+
return nil
56+
}

0 commit comments

Comments
 (0)