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

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

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

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

Q&A

解決済

1回答

1824閲覧

golangのソースについて教えてください

UekiKouji

総合スコア121

Go

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

0グッド

0クリップ

投稿2018/04/30 03:00

編集2018/04/30 03:47

ディレクトリの中にあるファイルの一覧を取得するプログラムについて勉強しています。
以下のプログラムで一覧を取得できるのですが、プログラムのソースを読んでいてよくわからない
ところがあるので教えてください。

package main import ( "fmt" "io/ioutil" "path/filepath" ) func main() { fmt.Println(dirwalk("./otakukoi2")) } func dirwalk(dir string) []string { files, err := ioutil.ReadDir(dir) if err != nil { panic(err) } var paths []string for _, file := range files { if file.IsDir() { paths = append(paths, dirwalk(filepath.Join(dir, file.Name()))...) continue } paths = append(paths, filepath.Join(dir, file.Name())) } return paths }

引用元
https://qiita.com/tanksuzuki/items/7866768c36e13f09eedb

以下の部分がよくわかりません。

paths = append(paths, dirwalk(filepath.Join(dir, file.Name()))...)

わからないことは、2点あります。
①(dir, file.Name())...の...のところ
②dirwalkは関数を再帰的に使っているのか
ご教授の方をよろしくお願いします。

もう少し説明させていただくと、appendでpathsの配列に文字列を足しているのですが、
dirwalk関数の意味がよくわかりません。dirwalk(filepath.Join(dir, file.Name()))...の
箇所の...のところとかgolangの文法的なところでしょうか。dirwalk事態は再帰的に呼び出しているのでしょうか。間違っていたら、すいません。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/04/30 03:00

ちゃんと説明しよう
UekiKouji

2018/04/30 03:03

どのような点が説明でわかりにくいでしょうか
UekiKouji

2018/04/30 03:07

ご教授がありがたいですが、アバウトすぎて申し訳ないとは思うのですが、何がいけないのかわかりません。
退会済みユーザー

退会済みユーザー

2018/04/30 03:10 編集

読んだ?最低3回は読もう。理解出来るまで読もう。回答者側の視点に立てるまで読もう。今日はとことん読もう。
UekiKouji

2018/04/30 03:11

3回読んだのですが、よくわかりません。ほんと何がわからないのか、わからないので教えていただけませんか。
UekiKouji

2018/04/30 03:12

説明文を追加させていただきました。
退会済みユーザー

退会済みユーザー

2018/04/30 03:13

三回読んで理解出来ないなら100回読もう。
UekiKouji

2018/04/30 03:14

私も、いろいろと作業していてわからないところをこちらで質問させていただいています。
UekiKouji

2018/04/30 03:15

質問していて、親切にみなさんご回答していただいて本当に感謝しております。
UekiKouji

2018/04/30 03:16

質問の内容で何がわからないのかが、よく私自身よくわかっておりません。
UekiKouji

2018/04/30 03:16

ご指摘をしていただけないでしょうか。
退会済みユーザー

退会済みユーザー

2018/04/30 03:17

ワタシの指摘はアバウトで分からないだろう?つまり、そういうことだ。
UekiKouji

2018/04/30 03:20

では、どのように伝えればよろしいでしょうか。
退会済みユーザー

退会済みユーザー

2018/04/30 03:21

その質問する前にどうしたら良いかどのくらい考えた?
UekiKouji

2018/04/30 03:21

よくわからない箇所は、端的に言いますと、
UekiKouji

2018/04/30 03:21

dirwalk(filepath.Join(dir, file.Name()))...
UekiKouji

2018/04/30 03:22

dirwalkを再帰的に呼び出していると思うのですが、最後の...のドット3つの意味がわかりません。
UekiKouji

2018/04/30 03:23

このようなプログラムの書き方は他の言語では、あまりないように思います。
退会済みユーザー

退会済みユーザー

2018/04/30 03:23

そろそろランチの時間だからランチしてくる
UekiKouji

2018/04/30 03:23

どのような意味があるのでしょうか
UekiKouji

2018/04/30 03:25

ご指摘ありがとうございます。
UekiKouji

2018/04/30 03:28

わからないところを少し追加して見ました。
guest

回答1

0

ベストアンサー

Go言語 スライスのappendについて

私もよく知りませんが、可変長引数をとる関数にスライスを渡すときには ... をつけないと引数に展開されるようです。
「Go 可変長引数」で調べるとわかるかもしれません。

###追記

あと引用する時にはちゃんと引用元にリンクしてください。

  • 回答に必要な情報が不足します。
  • マナーです。
  • 違法行為であり、場合によっては罰せられます。

findコマンドが遅いからgoで書き直してみた件

###追記

私の書いたキーワードですぐに見つかりました。

Passing arguments to ... parameters

投稿2018/04/30 03:40

編集2018/04/30 04:18
Zuishin

総合スコア28660

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

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

UekiKouji

2018/04/30 03:46

ありがとうございます。引用元を次回よりきちんと書きます。
UekiKouji

2018/04/30 03:47

ご指摘があったので、引用元を追加しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問