Edelweissの日記 RSSフィード

2009-12-05

[]range,string

range.go

package main
import "fmt"
func main() {
	var str string = "123いろはabc";
	for pos, char := range str {
    		fmt.Printf("[%c](%x):%d\n", char, char, pos)
	}
}
C:\go>range
[1](31):0
[2](32):1
[3](33):2
[い](3044):3
[ろ](308d):6
[は](306f):9
[a](61):12
[b](62):13
[c](63):14

文字列は3バイトだけど文字として取ってくると2バイト…なの?

昨日のソースもだがコンパイラがセミコロン足らないとエラーを吐く
仕様上はいらなそうなところだったりするんだがなんでだろ?

2009-12-04

[]flag その2

その1消しちゃった…まあいいか

flag2.go

package main
import ("fmt";"flag")
var f1 int
func init() {
	flag.IntVar(&f1, "f1", 999, "整数");
}
var f2 *string = flag.String("f2", "xxx", "文字列");
var b = flag.Bool("b", true, "bool");
func main() {
	flag.Parse();
	fmt.Printf("f1[%d] f2[%s] b[%t]\n", f1, *f2, *b);
	for i := 0; i < flag.NArg(); i++ {
		fmt.Printf("%s\n", flag.Arg(i))
	}
}
C:\go>flag2
f1[999] f2[xxx] b[true]

当然デフォルト値

C:\go>flag2 -x
flag provided but not defined: -x
Usage of flag2:
  -f1=999: 整数
  -f2="xxx": 文字列
  -b=true: bool

“-x”なんか知らんのでUsageが出る

C:\go>flag2 -f1=123 456 -f2=789
f1[123] f2[xxx] b[true]
456
-f2=789

オプションは前にまとめろと

C:\go>flag2 -f1=1 -f2="a bc" -b=f abc def
f1[1] f2[a bc] b[false]
abc
def

イコール

C:\go>flag2 -f1 1 -f2 "a bc" -b f abc def
f1[1] f2[a bc] b[true]
f
abc
def

boolだけ動作が違うらしい