

「ディレクトリの中にある複数のファイル」を以下のような構造体で表しています。

[code]

    type MyDirectory struct {
        Name string
        Files   []MyFile
    }
    
    type MyFile struct {
        Name string
    }
    
[/code]

上記の `MyFile` 構造体に、ディレクトリ名とファイル名とを連結したパスを取得するメソッドを持たせたいのですが、下記の `"?"`
の部分で行き詰りました。

[code]

    func (f *MyFile) path() string {
        return filepath.Join("?", f.Name)
    }
    
[/code]

どのような方法がありますでしょうか？


CC BY-SA 4.0
2018-10-02T05:37:32.060
48893
2018-10-03T05:25:54.337
19759
question
go
構造体の子側のメソッドから親のフィールドを参照したい


自己回答です。[類似の質問](https://stackoverflow.com/questions/27918208/go-get-parent-
struct)がありました。  
子のフィールドに、親を参照するポインタを持たせる方法です。

[code]

    type MyDirectory struct {
        Name  string
        Files []MyFile
    }
    
    type MyFile struct {
        Dir  *MyDirectory
        Name string
    }
    
    func (f *MyFile) path() string {
        return filepath.Join(f.Dir.Name, f.Name)
    }
    
    func main() {
    
        d := &MyDirectory{Name: "hoge"}
        f := MyFile{Dir: d, Name: "piyo.txt"}
        d.Files = append(d.Files, f)
    
        fmt.Println(f.path())   //=> hoge/piyo.txt
    
        d.Name = "fuga" 
    
        fmt.Println(f.path())   //=> fuga/piyo.txt
    }
    
[/code]


CC BY-SA 4.0
2018-10-03T05:25:54.337
48920
2018-10-03T05:25:54.337
19759
48893
answer