Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

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
}