開発環境
- macOS Catalina - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
Go Systems Programming: Master Linux and Unix system level programming with Go (渋川 よしき(著)、ごっちん(イラスト)、ラムダノート)、第3章(低レベルアクセスへの入り口2:io.Reader)、3.9(問題)、Q3.1(ファイルのコピー)の解答を求めてみる。
コード
package main
import (
"fmt"
"io"
"os"
)
func main() {
if len(os.Args) < 3 {
fmt.Fprintln(os.Stderr, "usage: copy src_file target_file")
os.Exit(1)
}
dst, err := os.Create(os.Args[2])
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer dst.Close()
src, err := os.Open(os.Args[1])
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer src.Close()
io.Copy(dst, src)
}
入出力結果(Zsh、PowerShell、Terminal)
% go build
% ./copy
usage: copy src_file target_file
% echo $?
1
% ./copy main.go
usage: copy src_file target_file
% echo $?
1
% ./copy main.go temp.txt
% echo $?
0
% diff main.go temp.txt
% cat temp.txt
package main
import (
"fmt"
"io"
"os"
)
func main() {
if len(os.Args) < 3 {
fmt.Fprintln(os.Stderr, "usage: copy src_file target_file")
os.Exit(1)
}
dst, err := os.Create(os.Args[2])
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer dst.Close()
src, err := os.Open(os.Args[1])
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
defer src.Close()
io.Copy(dst, src)
}
% ./copy abcde
usage: copy src_file target_file
% ./copy abcde temp1.txt
open abcde: no such file or directory
% echo $?
1
%
0 コメント:
コメントを投稿