超初心者のGo言語 - 複数の戻り値をもつ関数
見よう見まねでagoutiを使ってブラウザの自動操作ツール(Showroomの星集め)を作っていたらヘンなコンパイルエラーが出ます。
MyPoint := page.Find("#room-gift-item-list > li:nth-child(12) > div").Text()
というソースに対し
multiple-value page.selectable.Find("#room-gift-item-list > li:nth-child(12) > div").Text() in single-value context
と怒られました。単一の値が現れるべきところに複数の値Text()が現れている、ということのようです。
ここではじめてGo言語っていうのは関数が複数の値を戻すことができるということを知るのですが、どうやったら関数の戻り値を取得できるのかなかなかわかりませんでした(まあ、単に調べ方が悪かっただけでしょうか)
この複数の値を戻すというのはかなり違和感があるのですが、よくよく考えてみると引数を使って値を戻すのよりわかりやすくトラブルが起きなさそうですから合理的なのでしょう。
関数の側を含めてこんな感じで使うものらしいです。
package main
func sub(f1, f2 int) (int, int, int, int) {
return f1 + f2, f1 - f2, f1 * f2, f1 / f2
}
func main() {
a, b, c, d := sub(10, 3)
println(a, b, c, d)
a = sub(10, 3)
println(a)
_, a, _, _ = sub(10, 3)
println(a)
_, _, a, _ = sub(10, 3)
println(a)
_, _, _, a = sub(10, 3)
println(a)
}
13 7 30 3
13
7
30
3
funcを定義するときは戻り値の型を定義するところで複数の戻り値それぞれの型をカンマで区切り括弧でくくる。戻り値を受けるときは戻り値の分だけ変数をカンマで区切って並べるということになります。戻り値の一部を使わないときは変数の代わりにアンダースコアを置きます(ダミーの変数を置くと使われていない変数があるというエラーが出てコンパイルが通らなくなります)
----------
参考
「超初心者のGo言語/agouti - ブラウザ操作の基本の基本」
「超初心者のGo言語 - 複数の戻り値をもつ関数」
「超初心者のGo言語 - もっとも簡単なGoroutine(並列処理)」
「Showroom - 自動星集め・星投げ・カウントツール)」 (使用法とソースつき)
「Showroom - 福引するプログラムとその結果 (1)」
「Showroomの複数アカウント(複アカ、複垢)について考えてみた(1)」
「Showroomでの自動星集めの試み (3) ガチイベ、最後の5分間
「Showroom ラスカルイベの最後の5分間」
「Showroom - 自動星集め、星投げツール(の試み)」 (使用法とソース)
「Showroomでの自動星集めの試み (1)」
「Showroomでの自動星集めの試み (2) 配信ルームの一覧を作る」
「Showroomでの自動星集めの試み (4) 星集めツール」
「Showroomでひたすらリスナーレベルを上げるための星集めツール(Go/Agouti)」
---------------------
「GoDoc - package agouti」
「Qiita @0829 - Goではじめてみたブラウザの自動操作」
「Qiita @tenten0213 - agoutiというWebDriverクライアントを使って面倒な作業を自動化する」
「Qiita @masaru_b_cl - Windows上でGo言語初心者向け学習環境を作る」
「はじめてのGo言語」
「天才まくまくノート - まくまく Hugo/Go ノート - 関数を定義する (func)」
「Qiita @TakaakiFuruse - Golang Goの並列処理を学ぶ(goroutine, channel)」
「Qiita @To_BB - Rubyエンジニアがゴルーチン(Go言語)を学んでみた【初心者向け】」
「Qiita @fukumone - goroutine 使い方まとめ」
« 超初心者のGo言語 - もっとも簡単なGoroutine(並列処理) | トップページ | 超初心者のGo言語/agouti - ブラウザ操作の基本の基本 »
「Go言語/agouti」カテゴリの記事
- 超初心者のGo言語/agouti - ブラウザ操作の基本の基本(2018.01.20)
- 超初心者のGo言語 - 複数の戻り値をもつ関数(2018.01.13)
- 超初心者のGo言語 - もっとも簡単なGoroutine(並列処理)(2018.01.09)
この記事へのコメントは終了しました。
« 超初心者のGo言語 - もっとも簡単なGoroutine(並列処理) | トップページ | 超初心者のGo言語/agouti - ブラウザ操作の基本の基本 »
コメント