Skip to content

Commit 2d69b7f

Browse files
committed
small changes on description
1 parent a94fe71 commit 2d69b7f

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

16_go_select_buffered/go_select_buffered.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import (
77

88
/*
99
10-
Όταν θέλουμε να έχουμε περιπτώσεις επιλογών η Go έχει μια ειδική
11-
εντολή που ονομάζεται select η οποία λειτουργεί σαν την switch
10+
Όταν θέλουμε να έχουμε περιπτώσεις επιλογών σε go routines η Go έχει μια ειδική
11+
εντολή που ονομάζεται "select" η οποία λειτουργεί σαν την switch
1212
αλλά για τα κανάλια
1313
1414
Το παρακάτω πρόγραμμα εμφανίζει "Από 1" και "Απο 3". Η select
15-
παίρνει το πρώτο κανάλι που είναι έτοιμο και λαμβάνει από αυτό
15+
παίρνει το πρώτο κανάλι που είναι έτοιμο και λαμβάνει από αυτό δεδομένα
1616
(ή στέλνει σε αυτό). Αν περισσότερα από ένα κανάλια είναι έτοιμα
1717
τότε επιλέγει τυχαία ένα από το οποίο θα λαμβάνει. Εάν κανένα
1818
από τα κανάλια δεν είναι έτοιμο, τότε η διαδικασία σταματάει μέχρι
@@ -22,33 +22,35 @@ import (
2222

2323
func main() {
2424

25+
c1 := make(chan string, 1)
26+
c2 := make(chan string, 3)
2527
/*
2628
Είναι επίσης δυνατόν να περάσουμε μια δεύτερη παράμετρο στη
2729
συνάρτηση make, που είδαμε όταν δημιουργούμε ένα κανάλι
2830
Το πρώτο δημιουργεί ένα buffered κανάλι με χωρητικότητα 1 και το δεύτερο
2931
με χωρητικότητα 3.
3032
Κανονικά τα κανάλια είναι συγχρονισμένα δηλαδή οι δύο πλευρές του
3133
καναλιού θα περιμένουν έως ότου η άλλη πλευρά να είναι έτοιμη.
32-
Ένα buffered κανάλι είναι ασύγχρονο δηλαδή στην αποστολή
34+
Ένα buffered κανάλι απο την άλλη, είναι ασύγχρονο δηλαδή στην αποστολή
3335
ή στη λήψη ενός μηνύματος δεν θα περιμένει, εκτός αν το κανάλι
3436
είναι ήδη πλήρες.
3537
*/
36-
c1 := make(chan string, 1)
37-
c2 := make(chan string, 3)
3838

3939
go func() {
4040
for {
4141
c1 <- "Απο 1"
4242
time.Sleep(time.Second * 1)
4343
}
4444
}()
45+
4546
go func() {
4647
for {
4748
c2 <- "Απο 3"
4849
time.Sleep(time.Second * 3)
4950

5051
}
5152
}()
53+
5254
go func() {
5355
for {
5456
select {
@@ -60,7 +62,7 @@ func main() {
6062
να εφαρμόσει ένα timeout.
6163
Το time.After δημιουργεί ένα κανάλι και μετά τη δοθείσα
6264
διάρκεια, θα στείλει τον τρέχον χρόνο σε αυτό.
63-
(εμείς δεν ενδιαφερόμαστε για το χρόνο γι'αυτό δεν τον
65+
(εμείς δεν ενδιαφερόμαστε για το χρόνο γιαυτό δεν τον
6466
αποθηκεύουμε σε μια μεταβλητή)*/
6567
case <-time.After(time.Second):
6668
fmt.Println("Λήξη χρόνου")
@@ -74,5 +76,5 @@ func main() {
7476
}()
7577

7678
var input string
77-
fmt.Scanln(&input)
79+
fmt.Scanln(&input) // Περιμένει να πατήσουμε ENTER για να τερματίσει το πρόγραμμα
7880
}

0 commit comments

Comments
 (0)