for i := 0; i < 10; i++ {
// Create new map
val1 := make(map[string]interface{})
// Copy from the original map to the target map
for key, value := range val {
val1[key] = value
}
val1["v"] = i
c <- val1
}
package main
import (
"encoding/json"
"fmt"
"sync"
)
type Test1 map[string]interface{}
var R sync.Mutex
var W sync.Mutex
var val = Test1{
"s": 1,
"w": 2,
}
func main() {
R.Lock()
go run()
for i := 0; i < 10; i++ {
W.Lock()
val["v"] = i
R.Unlock()
}
}
func run() {
for {
R.Lock()
out, _ := json.Marshal(val)
fmt.Println(string(out))
W.Unlock()
}
}
func growslice(et *_type, old slice, cap int) slice {
...
for 0 < newcap && newcap < cap {
newcap += newcap / 4 //Вот здесь
}
...
configurateLogger()
у вас бесполезная. Она только оперирует внутренней переменной logger
. Чтобы переменную было заметно глобальней нужно объявлять ее в более широком контексте, снаружи функции(а не внутри оператором :=
). А что бы ее было видно в других пакетах она должна именоваться с большой буквы var Logger = configurateLogger()
и все это добро нужно импортировать в другие пакеты. func SiteController(w http.ResponseWriter, r *http.Request) {
bsonQuery := bson.M{}
if node.Params.ExtendFilter != nil { //node.Params.ExtendFilter глобальная переменная
//следует не просто взять ссылку на нее
//bsonQuery = node.Params.ExtendFilter
//а сделать копию для безопасного конкурентного использования
for key, value := range node.Params.ExtendFilter{
bsonQuery[key] = value
}
}
....
doc, err := documents.GetDocumentFrontend(bsonQuery, true)
}
os/exec
package main
import (
"os/exec"
...
)
func main(){
...
//Чтобы получить приглашение в консоли
cmd := exec.Command("sudo", "su")
err := cmd.Run()
if err != nil {
fmt.Printf("%s", err)
}
...
//Или чтобы выпало окошко
out, err := exec.Command("osascript", "-e", "do shell script /path/to/myscript with administrator privileges").Output()
if err != nil {
fmt.Printf("%s", err)
}
...
}
header
, а error при попытке tw.Flush()
, который вы не проверили. После записи header
, нужно залить собственно данные tw.Write(data []byte)
и уже потом делать tw.Flush()
. Вы в header
пообещали залить данные и не залили. Кажется должно быть что то вродеif err := tw.WriteHeader(hdr); err != nil {
return err
}
if n, err := tw.Write(content); err != nil { //вот это не видно как вы сделали
return err
}
if tw.Flush(); err != nil{ //и нужно проверять все ошибки
return err
}
GO111MODULE=auto go get github.com/kataras/iris/v12@latest
func TestRaceDeposit(t *testing.T) {
setBalance(0)
go Deposit(10) //Просто этого вызова уже достаточно
Deposit(10)
if Balance() != 20 {
t.Errorf("unexpected balance: value - %d expect 20", Balance())
}
}