Skip to content

Commit 0d895d9

Browse files
authored
Merge pull request #830 from devlights/add-flag-textvar-example
2 parents 17b5347 + 3e90eb1 commit 0d895d9

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

examples/basic/flags/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,4 @@
1111
| string.go | flags_string | flag.String(), flag.StringVar() のサンプルです |
1212
| duration.go | flags_duration | flag.Duration(), flag.DurationVar() のサンプルです |
1313
| func.go | flags_func | flag.Func() のサンプルです |
14-
| | | |
14+
| textvar.go | flags_textvar | flag.TextVar() のサンプルです |

examples/basic/flags/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ func (r *register) Regist(m mapping.ExampleMapping) {
2020
m["flags_string"] = String
2121
m["flags_duration"] = Duration
2222
m["flags_func"] = Func
23+
m["flags_textvar"] = TextVar
2324
}

examples/basic/flags/textvar.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package flags
2+
3+
import (
4+
"flag"
5+
"net"
6+
"time"
7+
8+
"github.com/devlights/gomy/output"
9+
)
10+
11+
// TextVar は、 flag.TextVar() のサンプルです.
12+
//
13+
// flag.TextVar() は、Go 1.19 で追加された関数です。
14+
// encoding.TextUnmarshaler を実装している型を指定出来ます。
15+
//
16+
// encoding.TextUnmarshaler を実装しているものとして以下のものがあります。
17+
//
18+
// - time.Time
19+
// - net.IP
20+
// - url.URL
21+
//
22+
// # REFERENCES
23+
// - https://pkg.go.dev/flag@go1.22.4#TextVar
24+
func TextVar() error {
25+
var (
26+
fs = flag.NewFlagSet("", flag.ExitOnError)
27+
tm time.Time
28+
ip net.IP
29+
)
30+
31+
fs.TextVar(&tm, "time", time.Unix(0, 0), "time")
32+
fs.TextVar(&ip, "ip", net.IPv4(127, 0, 0, 1), "ip addr")
33+
34+
// 時刻表記の末尾の Z はUTCを表す
35+
fs.Parse([]string{"-time", "2024-01-02T03:04:05Z", "-ip", "192.168.149.111"})
36+
37+
tz, _ := time.LoadLocation("Asia/Tokyo")
38+
output.Stdoutf("[time]", "UTC=%s\tJST=%s\n", tm, tm.In(tz))
39+
output.Stdoutl("[ip ]", ip)
40+
41+
return nil
42+
43+
/*
44+
$ task
45+
task: [build] go build .
46+
task: [run] ./try-golang -onetime
47+
48+
ENTER EXAMPLE NAME: flags_textvar
49+
50+
[Name] "flags_textvar"
51+
[time] UTC=2024-01-02 03:04:05 +0000 UTC JST=2024-01-02 12:04:05 +0900 JST
52+
[ip ] 192.168.149.111
53+
54+
55+
[Elapsed] 152.56µs
56+
*/
57+
58+
}

0 commit comments

Comments
 (0)