File tree Expand file tree Collapse file tree 4 files changed +108
-0
lines changed
Expand file tree Collapse file tree 4 files changed +108
-0
lines changed Original file line number Diff line number Diff line change 55| file| example name| note|
66| ----| ------------| ----|
77| pointer\_ or\_ not.go| methods\_ pointer\_ or\_ not| メソッドのレシーバーをポインタで宣言するかしないかの違いについてのサンプルです.|
8+ | methodvalue.go| methods\_ method\_ value| Goのメソッド値のサンプルです|
9+ | methodexpression.go| methods\_ method\_ expression| Goのメソッド式のサンプルです|
Original file line number Diff line number Diff line change @@ -14,4 +14,6 @@ func NewRegister() mapping.Register {
1414// Regist -- 登録します.
1515func (r * register ) Regist (m mapping.ExampleMapping ) {
1616 m ["methods_pointer_or_not" ] = PointerOrNot
17+ m ["methods_method_value" ] = MethodValue
18+ m ["methods_method_expression" ] = MethodExpression
1719}
Original file line number Diff line number Diff line change 1+ package methods
2+
3+ import (
4+ "bytes"
5+ "io"
6+ "os"
7+ )
8+
9+ // MethodExpression は、Goのメソッド式のサンプルです.
10+ //
11+ // メソッド式と対をなすものがメソッド値となる。
12+ // メソッド値のサンプルは methodvalue.go を参照。
13+ //
14+ // # REFERENCES
15+ // - https://go.dev/ref/spec#Method_expressions
16+ // - https://zenn.dev/spiegel/articles/20201212-method-value-and-expression
17+ // - https://stackoverflow.com/questions/48883754/can-any-one-explain-this-go-program-which-uses-a-method-expression
18+ func MethodExpression () error {
19+ //
20+ // メソッド式は、インスタンスが紐づいていない状態の関数オブジェクトのこと
21+ // レシーバーが紐づいていないので、呼び出す際にレシーバーを渡す必要がある
22+ // (Python の self と思うと分かりやすい)
23+ //
24+
25+ var (
26+ buf = & bytes.Buffer {}
27+ fn = (* bytes .Buffer ).Write // メソッド式
28+ data = []byte ("hello world" )
29+ )
30+
31+ // メソッド式は、レシーバーが紐づいていないので、第一引数にレシーバーを渡して呼び出す
32+ if _ , err := fn (buf , data ); err != nil {
33+ return err
34+ }
35+
36+ io .Copy (os .Stdout , buf )
37+
38+ return nil
39+
40+ /*
41+ $ task
42+ task: [build] go build .
43+ task: [run] ./try-golang -onetime
44+
45+ ENTER EXAMPLE NAME: methods_method_expression
46+
47+ [Name] "methods_method_expression"
48+ hello world
49+
50+ [Elapsed] 6.16µs
51+ */
52+
53+ }
Original file line number Diff line number Diff line change 1+ package methods
2+
3+ import (
4+ "bytes"
5+ "io"
6+ "os"
7+ )
8+
9+ // MethodValue は、Goのメソッド値のサンプルです.
10+ //
11+ // メソッド値と対をなすものがメソッド式となる。
12+ // メソッド式のサンプルは methodexpression.go を参照。
13+ //
14+ // # REFERENCES
15+ // - https://go.dev/ref/spec#Method_expressions
16+ // - https://zenn.dev/spiegel/articles/20201212-method-value-and-expression
17+ // - https://stackoverflow.com/questions/48883754/can-any-one-explain-this-go-program-which-uses-a-method-expression
18+ func MethodValue () error {
19+ //
20+ // メソッド値は、インスタンスが紐づいた状態の関数オブジェクトのこと
21+ // 既にレシーバーが紐づいているので、呼び出す際にレシーバーを渡す必要はない
22+ //
23+
24+ var (
25+ buf = & bytes.Buffer {}
26+ fn = buf .Write // メソッド値
27+ data = []byte ("hello world" )
28+ )
29+
30+ if _ , err := fn (data ); err != nil {
31+ return err
32+ }
33+
34+ io .Copy (os .Stdout , buf )
35+
36+ return nil
37+
38+ /*
39+ $ task
40+ task: [build] go build .
41+ task: [run] ./try-golang -onetime
42+
43+ ENTER EXAMPLE NAME: methods_method_value
44+
45+ [Name] "methods_method_value"
46+ hello world
47+
48+ [Elapsed] 7.22µs
49+ */
50+
51+ }
You can’t perform that action at this time.
0 commit comments