1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| package strategy
import ( "fmt" "io/ioutil" "os" )
type StorageStrategy interface { Save(name string, data []byte) error }
var strategys = map[string]StorageStrategy{ "file": &fileStorage{}, "encrypt_file": &encryptFileStorage{}, }
func NewStorageStrategy(t string) (StorageStrategy, error) { s, ok := strategys[t] if !ok { return nil, fmt.Errorf("not found StorageStrategy: %s", t) }
return s, nil }
type fileStorage struct{}
func (s *fileStorage) Save(name string, data []byte) error { return ioutil.WriteFile(name, data, os.ModeAppend) }
type encryptFileStorage struct{}
func (s *encryptFileStorage) Save(name string, data []byte) error { data, err := encrypt(data) if err != nil { return err }
return ioutil.WriteFile(name, data, os.ModeAppend) }
func encrypt(data []byte) ([]byte, error) { return data, nil }
|