Bu örnekte, mevcut bir klasörde geçici bir dosya oluşturacağız ve onu orada saklayacağız. Bu, işiniz bittiğinde bu dosyadan kurtulmak istiyorsanız kullanışlı bir çözümdür. Ayrıca geçici bir klasör de oluşturabilirsiniz. Diğer kullanımları buradan görebilirsiniz.


main.go


package main

import (
"log"
)

func main() {
str := NewStorage()
if err := str.Write([]byte("Hello World!")); err != nil {
log.Fatalln(err)
}

path, err := str.Store("tmp/", ".txt")
if err != nil {
log.Fatalln(err)
}

log.Println(path)

// Result
// tmp/606364987.txt
}

storage.go


package main

import (
"bytes"
"io/ioutil"
)

type Storage struct {
*bytes.Buffer
}

func NewStorage() *Storage {
return &Storage{
&bytes.Buffer{},
}
}

// Write appends each data chunk to the current buffer.
func (s *Storage) Write(chunk []byte) error {
_, err := s.Buffer.Write(chunk)

return err
}

// Store creates a new globally unique temporary file and stores in a specific
// directory. Given that this is a "temporary" file, you should handle removing
// the file. E.g. defer os.Remove(tmp.Name())
func (s *Storage) Store(dir, ext string) (string, error) {
tmp, err := ioutil.TempFile(dir, "*"+ext)
if err != nil {
return "", err
}
defer tmp.Close()

if _, err := tmp.Write(s.Buffer.Bytes()); err != nil {
return "", err
}

return tmp.Name(), nil
}