@@ -7,12 +7,12 @@ import (
7
7
8
8
/*
9
9
10
- Όταν θέλουμε να έχουμε περιπτώσεις επιλογών η Go έχει μια ειδική
11
- εντολή που ονομάζεται select η οποία λειτουργεί σαν την switch
10
+ Όταν θέλουμε να έχουμε περιπτώσεις επιλογών σε go routines η Go έχει μια ειδική
11
+ εντολή που ονομάζεται " select" η οποία λειτουργεί σαν την switch
12
12
αλλά για τα κανάλια
13
13
14
14
Το παρακάτω πρόγραμμα εμφανίζει "Από 1" και "Απο 3". Η select
15
- παίρνει το πρώτο κανάλι που είναι έτοιμο και λαμβάνει από αυτό
15
+ παίρνει το πρώτο κανάλι που είναι έτοιμο και λαμβάνει από αυτό δεδομένα
16
16
(ή στέλνει σε αυτό). Αν περισσότερα από ένα κανάλια είναι έτοιμα
17
17
τότε επιλέγει τυχαία ένα από το οποίο θα λαμβάνει. Εάν κανένα
18
18
από τα κανάλια δεν είναι έτοιμο, τότε η διαδικασία σταματάει μέχρι
@@ -22,33 +22,35 @@ import (
22
22
23
23
func main () {
24
24
25
+ c1 := make (chan string , 1 )
26
+ c2 := make (chan string , 3 )
25
27
/*
26
28
Είναι επίσης δυνατόν να περάσουμε μια δεύτερη παράμετρο στη
27
29
συνάρτηση make, που είδαμε όταν δημιουργούμε ένα κανάλι
28
30
Το πρώτο δημιουργεί ένα buffered κανάλι με χωρητικότητα 1 και το δεύτερο
29
31
με χωρητικότητα 3.
30
32
Κανονικά τα κανάλια είναι συγχρονισμένα δηλαδή οι δύο πλευρές του
31
33
καναλιού θα περιμένουν έως ότου η άλλη πλευρά να είναι έτοιμη.
32
- Ένα buffered κανάλι είναι ασύγχρονο δηλαδή στην αποστολή
34
+ Ένα buffered κανάλι απο την άλλη, είναι ασύγχρονο δηλαδή στην αποστολή
33
35
ή στη λήψη ενός μηνύματος δεν θα περιμένει, εκτός αν το κανάλι
34
36
είναι ήδη πλήρες.
35
37
*/
36
- c1 := make (chan string , 1 )
37
- c2 := make (chan string , 3 )
38
38
39
39
go func () {
40
40
for {
41
41
c1 <- "Απο 1"
42
42
time .Sleep (time .Second * 1 )
43
43
}
44
44
}()
45
+
45
46
go func () {
46
47
for {
47
48
c2 <- "Απο 3"
48
49
time .Sleep (time .Second * 3 )
49
50
50
51
}
51
52
}()
53
+
52
54
go func () {
53
55
for {
54
56
select {
@@ -60,7 +62,7 @@ func main() {
60
62
να εφαρμόσει ένα timeout.
61
63
Το time.After δημιουργεί ένα κανάλι και μετά τη δοθείσα
62
64
διάρκεια, θα στείλει τον τρέχον χρόνο σε αυτό.
63
- (εμείς δεν ενδιαφερόμαστε για το χρόνο γι'αυτό δεν τον
65
+ (εμείς δεν ενδιαφερόμαστε για το χρόνο γιαυτό δεν τον
64
66
αποθηκεύουμε σε μια μεταβλητή)*/
65
67
case <- time .After (time .Second ):
66
68
fmt .Println ("Λήξη χρόνου" )
@@ -74,5 +76,5 @@ func main() {
74
76
}()
75
77
76
78
var input string
77
- fmt .Scanln (& input )
79
+ fmt .Scanln (& input ) // Περιμένει να πατήσουμε ENTER για να τερματίσει το πρόγραμμα
78
80
}
0 commit comments