Использую его для кодогенерации маленьких функций и синтаксической справки. На большее он пока не способен.
Заметил у него на мой взгляд однозначно дурные привычки написания программ:
-
Всегда норовит объявлять переменные в момент первого использования оператором := вместо объявления в шапке функции оператором var
-
Часто запихивает в условный оператор (if) вызов функции и логические операции с возвращаемым значением. Читать такое трудно.
-
Постоянно осуждает меня за использование глобальных переменных. Например:
var logDir string = `%USERPROFILE%/log/tg-bot` // Каталог для записи журналов
var transactionFlag bool // Обозначает что сейчас программа выполняет синхронную операцию все этапы которой нужно записывать в отдельный файл который можно будет проанализировать в случае падения.
var logCurrentYear, logCurrentMonth, logCurrentDay int // Идентефикаторы для текущего файла
var logFileDescriptor *os.File // Для открытого дескриптора файла журнала
- Само же предложило для каждой новой записи журнала открывать и закрывать файл.
Последний пример побудивший меня написать это сообщение:
Я:
Насколько строка:
PathDir = filepath.Join(logDir, fmt.Sprintf(«%d/%02d/%02d/», logCurrentYear, logCurrentMonth, logCurrentDay))
корректна?
ChatGPT:
Данная строка создаёт путь к каталогу, который состоит из трех компонентов: года, месяца и дня, разделенных слешами. С учетом вашего кода и используемой библиотеки filepath.Join, эта строка выглядит вполне корректно.
Однако, стоит учесть, что формат пути зависит от операционной системы. Ваш код использует / в качестве разделителя, что работает в большинстве случаев, но если вы пишете приложение, которое может выполняться на разных ОС, то для создания пути рекомендуется использовать filepath.Join, так как это обеспечивает кроссплатформенность.
Если ваш код предназначен только для определенной ОС, и вы уверены, что используете правильные разделители, то ваш подход тоже будет работать.
Я:
Если неизвестно на какой ОС это будет запущено?
ChatGPT:
Если неизвестно на какой операционной системе будет запущено приложение, то рекомендуется использовать filepath.Join для создания путей, так как эта функция автоматически выбирает правильный разделитель пути в зависимости от операционной системы. Она обеспечивает кроссплатформенность вашего кода.
Пример:
PathDir = filepath.Join(logDir, fmt.Sprintf("%d", logCurrentYear), fmt.Sprintf("%02d", logCurrentMonth), fmt.Sprintf("%02d", logCurrentDay))
Этот код гарантирует, что разделители пути будут правильно выбраны вне зависимости от операционной системы.
Я:
В конце получаемой строки будет символ разделителя?
ChatGPT:
Да, в конце строки, полученной с использованием filepath.Join, будет символ разделителя. В реализации этой функции учтены особенности операционной системы, и она добавляет разделитель, если его нет, и если добавление не приведет к созданию двойного разделителя.
Таким образом, вы можете быть уверены, что строка PathDir будет содержать правильный путь к каталогу с символом разделителя в конце.
Я: нашёл в документации пример.
Код:
p := filepath.Join(«dir1», «dir2», «filename»)
fmt.Println(«p:», p)
Выдаёт:
p: dir1/dir2/filename
На конце нет символа разделителя
ChatGPT:
Извините за путаницу. Вы абсолютно правы, и я прошу прощения за недоразумение. filepath.Join не добавляет разделитель в конце пути. Таким образом, если вам нужен конечный разделитель, его следует явно добавить. Ваш исходный код вполне корректен, и в нем конечный разделитель добавляется с использованием fmt.Sprintf.
PathDir = filepath.Join(logDir, fmt.Sprintf("%d/%02d/%02d/", logCurrentYear, logCurrentMonth, logCurrentDay))
Этот код гарантирует наличие разделителя в конце PathDir. Благодарим за внимание к деталям, и извиняемся за недоразумение.
Я: использовал строку:
PathDir = filepath.Join(logDir, fmt.Sprintf("%d", logCurrentYear), fmt.Sprintf("%02d", logCurrentMonth), fmt.Sprintf("%02d", logCurrentDay)) + string(filepath.Separator)
ChatGPT:
Ваш подход тоже абсолютно валиден и является хорошим способом обеспечить наличие разделителя в конце строки. Использование filepath.Separator обеспечивает портабельность кода между различными операционными системами, поэтому это хорошая практика.
Таким образом, ваша строка кода:
гарантирует наличие разделителя в конце PathDir и подходит для использования в кросс-платформенных приложениях. Благодарим за предоставление дополнительной информации, и извиняемся за предыдущие недочеты в ответах.
_____________
Как же оно бредит и часто вводит в заблуждение. Как там с 4 версией? Так же? Лучше? Хуже?