From 68c7390bd2e0069938e097d2cbcf476be3d549d3 Mon Sep 17 00:00:00 2001 From: serr Date: Mon, 14 Apr 2025 21:07:00 +0300 Subject: [PATCH] small change css --- assets/css/styles.css | 1 - mvc/views/blocks/footer.gohtml | 4 ++-- posts/test.md | 2 +- posts/unsafe-change-string-go.md | 12 ++++++++++++ 4 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 posts/unsafe-change-string-go.md diff --git a/assets/css/styles.css b/assets/css/styles.css index f0a77e6..8b797c3 100644 --- a/assets/css/styles.css +++ b/assets/css/styles.css @@ -31,7 +31,6 @@ main > div { box-sizing: border-box; border: 1px solid; width: 100%; - color: black; padding-left: 10px; padding-right: 10px; } diff --git a/mvc/views/blocks/footer.gohtml b/mvc/views/blocks/footer.gohtml index 15dee7b..523686e 100644 --- a/mvc/views/blocks/footer.gohtml +++ b/mvc/views/blocks/footer.gohtml @@ -21,11 +21,11 @@

- this site is written in Go without using frameworks, hosting is hostetski, domain bought for the price of a can of beer + this site is written in Go, hosting is hostetski, domain bought for the price of a can of beer

2024 - now

-{{ end }} \ No newline at end of file +{{ end }} diff --git a/posts/test.md b/posts/test.md index 0a51e8c..0b84a03 100644 --- a/posts/test.md +++ b/posts/test.md @@ -1,6 +1,6 @@ # Это тестовый пост [Этот](/test/) пост был *написан* в файле **формата** .md. -Тестирую систему загрузки постов на сайт, исходно находящихся в .md. +Тестирую систему загрузки постов на сайт, исходно находящихся в markdown. Используемый фреймворк: [github.com/gomarkdown/markdown](https://github.com/gomarkdown/markdown) \ No newline at end of file diff --git a/posts/unsafe-change-string-go.md b/posts/unsafe-change-string-go.md new file mode 100644 index 0000000..5b7f396 --- /dev/null +++ b/posts/unsafe-change-string-go.md @@ -0,0 +1,12 @@ +# Как же все таки изменить байты строки в Go? +Просто захотелось чуть чуть поиграться с пакетом unsafe в Go. + +Строки (тип string) в Go являются *immutable*, то есть изменять их нельзя. Ну вообще конечно можно, но не напрямую. + +Строка в Go под капотом является структурой вида: **указатель на данные, длина данных.** И первое, что приходит в голову чтобы изменить строку - добраться до поля с указателем, прибавить к нему индекс байта который надо поменять, разыменовать полученный адрес и что то ему присвоить. + +Но в реальности все не так просто и при попытке что то положить по вычисленному адресу программа упадет с *segmentation fault (SIGSEGV)*. Чтобы этого избежать, предварительно надо выдать права на запись в страничку памяти где находится целевая строка. Сделать это можно через системные вызовы. + +Код с пояснениями можно скачать [тут](https://git.hikan.ru/serr/unsafe-change-string-go) + +Тестил на **go version go1.22.2 linux/amd64** \ No newline at end of file