Hi all. A few days ago, I started working on creating cards. It will be a long process. Very long. Why? I need cards for spells. I need cards for race traits and class features. I need cards for conditions. I need cards for feats and other things. I need many cards in Rrussian. I
D&D + english + Tasha’s Cauldron of Everything
Да… долго не было записей. 🙂 Если кратко — много чего произошло и происходит. Например, мы снова начали играть в настолки. В этот раз по правилам D&D5e. Плюс, я в который уже раз пытаюсь хоть как-то разобраться в английском. В связи с этим я тут подумал и появилась идея совместить интересное с интересным. Котёл Таши
Старинный алжирский рецепт
Добрый день, друзья! Хочу поделиться с вами одним интересным рецептом. Как я слышал, итальянцы свою пиццу придумали на основе именно этого блюда. Ну а так как я ленив, то часть компонентов изменена под то, что у нас достать несложно. Ну, поехали.
WSL вторая (и более) linux под виндами
Потребовалось мне для работы развернуть под WSL qemu для arm с отладкой и т.п. А оно давай требовать либы армовские, и далее по нарастающей. В общем вдавил я по тормозам и пошел гуглить. Результат чего вам тут и предлагаю. Во-первых, здесь я предлагаю наиболее легкий путь. На самом деле все это можно проделать руками, добавиви
Автомаунт папок хоста в Ubuntu 18/19 на VirtualBox
Всю эту информацию не особенно сложно найти в интернете, но я не встречал её всю в одном месте. Исправляю ситуацию. В первую очередь, чтобы самому в следующий раз опять не гуглить. Договоримся, что у вас уже есть виртуальная машина с убунтой и установленными дополнениями гостевой ОС. 1. В убунте создаём папку, куда будет маунтиться папка с
Язык Go — хинты. 03 — углубленные срезы
Уж извините, лучше название не придумалось. 🙂 Допустим, у нас есть срез со строками. По какой-то причине нам нужно взять его часть и использовать где-то ещё. Допустим, при использовании нам требуется добавить новый элемент. Как новичёк и не до конца понимающий работу срезов в Go, я бы сделал так:
1 2 3 |
x := []string{"one", "two", "three", "four"} y := x[1:3] y = append(y, "five") |
И ожидал бы увидеть
1 2 3 4 |
fmt.Println(len(x), cap(x), x) // 4 4 [one two three four] fmt.Println(len(y), cap(y), y) // 3 4 [two three five] |
Язык Go — кратко. Часть 8. Структуры и интерфейсы
В языке Go очень своеобразная модель ООП. Её называют «утиной типизацией». Здесь нет наследования. Зато есть встраивание, которое частично заменяет наследование. Здесь нет перегрузки и переопределения методов. Всё упрощено до предела, чтобы уменьшить возможность построить сложно поддерживаемую систему, изменения в базовых классах которой вполне могут привести к нарушениям и неожиданному поведению в работе программы. Что мы
Язык Go — кратко. Часть 7. «Исключения»
В языке Go нет исключений в том виде, к которому мы привыкли в С/С++, Java, Python и т.п. языках. Здесь вообще не принято доводить ситуацию до настолько критической, когда происходит экстренное «выбрасывание» куда-то далеко наверх по дереву вызовов. Путь Go — проверка входящих данных и различных условий. Если можем работать — работаем. Если не можем
Язык Go — кратко. Часть 6. Каналы
Каналы крайне полезная штука и используются для передачи данных между рутинами, а также для синхронизации. Альтернативный способ — локи. Но каналы — идейно правильный. 😉 Каналы могут быть синхронными и асинхронными, двунаправленными и однонаправленными. Синхронный канал приводит к остановке кода при чтении, пока в канал не отправят данные, и при записи, пока из канала не
Язык Go — хинты. 02 — загрузка конфига
Обычная задача — есть конфиг нашей программы в каком-нибудь файле и нам надо его загрузить для последующего использования. Конфиги сейчас можно хранить в чём-нибудь вроде YAML или хотя бы JSON или XML. Допустим, наш в ямле.
1 2 3 4 |
option1: string value 1 option2: - option3: string value 3 - option4: 4 |
В отличие от JSON и XML, для YAML официального пакета пока нет. Поэтому гуглим и находим нужное.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import "gopkg.in/yaml.v2" type Option2 struct { Option3 string `yaml:"option3"` Option4 int `yaml:"option4"` } type Config struct { Option1 string `yaml:"option1"` Option2 Option2 `yaml:"option2"` } configData, err := ioutil.ReadFile(configFilename) if err != nil { log.Fatalf("error: %v", err) } conf = Config{} err = yaml.Unmarshal(configData, &conf) if err != nil { log.Fatalf("error: %v", err) } |