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

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

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

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

Q&A

1回答

662閲覧

Goで構造体に関連付けられたメソッドを引数にしたい

haji3

総合スコア9

Go

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

0グッド

0クリップ

投稿2021/06/21 21:33

前提・実現したいこと

Goで構造体に関連付けられたメソッドを引数として渡す処理を実装したいと考えております。
一つのメソッドで、一連の処理が完了するようにしたいと言うのが目的になります。

今回は2つのstructを宣言しており、それぞれのstructでデータを受け渡しているという形になります。

go

1type Sample struct { 2 x ,y float64 3} 4 5type Result struct { 6 id, name string 7} 8 9 10//引数として渡したい関数 11func (sample Sample) Convert() string{ 12 a := strconv.Itoa(int(sample.x)) 13 return a 14} 15 16//メソッドを関連付けたい関数 17func (result Result) ConnectDB('ここに'Convert()を引数として渡したい) Result { 18 // Connect to the database 19 db, err := sql.Open("mysql", "hogehoge") 20 defer db.Close() 21 if err != nil { 22 fmt.Println(err) 23 } 24 25 26 rows, err := db.Query("SELECT id,name FROM master WHERE x = ? ", "ここに関数の実行結果を渡したい") // 27 if err != nil { 28 panic(err.Error()) 29 } 30 for rows.Next() { 31 err = rows.Scan(&result.id,&result.name) 32 if err != nil { 33 panic(err.Error()) 34 } 35 36 } 37 return result 38}

発生している問題・エラーメッセージ

引数にstructととして
func (result Result) ConnectDB(sample Sample)

ような形で構造体を渡すことはできますが、Sampleにひもづけられたメソッドに関しては、引数に入れることができませんでした。

一連の処理として実行する場合には、そもそも実装の方法を変えるべきでしょうか?

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

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

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

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

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

guest

回答1

0

go

1func test1(f func(Sample) string) string { 2 s := Sample{8, 2} 3 return f(s) 4} 5func test2(f func(*Sample) string) string { 6 s := &Sample{8, 2} 7 return f(s) 8} 9func test3(f func() string) string { 10 return f() 11} 12 13func main() { 14 fmt.Println(test1(Sample.Convert)) 15 fmt.Println(test2((*Sample).Convert)) 16 17 s := Sample{100, 2} 18 fmt.Println(test3(s.Convert)) 19}

Method ExpressionsもしくはMethod valuesが使えます

投稿2021/06/22 00:16

asm

総合スコア15149

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問