Что помешало научиться готовить temporal.io (единорог, на минуточку)? Пилить инфраструктурный велосипед - это значит откладывать на потом "business value".
В GoLang отсутствуют ссылочные типы данных, но вместо них используются указательные типы данных. Указатели в GoLang позволяют работать с данными по их адресу в памяти. Указательные типы данных в GoLang позволяют эффективно работать с данными и передавать их по ссылке, что может быть полезно во многих ситуациях.
В GоLang нет ссылок, только указатели (ссылки есть в c/c++). У переменой есть значение, адрес ссылки это адрес значения, а указатель на значение имеет свой собственный адрес (это очень грубое объяснение).
Всем известна простая истина - в Go абсолютно все передается по значению.
А вот что рассказывает робот по теме "Ссылочные типы данных":
Ссылочные типы данных в GoLang - это типы данных, которые хранятся в системной куче (heap) и передаются по ссылке, а не по значению. Это означает, что при передаче ссылочного типа данных в функцию, функция работает с оригинальным объектом, а не с его копией. Некоторые из ссылочных типов данных в GoLang:
Срезы (slices) - это динамические массивы, которые представляют собой ссылку на последовательность элементов определенного типа.
Карты (maps) - это ассоциативные массивы, которые представляют собой ссылку на набор пар ключ-значение.
Каналы (channels) - это механизм для обмена данными между горутинами (goroutines) в многопоточной программе.
Указатели (pointers) - это переменные, которые хранят адрес в памяти другой переменной.
?? Структуры (structs) - это пользовательские типы данных, которые могут содержать поля разных типов.
Интерфейсы (interfaces) - это типы данных, которые определяют набор методов, которые должны быть реализованы для типа данных, чтобы он удовлетворял интерфейсу.
Функции (functions) - это типы данных, которые могут быть переданы в качестве аргументов другим функциям или возвращены из функций.
Все эти типы данных являются ссылочными в GoLang и передаются по ссылке, а не по значению.
Нельзя сравнивать []int{1,2,3} == []int{1,2,3}, в отличии от [3]int{1,2,3} == [3]int{1,2,3}
Поправка:
В GoLang тип данных struct является составным типом данных, который объединяет несколько полей разных типов данных в один объект. struct не является ссылочным типом данных, а является значимым типом данных, то есть при передаче struct в функцию или присваивании его переменной происходит копирование значений его полей. Однако, при передаче struct в функцию в качестве аргумента, происходит передача его копии, что может быть неэффективно для больших struct. В таких случаях можно использовать указатели на struct.
Попробовал пройти практику. Брокеры kafka-2 и kafka-3 оставнавливаются сразу после запуска. В логе было предупреждение про KAFKA_KRAFT_CLUSTER_ID - прописал, не помогло. В итоге невозможно создать topic:
Failed to create topic, kafka responded with the following error: INVALID_REPLICATION_FACTOR: Replication factor is below 1 or larger than the number of available brokers.
У семи нянек дитя без глаза. Осваиваем бюджеты. Самопальная оркестрация микросервисов. Теперь ещё это безобразие. Рука-лицо. А я же прикупил акции Ozon-а ))
А почему -race не детектит гонку данных для примера кода выше?
Что помешало научиться готовить temporal.io (единорог, на минуточку)? Пилить инфраструктурный велосипед - это значит откладывать на потом "business value".
Ещё один пример в мою коллекцию:
https://habr.com/ru/companies/oleg-bunin/articles/418235/
https://habr.com/ru/companies/ozontech/articles/590709/
В GoLang отсутствуют ссылочные типы данных, но вместо них используются указательные типы данных. Указатели в GoLang позволяют работать с данными по их адресу в памяти. Указательные типы данных в GoLang позволяют эффективно работать с данными и передавать их по ссылке, что может быть полезно во многих ситуациях.
В GоLang нет ссылок, только указатели (ссылки есть в c/c++). У переменой есть значение, адрес ссылки это адрес значения, а указатель на значение имеет свой собственный адрес (это очень грубое объяснение).
Кошмар для UGC сайтов. Но фарш невозможно провернуть назад. Надо учиться теперь с этим жить.
Это отправная точка. Если относиться к LLM с фигой в кармане, то можно получать некоторую выгоду.
"Огласите весь список, пожалуйста!"
slices, maps, channels, pointers, interfaces, functions, strings.
Почему для “type parameters” квадратные скобки, когда угловые для генериков в Java, C#, C++, TypeScript и Dart?
Вероятно, по аналогии с объявлением типа для ключей мапы:
map[int]bool
И чтобы дистанцироваться от генериков в других языках, т.к. нет возможности создавать классы или интерфейсы с “type parameters”. Вместо этого можно использовать обобщенные функции и методы.
Как избежать применения ORM для Go, используя чистый SQL - полезная заметка?
А вот что рассказывает робот по теме "Ссылочные типы данных":
Ссылочные типы данных в GoLang - это типы данных, которые хранятся в системной куче (heap) и передаются по ссылке, а не по значению. Это означает, что при передаче ссылочного типа данных в функцию, функция работает с оригинальным объектом, а не с его копией. Некоторые из ссылочных типов данных в GoLang:
Срезы (slices) - это динамические массивы, которые представляют собой ссылку на последовательность элементов определенного типа.
Карты (maps) - это ассоциативные массивы, которые представляют собой ссылку на набор пар ключ-значение.
Каналы (channels) - это механизм для обмена данными между горутинами (goroutines) в многопоточной программе.
Указатели (pointers) - это переменные, которые хранят адрес в памяти другой переменной.
?? Структуры (structs) - это пользовательские типы данных, которые могут содержать поля разных типов.
Интерфейсы (interfaces) - это типы данных, которые определяют набор методов, которые должны быть реализованы для типа данных, чтобы он удовлетворял интерфейсу.
Функции (functions) - это типы данных, которые могут быть переданы в качестве аргументов другим функциям или возвращены из функций.
Все эти типы данных являются ссылочными в GoLang и передаются по ссылке, а не по значению.
Нельзя сравнивать []int{1,2,3} == []int{1,2,3}, в отличии от [3]int{1,2,3} == [3]int{1,2,3}
Поправка:
В GoLang тип данных
struct
является составным типом данных, который объединяет несколько полей разных типов данных в один объект.struct
не является ссылочным типом данных, а является значимым типом данных, то есть при передачеstruct
в функцию или присваивании его переменной происходит копирование значений его полей. Однако, при передачеstruct
в функцию в качестве аргумента, происходит передача его копии, что может быть неэффективно для большихstruct
. В таких случаях можно использовать указатели наstruct
.Да почему "лажа"? Это отправная точка. Если относится к LLM с фигой в кармане, то можно получать некоторую выгоду.
Спасибо! Нашёл Communicating sequential processes(CSP) for Go developer in a nutshell.
Добавил про Channel Axioms к 9-му вопросу.
Gogs - тоже MIT
Попробовал пройти практику. Брокеры kafka-2 и kafka-3 оставнавливаются сразу после запуска. В логе было предупреждение про KAFKA_KRAFT_CLUSTER_ID - прописал, не помогло. В итоге невозможно создать topic:
Failed to create topic, kafka responded with the following error: INVALID_REPLICATION_FACTOR: Replication factor is below 1 or larger than the number of available brokers.
Вы ничего не написали про блокчейн-проекты: golos.id / scorum.ru / bastyon.com
Из тематических вики интересен fandom.com
Федеративные чаты - тоже модная тема.
Flutter!
Спасибо! Только оно пока не умеет рефакторить.
Вот почему мой канал в Ютубчике называется #кодеротбога )) Сложность технологий нарастает по экспоненте. Применение абстракций - профит, очевидно.
У семи нянек дитя без глаза. Осваиваем бюджеты. Самопальная оркестрация микросервисов. Теперь ещё это безобразие. Рука-лицо. А я же прикупил акции Ozon-а ))
temporal.io - мой выбор!