開発環境
- 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 コメント:
コメントを投稿