2020年7月7日火曜日

開発環境

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 コメント:

コメントを投稿