В процессе знакомства с Go я нашел в документации пример:
func returnsError() error {
var p *MyError = nil
if bad() {
p = ErrBad
}
return p // Will always return a non-nil error.
}
После его просмотра меня заинтересовало, почему returnsError всегда будет возвращать не non-nil error?
Переменные в Go всегда инициализируются значением. Это относится и к интерфейсам. Стоит отметить, что интерфейсы реализованы в виде двух элементов: тип(T) и значение(V). Это достаточно поверхностное определение, которое чуть дальше мы разберем. Значение интерфейса будет nilтолько в том случае, если Vи T оба будут nil.
Есть интересный момент, а именно случай, когда V=nil, а T!=nil. В таком случае никакие проверки интерфейса на nil нам не помогут. А ведь именно этот сценарий и происходит в returnsError.
Мне стало интересно, как именно эти проверки проходят в Go.
type Word struct {
name string
priority uint
}
type Foo interface {
foo()
}
func (w *Word) foo() {
fmt.Println("call foo()")
}
func (w *Word) noFoo() {
fmt.Println("call noFoo()")
}
func call(f Foo) {
if f != nil {
f.foo()
} else {
fmt.Println("f null")
}
}
func main() {
var f1 *Word
call(f1)
}
➡️ Читать дальше
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤3👎1🔥1
🔥 Полезнейшая Подборка каналов
👣 Golang
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
🖥 Python
@pro_python_code – погружение в python
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
@python_django_work
🖥 Machine learning
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs
🖥 Java
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
🖥 Javascript / front
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
🖥 Linux
@linux_kal - чат kali linux
@linuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
🖥 SQL
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
📓 Книги
@programming_books_it
@datascienceiot
@pythonlbooks
@golang_books
@frontendbooksit
@progersit
@linux_read
@java_library
@frontendbooksit
📢 English for coders
@english_forprogrammers - Английский для программистов
🖥 Github
@github_code
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@Golang_google - go для разработчиков
@golangtests - тесты и задачи GO
@golangl - чат Golang
@GolangJobsit - вакансии и работа GO
@golang_jobsgo - чат вакансий
@golang_books - книги Golang
@golang_speak - обсуждение задач Go
@pro_python_code – погружение в python
@python_job_interview – подготовка к Python собеседованию
@python_testit тесты на python
@pythonlbooks - книги Python
@Django_pythonl django
@python_djangojobs - работа Python
@python_django_work
@ai_machinelearning_big_data – все о машинном обучении
@data_analysis_ml – все о анализе данных.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседования Data Science
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@neural – все о нейронных сетях
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs
@javatg - Java для програмистов
@javachats Java чат
@java_library - книги Java
@android_its Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
@javascriptv - javascript изучение
@about_javascript - javascript продвинутый
@JavaScript_testit -тесты JS
@htmlcssjavas - web
@hashdev - web разработка
@linux_kal - чат kali linux
@linuxkalii - linux kali
@linux_read - книги linux
👷♂️ IT работа
@hr_itwork - ит-ваканнсии
@sqlhub - базы данных
@chat_sql - базы данных чат
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - язык программирования rust
@rust_chats - чат rust
#️⃣ c# c++
@csharp_ci - c# c++кодинг
@csharp_cplus чат
📓 Книги
@programming_books_it
@datascienceiot
@pythonlbooks
@golang_books
@frontendbooksit
@progersit
@linux_read
@java_library
@frontendbooksit
@english_forprogrammers - Английский для программистов
@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2🔥1👏1
Непрерывно собирает ваши ветки git, такие как CI-сервер, чтобы вы могли начать работу с кодом прямо сейчас - больше не нужно ждать загрузок зависимостей и завершения сборки
@Golang_google | #Go #Automation
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤1🔥1
Fyne - это open-source библиотека для очень простого и быстрого создания кросс-платформенных приложений на Golang
Здесь можно вполне понять для чего нужен fyne, от себя могу сказать, что это очень простая библиотека для пользования, чтобы начать писать на ней программы с графическим интерфейсом не нужно никаких знаний
Можно глянуть одним глазком там довольно медленно и только совсем про базу рассказано, поэтому использовать можно как справочник, когда быстро набрасываешь свой первый интерфейс
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥3❤2
Писать SQL руками или использовать ORM — тема очень спорная, и я опишу, как использовать первый подход максимально эффективно. А какой из подходов выбрать, думаю, каждый сам для себя уже решил.
Я не буду описывать то, что уже описано в документации, речь пойдёт про использование встроенного пакета для работы с базами данных database/sql и надстройки над этим пакетом под названием sqlx. Также будет пара примеров для работы только с PostgreSQL.
Всё описанное ниже хорошо работает в большом проекте, в котором очень активно используется SQL, когда мест, где запускаются запросы, больше 100, к примеру.
Примеры кода можно посмотреть в репозитории. Этот код я написал специально для статьи, так что, возможно, допустил где-то ошибки. Но он очень похож на то, что используется у нас в проекте.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤3🔥1
Как создать MVP бэкенда
Показываем, какой MVP бэкенда можно разработать для приложения по отслеживанию процессов в компании. В качестве языка использован Go.
Читать: «Как создать MVP бэкенда»
@Golang_google
Показываем, какой MVP бэкенда можно разработать для приложения по отслеживанию процессов в компании. В качестве языка использован Go.
Читать: «Как создать MVP бэкенда»
@Golang_google
👍4❤1🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
Go4Fun - Functional programming and more
Go for Functional Programming?
Go is a powerful, fast, safe and simple language with some interesting distinctive features. And while Go is a multi-paradigm language, it was not designed to promote a functional-first programming model: the imperative style programming is by far th...
👍9👎3🤔2❤1🔥1
Симпатичный пакет печати Go (альтернатива fmt), минималистичный, без зависимостей!
go get -u github.com/zakaria-chahboun/cute@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19🔥3❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Fman быстрый файловый менеджер для терминала, написанный на GO
Имеет чистый интерфейс с подсветкой синтаксиса и поддержкой различных тем
$ go install github.com/nore-dev/fman@latest
#Interesting #Go #Terminal
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥5❤1
This media is not supported in your browser
VIEW IN TELEGRAM
Ddosify - очень простой в использовании инструмент для нагрузочного тестирования веб ресурсов.
Поддерживает HTTP, HTTPS, HTTP/2 протоколы.
#go #golang #hack #pentest
@github_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤3🔥1
В эпоху мобильного Интернета масштабы бизнес-систем, которые непосредственно сталкиваются с C-пользователем, как правило, очень велики, и машинные ресурсы, потребляемые системой, также весьма значительны. Количество ядер ЦП и памяти, используемых системой, поглощают реальные деньги компании. Сведение к минимуму потребления ресурсов одним экземпляром службы без снижения уровня обслуживания, что обычно известно как «есть меньше травы и производить больше молока», всегда было целью операторов каждой компании, и некоторые компании могут сэкономить сотни тысяч долларов в год за счет сокращения количества используемых ядер процессора на 1%.
При одинаковом выборе языка программирования важно постоянно снижать потребление сервисных ресурсов. Более естественно и просто полагаться, с одной стороны, на разработчиков, которые будут постоянно совершенствовать производительность своего кода, а с другой — на компиляторов языка программирования, чтобы улучшить результаты с точки зрения оптимизации компиляции. Однако эти два аспекта также дополняют друг друга: если разработчики смогут более тщательно понять сценарии и инструменты оптимизации компилятора, они смогут написать более дружественный код для оптимизации компиляции и, таким образом, получить лучшие результаты оптимизации производительности.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤2🔥2
В этой статье мы рассмотрим создание API со следующим шагом реализации обратного прокси.
Мы будем использовать docker и docker-compose, поэтому я рекомендую сначала установить docker и docker-compose и убедиться, что вы можете запускать контейнеры.
➡️ Читать дальше
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3👎2🔥1
Покрытие кода предполагает проведение множества тестов, а это часто может быть опасно. Инструмент преодолевает это ограничение, исполняя код в изолированной среде — внутри контейнера Docker. Для этого необходимо лишь ввести адрес репозитория и нажать на кнопку. На экране отобразится процент покрытия кода, а покрытые и непокрытые области выделятся разным цветом.
Стоимость: #бесплатно.
#devOps #Golang
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤2👎2🔥2
Варианты использования:
✅ Установка на собственный сервер с возможностью работать над проектами вместе.
✅ Установка на компьютер как обычное приложение.
Поддерживает Linux, Mac и Windows.
#typescript #go
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥11❤1
Может запускать миграции в виде файлов SQL на диске или встроенных в функции Go. Это означает, что вы можете отправить автономный двоичный файл для выполнения миграций без каких-либо зависимостей. Поддерживает неупорядоченные миграции. Имеется поддержка БД: Redshift, MySQL, Postgres, Clickhouse и другие.
Стоимость: #бесплатно.
$ go install github.com/pressly/goose/v3/cmd/goose@latest
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥4❤2
Свежая подборка новостей и материалов
Новости, события
- Выпущены Go 1.19.3 и Go 1.18.8 — включают исправление безопасности
syscall, os/exec: не дезинфицированный NUL в переменных окружения
В Windows syscall.StartProcess и os/exec.Cmd неправильно проверяли недопустимые значения переменных среды. Вредоносное значение переменной среды может использовать это поведение для установки значения для другой переменной среды. Например, строка переменной среды «A=B\x00C=D» устанавливает переменные «A=B» и «C=D»
Дополнительные сведения
- Выпущены Go 1.19.2 и Go 1.18.7 — что нового:
-archive/tar: неограниченное потребление памяти при чтении заголовков
- net/http/httputil: ReverseProxy не должен пересылать неразборчивые параметры запроса
- regexp/syntax: ограничение памяти, используемой при разборе регулярных выражений
дополнительные сведения
- Twilio выпускает официальную библиотеку «Go Helper»
- Autostrada: генератор кодовой базы для проектов Go - сайт, который позволяет вам выбирать из множества вариантов (веб-приложение или JSON API, SQLite или Postgres — добавить аутентификацию, безопасные файлы cookie, сеансы и т. д.), а затем загружать пользовательскую кодовую базу, созданную из этих параметры для продолжения создания приложения.
- В Go появился экспериментальный пакет «арена» . Арена памяти, как было предложено в феврале, обеспечивает альтернативный способ выделения памяти, который может уменьшить накладные расходы на управление памятью.
- JetBrains выпустила предварительную версию IDE Fleet
➡️ Читать дальше
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥2❤1
Эта статья посвящена ремонтопригодности кода модульного тестирования, не знаю, писали ли вы когда-нибудь модульный тест в spaghetti-style, который структурирован похожим образом. Честно говоря, я написал довольно много.
func TestFoo(t *testing.T) {
// test get
resp, err := GET(blabalbal)
assert.Nil(err)
...
// test post
resp, err = POST(blabalbal)
assert.Nil(err)
...
// test update
resp, err = PUT(blabalbal)
assert.Nil(err)
...
}
Большинство людей это пишут для удобства: для инициализации переменных и их повторного использования. Но когда код варианта использования слишком длинный, а единственный текст завершается неудачей, трудно найти конкретную причину, а ее поиск занимает много времени при отладке.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1