Оператор
select
в Go напоминает конструкцию switch
, но предназначен select
select
default
select
выберет один из них случайным образом.Пример
select
select {
case msg1 := <-ch1:
fmt.Println("Received", msg1)
case msg2 := <-ch2:
fmt.Println("Received", msg2)
case ch3 <- 3:
fmt.Println("Sent 3 to ch3")
default:
fmt.Println("No communication")
}
В этом примере
select
будет ch1
ch2
ch3
default
Please open Telegram to view this post
VIEW IN TELEGRAM
Тест для Golang-разработчиков, проверьте свои знания, готовы ли вы к обучению на курсе.
💻 Ответьте на 20 вопросов за 30 минут и проверьте, готовы ли вы к обучению на онлайн-курсе «Golang Developer. Professional» от OTUS. Сейчас Go становится все востребованнее, благодаря своей производительности, масштабируемости и экосистеме.
После 5 месяцев обучения вы сможете:
— Писать production-ready код, многопоточные и конкурентные программы.
— Понимать синтаксис и внутреннее устройство языка Go.
— Разворачивать микросервисы с помощью Docker.
— Проектировать и реализовывать микросервисную архитектуру на Go.
Также вас ждет прокачка навыков на реальных коммерческих кейсах и под руководством экспертов в этой области. Старт курса 30 июля, успейте на курс. Возможна рассрочка.
👉 ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
💻 Ответьте на 20 вопросов за 30 минут и проверьте, готовы ли вы к обучению на онлайн-курсе «Golang Developer. Professional» от OTUS. Сейчас Go становится все востребованнее, благодаря своей производительности, масштабируемости и экосистеме.
После 5 месяцев обучения вы сможете:
— Писать production-ready код, многопоточные и конкурентные программы.
— Понимать синтаксис и внутреннее устройство языка Go.
— Разворачивать микросервисы с помощью Docker.
— Проектировать и реализовывать микросервисную архитектуру на Go.
Также вас ждет прокачка навыков на реальных коммерческих кейсах и под руководством экспертов в этой области. Старт курса 30 июля, успейте на курс. Возможна рассрочка.
👉 ПРОЙТИ ТЕСТ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Указатели — это
Определение и инициализация
Указатель
*
var x *int
int
.Для получения
&
. Например, &y
y
.*
x
y
*x
y
nil
nil
.
pointerToStruct.FieldName
nil
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤1🥱1
GOMAXPROCS — это
Как работает
Значение по умолчанию
Изменение GOMAXPROCS
runtime.GOMAXPROCS()
Как это влияет на производительность
Инструмент от Uber — automaxprocs, который автоматически настраивает GOMAXPROCS в соответствии с квотой процессора в Linux-контейнерах.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Передача указателей экономит память и улучшает производительность, избегая копирования больших объектов.
type LargeStruct struct {
Field1 [1000]int
Field2 [1000]int
}
func modify(s *LargeStruct) {
s.Field1[0] = 42
}
func main() {
ls := LargeStruct{}
modify(&ls) // Передаем указатель, избегая копирования
}
Для изменения значения переменной в функции и отражения этих изменений за пределами функции необходимо использовать указатель.
func increment(x *int) {
*x++
}
func main() {
num := 10
increment(&num) // Изменение переменной через указатель
fmt.Println(num) // 11
}
nil
Указатели позволяют работать с
nil
type User struct {
Name string
}
func createUser() *User {
return nil // Возвращаем nil, если пользователь не найден
}
func main() {
user := createUser()
if user == nil {
fmt.Println("User not found")
}
}
Указатели необходимы для работы с системными ресурсами или низкоуровневыми API, такими как через
cgo
/*
#include <stdlib.h>
void modify(int *x) {
*x = 42;
}
*/
import "C"
func main() {
var num int
C.modify((*C.int)(&num)) // Используем указатель для передачи в C-функцию
fmt.Println(num) // 42
}
Указатели удобны для совместного использования данных в горутинах, но требуют синхронизации для предотвращения гонок.
func incrementCounter(counter *int) {
*counter++
}
func main() {
counter := 0
go incrementCounter(&counter)
fmt.Println(counter) // Возможно увеличение
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
В стандартной библиотеке Go целый набор мощных инструментов, которые делают процесс разработки проще и удобнее. Эти инструменты помогают разработчикам работать с исходным кодом, проводить тестирование, управлять зависимостями и многое другое.
go fmt
— go get
— go test
— go build
— go run
— go doc
— go vet
— go mod
— Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥1
В Go сборщик мусора (GC) автоматически управляет памятью, но бывают ситуации, когда нужно вмешаться и настроить его работу под свои нужды.
Принудительный запуск GC
Хотя сборщик мусора обычно работает автоматически, мы можем вручную запустить его с помощью функции
runtime.GC()
Отключение и включение GC
Можно временно отключить сборщик мусора, установив
debug.SetGCPercent(-1)
debug.SetGCPercent(100)
GOGC = 100 (значение по умолчанию) означает, что сборка мусора произойдет, когда объем выделенной памяти увеличится на 100% по сравнению с предыдущей сборкой.
GOGC = 50 ускоряет сборку мусора, позволяя ей запускаться чаще — после 50% увеличения памяти.
GOGC = -1 отключает сборщик мусора.
GOGC = 50 ./your-program
Или изменить его внутри программы с помощью
debug.SetGCPercent()
❕Важно помнить
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤4
В Go множество переменных окружения, которые позволяют настраивать поведение инструментов компиляции, сборки и других аспектов работы языка. Эти переменные позволяют разработчикам настраивать рабочее окружение.
GOEXPERIMENTAL
GOARCH
amd64
arm
GOBIN
go install
GOEXE
GOFLAGS
GOOS
linux
darwin
GOPATH
GOPROXY
GOROOT
GOSUMDB
GOTMPDIR
GOVCS
GO111MODULE
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1