2015-01-18 5 views
3

Я хочу генерировать уникальные имена файлов в Голанге с расширениями. Очень похоже на ioutil.TempFile, который принимает только префиксы.Golang Generate Unique Filename With Extension

Это было много раз поднято на форумах https://groups.google.com/forum/#!topic/golang-nuts/PHgye3Hm2_0, и Go идет, похоже, намеренно не добавляя эту функциональность в TempFile.

Итак, какой из предложенных способов справиться с этим? Должен ли я просто скопировать/вставить код TempFile и добавить параметр суффикса?

+1

Почему важно, чтобы вам нужен суффикс? – fuz

+0

Я бы скопировал/вставлял код и двигался дальше. Чтобы это было просто, я использовал функцию в math/rand вместо копирования генератора случайных чисел в io/ioutil. –

ответ

5

Должен ли я просто скопировать/вставить код TempFile и добавить параметр суффикса?

Это было бы в одну сторону.
Другой способ это сделать быстро - нефть - реализация, как в this project:

// TempFileName generates a temporary filename for use in testing or whatever 
func TempFileName(prefix, suffix string) string { 
    randBytes := make([]byte, 16) 
    rand.Read(randBytes) 
    return filepath.Join(os.TempDir(), prefix+hex.EncodeToString(randBytes)+suffix) 
} 

Как James Henstridgecomments ниже, это сырой функции:

Эта функция может возвращать имена файлов, которые уже существуют, например. Такой API должен создавать файл, открывая его с помощью O_CREAT | O_EXCL, чтобы гарантировать, что никто другой не создает файл между выбором имени и созданием файла.

Эта грубая функция выше иллюстрирует использование rand.Read() для сгенерирования имени файла.

Но другие чеки все в io/ioutil/tempfile.go.
3of3suggests, чтобы использовать функцию в math.rand вместо копирования random number generator in io/ioutil/tempfile.go.

+2

Вам определенно нужно больше, чем просто эта функция. Например, эта функция может возвращать имена файлов, которые уже существуют. Такой API должен создавать файл, открывая его с помощью 'O_CREAT | O_EXCL', чтобы никто другой не создавал файл между выбором имени и созданием файла. –

Смежные вопросы