質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

2回答

7468閲覧

Golangのレシーバがどのような役割なのかわかりません

shuhey

総合スコア18

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

1グッド

3クリップ

投稿2016/07/21 08:37

表題の通りです。

golangのメソッドを定義する際に、
func (仮引数 型) 名前(仮引数 型, ...) 返り値の型 { ... }
と書くと思いますが、

メソッドの名前の後に来る仮引数と、レシーバの役割の違いがわかりません。
A tour of go や Effective go を見ても、レシーバに関して詳しい記載がありませんでした。
(私が見落としていたら申し訳ございません・・・)

個人的にはJavaの仮引数と同じ役割と思っていたのですが、おそらくそれはメソッド名の後ろについている仮引数とイコールなのかなと思っています。

初歩的な質問と存じますが、どなたかご回答いただけたら幸いです。

Yoshihisa_Okada👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

A Tour of Goではここですかね。

Pointer receivers - A Tour of Go
https://go-tour-jp.appspot.com/methods/4

レシーバーは、Javaで言うところのthisに近いです。
レシーバーがその型のとき、同じ名前のメソッドでも型に一致するほうが呼び出されます。

Goでは、メソッドがクラスに属しているという形式ではなく、
レシーバーの型に対応したメソッドを書くという形式になっているということですね。

lang

1package main 2 3import ( 4 "fmt" 5) 6 7type Type1 struct { 8 x int 9} 10 11type Type2 struct { 12 x int 13} 14 15func (v *Type1) func1(x int) { 16 fmt.Println("Type1.func1=", (v.x + x)) 17} 18 19func (v *Type2) func1(x int) { 20 fmt.Println("Type2.func1=", (v.x + x)) 21} 22 23func main() { 24 t1 := Type1{3} 25 t2 := Type2{4} 26 t1.func1(5) // Type1.func1= 8 27 t2.func1(5) // Type2.func1= 9 28} 29

投稿2016/07/21 09:33

編集2016/07/21 09:37
argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Javaでいうところの、クラスメソッドを作成するイメージです。

次のコードはItemという型に、greet()というメソッド関数を定義。
なので、 i.greet() で呼び出せます。

go

1package main 2 3import "fmt" 4 5type Item struct { 6 code int 7 name string 8} 9 10func (i Item) greet() string { 11 return "hello, " + i.name 12} 13 14func main() { 15 i := Item {1, "apple"} 16 fmt.Println(i.greet()) 17}

投稿2016/07/21 09:03

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問