2018年9月4日火曜日

開発環境

Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の3章(小さなツールの作成 - 1つのことだけをうまくやる)、ピザの一切れ(p. 150)をGoで取り組んでみる。

ピザの一切れ(p. 150)

コード(Emacs)

package main

import (
 "flag"
 "fmt"
)

func main() {
 deliveryPtr := flag.String("d", "", "delivery")
 thickPtr := flag.Bool("t", false, "thick")

 flag.Parse()

 if *thickPtr {
  fmt.Println("thick crust.")
 }
 if *deliveryPtr != "" {
  fmt.Printf("To be delivered %s.\n", *deliveryPtr)
 }

 fmt.Println("Ingredients:")

 for _, ingredient := range flag.Args() {
  fmt.Println(ingredient)
 }
}

入出力結果(Terminal)

$ go run sample6.go -d
flag needs an argument: -d
Usage of /var/folders/jg/y5d0zx4n1c9644tjrmn90jpc0000gn/T/go-build460691906/b001/exe/sample6:
  -d string
     delivery
  -t thick
exit status 2
$ go run sample6.go -d a
To be delivered a.
Ingredients:
$ go run sample6.go -t
thick crust.
Ingredients:
$ go run sample6.go i1
Ingredients:
i1
$ go run sample6.go i1 i2
Ingredients:
i1
i2
$ go run sample6.go -d a i1
To be delivered a.
Ingredients:
i1
$ go run sample6.go -t a i1
thick crust.
Ingredients:
a
i1
$ go run sample6.go -t -d a i1 i2
thick crust.
To be delivered a.
Ingredients:
i1
i2
$ go run sample6.go -td a i1 i2
flag provided but not defined: -td
Usage of /var/folders/jg/y5d0zx4n1c9644tjrmn90jpc0000gn/T/go-build541714292/b001/exe/sample6:
  -d string
     delivery
  -t thick
exit status 2
$ go run sample6.go -dt a i1 i2
flag provided but not defined: -dt
Usage of /var/folders/jg/y5d0zx4n1c9644tjrmn90jpc0000gn/T/go-build147549695/b001/exe/sample6:
  -d string
     delivery
  -t thick
exit status 2
$ go run sample6.go -d a -t  i1 i2
thick crust.
To be delivered a.
Ingredients:
i1
i2
$ go run sample6.go -t a -d i1 i2
thick crust.
Ingredients:
a
-d
i1
i2
$ 

C言語のgetopt関数とGoのflagパッケージでのコマンドライン引数の取り扱いはちょっと違いがあるみたい。

0 コメント:

コメントを投稿