Это статья об основах программирования на Go. На канале я рассказываю об опыте перехода в IT с нуля, структурирую информацию и делюсь мнением.
Хой, джедаи и амазонки!
Возвращаюсь иногда к конспектам в бумажным блокноте или своим проектам на GitHub. Решил, что будет полезно визуализировать часть информации. Для этого собрал сведения в одном месте, плюс добавил инфо по обработке ошибок.
Также посмотрим на примере текстового квеста реализацию работу с файлами.
1. Визуализация
Ниже представлены четыре блока по работе с данными:
- Запись данных в с файл;
- Создание файла с одновременным назначением права доступа и записи данных;
- Чтение из файла;
- Открытие файла для записи.
Моя цель - визуализировать основные моменты. В программировании есть много подводных камней, которые нужно самостоятельно прочувствовать, например читая официальную документацию.
О каких подводных камнях идёт речь? Несколько примеров:
- Невозможно сделать запись в файл после его открытия через os.Open(fileName), поскольку функция Open открывает файл для чтения, а не записи;
- Если после os.Open ты прочитал файл каким-либо образом, то чтобы прочитать его повторно, нужно повторно использовать os.Open;
- Если создавать и делать запись в файл через os.WriteFile, а файл уже существует, то его содержимое будет удалено. И новое содержимое будет записано поверх, а не в дополнение к имеющемуся содержимому.
Вообще, приходит понимание, что официальная документация - это то, чем предстоит постоянно пользоваться. И нужно учиться "дружить" с документацией за счёт регулярного к ней обращения. Поскольку в различных блогах могут донести часть информации, либо трактовать информацию не совсем так, как оно на самом деле.
Я делаю так: открываю интересующую меня информацию, пробую понять её по-английски, затем перевожу страницу - никогда подобной функцией браузера не пользовался, а здесь - это необходимость:
2. Применение
Я рассказывал ранее о текстовом квесте на Go. Пока не могу взяться за эту работу, т.к. нужно написать хорошую историю, а желания пока на это нет. Часть истории я написал, ниже поделюсь фрагментом, дальше работа встала. А сейчас хочу поговорить о способе чтения из файла file.Read.
В графической методичке выше я для этого способа использовал дополнительную функцию, которая получает информацию о файле. А далее использовал один из видов полученной информации, чтобы указать размер читаемого фрагмента из файла.
Т.е., вместо фрагмента кода, который позволяет прочитать весь файл:
buf := make([]byte, info.Size())
Могу записать, например:
buf := make([]byte, 25)
Если в файл записано более 25 байт информации, то мы прочитаем только часть файла. Либо, если в файл записано менее 25 байт информации, оставшаяся часть будет прочитана пробелами (и при выводе в терминал, выведутся пробелы после содержания файла).
Когда дело доходит до печати информации в терминал, мы можем задать произвольный диапазон печати из прочитанного буфера.
Пример: у меня есть рассказ в одном файле txt - основная история текстового квеста. Мне нужно чтобы он выводился определёнными частями в терминал в нужный момент. Как это сделать? Например, так:
fmt.Println(string(buf[:1500]))
Это означает, что в терминал будет выведена информация из буфера с начала по 1500й байт.
Проблема: придётся вручную высчитывать, на каком байте заканчивается фрагмент рассказа из файла txt.
На помощь приходит функция Index пакета strings. Нужно будет в файле рассказа сделать метки, и по этим меткам искать необходимый байт. А код будет выглядеть примерно так:
indexEnter := strings.Index(string(buf), "⌘")
fmt.Println(string(buf[:indexEnter]))
buf = buf[indexEnter:]
В данном примере меткой служит спецсимвол "достопримечательность" - ⌘. Его потребуется расставить по главам в тексте.
Далее показываю часть того рассказа, что я написал.
3. Фрагмент текстового квеста
Написал начало истории, т.е. процента 3 от полного объёма рассказа. И реализовал на Go постепенный вывод информации в терминал, что добавляет красоты приложению:
--//--//--
Напоминаю, если захочешь купить курс от SkillBox, воспользуйся моей реферальной ссылкой. Ты получишь огромную скидку на курс и плюс в карму за помощь каналу.
Бро, ты уже здесь? 👉 Подпишись на канал для новичков «Войти в IT» в Telegram, будем изучать IT вместе 👨💻👩💻👨💻