Sobes.tech
Middle

რა შეიძლება და რა არა გაკეთება გო-ში არხებში ნაკადის უსაფრთხოებასთან დაკავშირებით?

sobes.tech AI

პასუხი AI-სგან

შესაძლებელია:

  • მონაცემების გაგზავნა და მიღება. თითოეული კითხვა და დაწერა არხში არის ატომური ოპერაცია.
  • არხის დახურვა. დახურვა აღნიშნავს მონაცემების გადაცემის დასრულებას.
  • გამოიყენეთ select ოპერატორი მრავალ არხთან არაბლოკიან ურთიერთქმედებისთვის.
  • გამოიყენეთ ბუფერული და ბუფერული არხები სხვადასხვა სინქრონიზაციის სცენარებისთვის.

არ შეიძლება:

  • ერთდროულად რამდენიმე გორუტინიდან არხის დახურვა დამატებითი სინქრონიზაციის გარეშე. ეს შეიძლება გამოიწვიოს პანიკამ.
  • უკვე დახურული არხის დახურვა. ეს ასევე გამოიწვევს პანიკას.
  • მონაცემების გაგზავნა დახურულ არხში. ეს გამოიწვევს პანიკას.
  • ნულოვანი (არინიციალიზებული) არხიდან წაკითხვა. ეს ბლოკავს გორუტინას.
  • ნულოვანი (არინიციალიზებული) არხში დაწერა. ეს ბლოკავს გორუტინას.

არხების გამოყენების მაგალითი:

// შექმენით ბუფერული არხი მთელი რისთვის
messages := make(chan int)

// გორუტინა მონაცემების გაგზავნისთვის
go func() {
	messages <- 1 // გაგზავნა არხში 1
	messages <- 2 // გაგზავნა არხში 2
	close(messages) // არხის დახურვა გაგზავნის შემდეგ
}()

// მონაცემების კითხვა არხიდან
firstMessage := <-messages
secondMessage := <-messages

// დახურული არხიდან კითხვა აბრუნებს ნულოვან მნიშვნელობას და ok=false
value, ok := <-messages