Mutex (mutual exclusion — взаимное исключение)
Критическая секция — участок кода, где
sync.Mutex
— Только
var mu sync.Mutex
func increment() {
mu.Lock()
count++
mu.Unlock()
}
Здесь мы рассматриваем
count
при sync.RWMutex
— Позволяет:
var mu sync.RWMutex
func set(key, value string) {
mu.Lock()
cache[key] = value
mu.Unlock()
}
func get(key string) string {
mu.RLock()
defer mu.RUnlock()
return cache[key]
}
Дает
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1👏1
package main
import (
"fmt"
)
func main() {
x := 10
if true {
x := 5 // затенение внешней переменной x
fmt.Println(x) // выводит 5
}
fmt.Println(x) // выводит 10
}
err
. Пример часто встречающегося кода в Go:value, err := someFunction()
if err != nil {
// обработка ошибки
}
// ...
value2, err := anotherFunction() // новое затенение переменной err
if err != nil {
// обработка ошибки
}
Если использовать
:=
=
, вы создадите err
, которая «затенит» переменную err
из❕
1.
go vet -shadow ./...
2.
golangci-lint run --enable shadow
3.
shadow
:$ go get -u golang.org/x/tools/go/analysis/passes/shadow/cmd/shadow
$ go vet -vettool=$(which shadow)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
int8
int16
int
sync.Pool
nil
неиспользуемым структурам.Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Примитивы синхронизации — инструменты (в основном из пакета
sync
), которые обеспечивают •
sync.Mutex
— базовый механизм •
sync.RWMutex
— вариант Одновременно могут
Запись возможна
•
sync.WaitGroup
— позволяет •
sync.Once
— гарантирует •
sync.Cond
— условная переменная, при помощи которой Go предлагает два подхода к синхронизации — через
sync
и через Please open Telegram to view this post
VIEW IN TELEGRAM
👍1