Golang: dołącz plik do istniejącego archiwum tar

Jak dołączyć plik do istniejącego archiwum tar w Go? Nie widzę niczego oczywistego wdocs jak to zrobić.

Mam plik tar, który został już utworzony i chcę dodać do niego więcej po tym, jak został już zamknięty.

EDYTOWAĆ

Zmieniając przykład w dokumentach i idąc za odpowiedzią, wciąż nie otrzymuję oczekiwanego rezultatu. Pierwsze trzy pliki są zapisywane w tar, ale po zamknięciu i ponownym otwarciu pliku w celu zapisania do niego, nowy plik nigdy nie jest zapisywany. Kod działa dobrze. Nie wiem, czego mi brakuje.

Poniższy kod daje mi plik tar z trzema plikami: readme.txt, gopher.txt, todo.txt. foo.bar nigdy nie zostanie napisany.

package main

import (
    "archive/tar"
    "log"
    "os"
)

func main() {
    f, err := os.Create("/home/jeff/Desktop/test.tar")
    if err != nil {
        log.Fatalln(err)
    }

    tw := tar.NewWriter(f)

    var files = []struct {
        Name, Body string
    }{
        {"readme.txt", "This archive contains some text files."},
        {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
        {"todo.txt", "Get animal handling licence."},
    }
    for _, file := range files {
        hdr := &tar.Header{
            Name: file.Name,
            Size: int64(len(file.Body)),
        }
        if err := tw.WriteHeader(hdr); err != nil {
            log.Fatalln(err)
        }
        if _, err := tw.Write([]byte(file.Body)); err != nil {
            log.Fatalln(err)
        }
    }
    if err := tw.Close(); err != nil {
        log.Fatalln(err)
    }
    f.Close()

    // Open up the file and append more things to it

    f, err = os.OpenFile("/home/jeff/Desktop/test.tar", os.O_APPEND|os.O_WRONLY, os.ModePerm)
    if err != nil {
        log.Fatalln(err)
    }
    tw = tar.NewWriter(f)

    test := "this is a test"

    hdr := &tar.Header{
        Name: "foo.bar",
        Size: int64(len(test)),
    }

    if err := tw.WriteHeader(hdr); err != nil {
        log.Fatalln(err)
    }

    if _, err := tw.Write([]byte(test)); err != nil {
        log.Fatalln(err)
    }

    if err := tw.Close(); err != nil {
        log.Fatalln(err)
    }
    f.Close()

}

questionAnswers(2)

yourAnswerToTheQuestion