開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第2章(プログラム構造)、2.6(パッケージとファイル)、2.6.1(インポート)、練習問題2.2の解答を求めてみる。
コード
package main import ( "bufio" "fmt" "os" "strconv" "プログラミング言語Go/ch2/tempconv" ) func main() { if len(os.Args) == 1 { input := bufio.NewScanner(os.Stdin) for input.Scan() { p(input.Text()) } } else { for _, arg := range os.Args[1:] { p(arg) } } } type Feet float64 type Meter float64 func (f Feet) String() string { return fmt.Sprintf("%gft", f) } func (m Meter) String() string { return fmt.Sprintf("%gm", m) } func FeetToMeter(f Feet) Meter { return Meter(f * 0.3048) } func MeterToFeet(m Meter) Feet { return Feet(m / 0.3048) } type Pond float64 type Kilogram float64 func (p Pond) String() string { return fmt.Sprintf("%glb", p) } func (k Kilogram) String() string { return fmt.Sprintf("%gkg", k) } func PondToKilogram(p Pond) Kilogram { return Kilogram(p * 0.45359237) } func KilogramToPond(k Kilogram) Pond { return Pond(k / 0.45359237) } func p(arg string) { t, err := strconv.ParseFloat(arg, 64) if err != nil { fmt.Fprintf(os.Stderr, "cf: %v\n", err) os.Exit(1) } f := tempconv.Fahrenheit(t) c := tempconv.Celsius(t) fmt.Printf("%s = %s, %s = %s\n", f, tempconv.FToC(f), c, tempconv.CToF(c)) feet := Feet(t) m := Meter(t) fmt.Printf("%s = %s, %s = %s\n", feet, FeetToMeter(feet), m, MeterToFeet(m)) p := Pond(t) k := Kilogram(t) fmt.Printf("%s = %s, %s = %s\n", p, PondToKilogram(p), k, KilogramToPond(k)) }
入出力結果(cmd(コマンドプロンプト)、Terminal)
$ go run sample2.go 0 0°F = -17.77777777777778℃, 0℃ = 32°F 0ft = 0m, 0m = 0ft 0lb = 0kg, 0kg = 0lb $ go run sample2.go 0 1 5 10 100 0°F = -17.77777777777778℃, 0℃ = 32°F 0ft = 0m, 0m = 0ft 0lb = 0kg, 0kg = 0lb 1°F = -17.22222222222222℃, 1℃ = 33.8°F 1ft = 0.3048m, 1m = 3.280839895013123ft 1lb = 0.45359237kg, 1kg = 2.2046226218487757lb 5°F = -15℃, 5℃ = 41°F 5ft = 1.524m, 5m = 16.404199475065617ft 5lb = 2.2679618500000003kg, 5kg = 11.023113109243878lb 10°F = -12.222222222222221℃, 10℃ = 50°F 10ft = 3.048m, 10m = 32.808398950131235ft 10lb = 4.535923700000001kg, 10kg = 22.046226218487757lb 100°F = 37.77777777777778℃, 100℃ = 212°F 100ft = 30.48m, 100m = 328.0839895013123ft 100lb = 45.359237kg, 100kg = 220.46226218487757lb $ go run sample2.go 0 0°F = -17.77777777777778℃, 0℃ = 32°F 0ft = 0m, 0m = 0ft 0lb = 0kg, 0kg = 0lb 1 1°F = -17.22222222222222℃, 1℃ = 33.8°F 1ft = 0.3048m, 1m = 3.280839895013123ft 1lb = 0.45359237kg, 1kg = 2.2046226218487757lb 5 5°F = -15℃, 5℃ = 41°F 5ft = 1.524m, 5m = 16.404199475065617ft 5lb = 2.2679618500000003kg, 5kg = 11.023113109243878lb 10 10°F = -12.222222222222221℃, 10℃ = 50°F 10ft = 3.048m, 10m = 32.808398950131235ft 10lb = 4.535923700000001kg, 10kg = 22.046226218487757lb 100 100°F = 37.77777777777778℃, 100℃ = 212°F 100ft = 30.48m, 100m = 328.0839895013123ft 100lb = 45.359237kg, 100kg = 220.46226218487757lb $ go run sample2.go -10 -10°F = -23.333333333333332℃, -10℃ = 14°F -10ft = -3.048m, -10m = -32.808398950131235ft -10lb = -4.535923700000001kg, -10kg = -22.046226218487757lb $ go run sample2.go a cf: strconv.ParseFloat: parsing "a": invalid syntax exit status 1 $ go run sample2.go a cf: strconv.ParseFloat: parsing "a": invalid syntax exit status 1 $
0 コメント:
コメントを投稿