Παραδείγματα χύτευσης Golang

Paradeigmata Chyteuses Golang



Η διαδικασία αλλαγής του τύπου δεδομένων μιας τιμής από έναν τύπο σε άλλο είναι γνωστή ως μετάδοση τύπων, μερικές φορές γνωστή ως μετατροπή τύπου. Η μετάδοση τύπων πραγματοποιείται στο Go χρησιμοποιώντας τις ρητές μετατροπές τύπων. Το Go υποστηρίζει ισχυρή πληκτρολόγηση. Επομένως, κατά τη μετατροπή μεταξύ τύπων, πρέπει να αναφέρουμε ρητά τον στόχο μας. Αυτό προάγει την ασφάλεια τύπου και μειώνει την πιθανότητα σφαλμάτων πληκτρολόγησης. Σε αυτήν τη συγγραφή, θα εξερευνήσουμε τη μετάδοση με διαφορετικούς τύπους στο Go.

Παράδειγμα 1: Χύτευση Βασικού Τύπου Golang

Ας ξεκινήσουμε με το παράδειγμα της άμεσης και βασικής μετάδοσης στο Go επειδή απαιτούμε τη μετάδοση τύπου για να τροποποιήσουμε τον τύπο της μεταβλητής, οπουδήποτε.

πακέτο κύριος
εισαγωγή (
'fmt'
)
func κύριος () {
ήταν Χ ενθ = 31
και := float64 ( Χ )
fmt . Println ( και )
}

Εδώ, ξεκινάμε με την κύρια συνάρτηση δηλώνοντας μια μεταβλητή με το όνομα 'x' τύπου 'int' και της εκχωρούμε την τιμή 31. Στη συνέχεια, η μεταβλητή 'y' δηλώνεται χρησιμοποιώντας τον τελεστή ανάθεσης συντομογραφίας ':='. Ο τύπος του 'y' καθορίζεται αυτόματα από την έκφραση στη δεξιά πλευρά που είναι το αποτέλεσμα της μετατροπής του 'x' σε 'float64'. Έτσι, σε αυτό το πρόγραμμα, η τιμή του 'x' μετατρέπεται σε 'float64' και εκχωρείται σε 'y'.







Τα αποτελέσματα που ανακτώνται από το βασικό casting στο Go εμφανίζονται ως εξής:





Παράδειγμα 2: Γκολάνγκ Implicit Type Casting

Η χύτευση σιωπηρού τύπου δεν επιτρέπεται μεταξύ διαφορετικών τύπων. Το Go επιβάλλει ισχυρή πληκτρολόγηση που σημαίνει ότι δεν μπορούμε να εκχωρήσουμε ή να χρησιμοποιήσουμε απευθείας μια τιμή ενός τύπου ως άλλου τύπου χωρίς ρητή μετατροπή. Στη συνέχεια, προσπαθούμε να εκτελέσουμε το σιωπηρό casting που δημιουργεί την εξαίρεση από το Go:





πακέτο κύριος
εισαγωγή 'fmt'
func κύριος () {
ήταν ακέραιος αριθμός ενθ = 9 . 08
fmt . Εκτύπωση ( 'Ο ακέραιος είναι %g' , ακέραιος αριθμός )
}

Εδώ είναι ο κώδικας που ξεκινά με τη συνάρτηση main() όπου μια μεταβλητή 'ακέραιος' δηλώνεται με τον τύπο 'int'. Η τιμή που εκχωρείται στη μεταβλητή 'ακέραιος' είναι 9,08 που είναι αριθμός κινητής υποδιαστολής. Εφόσον προσπαθούμε να εκχωρήσουμε μια τιμή κινητής υποδιαστολής απευθείας σε μια ακέραια μεταβλητή, οδηγεί σε σφάλμα αναντιστοιχίας τύπου. Στη συνέχεια, χρησιμοποιούμε τη συνάρτηση «printf» από το πακέτο «fmt» για να εκτυπώσουμε την τιμή της μεταβλητής «ακέραιος» χρησιμοποιώντας τον προσδιοριστή μορφής «%g».

Όπως ήταν αναμενόμενο, η χύτευση σιωπηρού τύπου δεν είναι αποδεκτή στο Golang. Η προηγούμενη χύτευση σιωπηρού τύπου δημιουργεί το ακόλουθο σφάλμα:



Παράδειγμα 3: Χύτευση ρητού τύπου Golang

Η μετατροπή ρητού τύπου μας δίνει τη δυνατότητα να μετατρέψουμε με ασφάλεια τις τιμές μεταξύ συμβατών τύπων ενώ δηλώνουμε ρητά μια πρόθεση. Διασφαλίζει ότι γνωρίζουμε τη μετατροπή τύπου και βοηθά στην αποφυγή τυχαίων σφαλμάτων τύπου. Εξετάστε το ακόλουθο ρητό casting:

πακέτο κύριος
εισαγωγή 'fmt'

func κύριος () {
ήταν floatVal float32 = 6 . 75
ήταν intVal ενθ = ενθ ( floatVal )
fmt . Εκτύπωση ( 'Η κινητή τιμή είναι %g \n ' , floatVal )
fmt . Εκτύπωση ( 'Η ακέραια τιμή είναι %d' , intVal )
}

Εδώ, δημιουργείται μια μεταβλητή 'floatVal' με τον τύπο 'float32' και της εκχωρείται η τιμή '6.75'. Στη συνέχεια, δηλώνεται μια μεταβλητή 'intVal' με τον τύπο 'int'. Για να εκχωρήσετε την τιμή του floatVal στο intVal, χρησιμοποιείται η μετατροπή τύπου. Για να μετατρέψουμε το floatVal σε ακέραια τιμή, η συνάρτηση 'int' χρησιμοποιείται με το floatVal ως είσοδο. Μετά από αυτό, το 'fmt.Printf('Float Value is %g\n', floatVal)' εκτυπώνει την τιμή του floatVal χρησιμοποιώντας τον προσδιοριστή μορφής %g που είναι κατάλληλος για την εκτύπωση των τιμών κινητής υποδιαστολής. Ενώ η γραμμή κώδικα 'fmt.Printf('Integer Value is %d', intVal)' εκτυπώνει την τιμή του intVal χρησιμοποιώντας τον προσδιοριστή μορφής %d που είναι κατάλληλος για την εκτύπωση των ακέραιων τιμών.

Η ακόλουθη έξοδος δημιουργεί τις τιμές τόσο για το floatVal όσο και για το intVal μετά τη μετάδοσή του:

Παράδειγμα 4: Τύπος Golang Casting για να λάβετε τον μέσο όρο

Στη συνέχεια, εκτελούμε τη χύτευση για να πάρουμε τον μέσο αριθμό από τις δεδομένες τιμές. Ας δούμε τον πηγαίο κώδικα που παρέχεται στα παρακάτω:

πακέτο κύριος
εισαγωγή 'fmt'
func κύριος () {
ήταν σύνολο ενθ = 900
ήταν Ο αριθμός μου ενθ = είκοσι
ήταν μέση τιμή float32
μέση τιμή = float32 ( σύνολο ) / float32 ( Ο αριθμός μου )
fmt . Εκτύπωση ( 'Ο μέσος όρος είναι = %f \n ' , μέση τιμή )
}

Εδώ, αρχικά δηλώνουμε τρεις μεταβλητές. Το 'total' είναι μια ακέραια μεταβλητή που αρχικοποιείται με την τιμή 900. Η 'MyNumber' είναι μια ακέραια μεταβλητή που αρχικοποιείται με την τιμή 20. Ο υπολογισμένος μέσος όρος αποθηκεύεται στη συνέχεια στη μεταβλητή 'μέσος όρος' float32. Στη συνέχεια δίνεται ο μέσος τύπος για να πραγματοποιηθεί ο υπολογισμός. Για να διασφαλιστεί ότι η διαίρεση γίνεται ως διαίρεση κινητής υποδιαστολής, οι τιμές 'total' και 'MyNumber' μετατρέπονται σε float32 χρησιμοποιώντας τη μετατροπή τύπου. Ο υπολογισμένος μέσος όρος εκχωρείται στη μεταβλητή 'μέσος όρος'. Τέλος, η συμβολοσειρά μορφής '%f\n' που χρησιμοποιείται στη συνάρτηση 'printf' καθορίζει ότι πρέπει να εκτυπωθεί μια τιμή float, ακολουθούμενη από έναν χαρακτήρα νέας γραμμής.

Η προκύπτουσα τιμή ως μέσος όρος λαμβάνεται αφού υπονοηθεί ο τύπος χύτευσης στον προηγούμενο κώδικα:

Παράδειγμα 5: Golang Int και String Type Casting

Επιπλέον, το Go προσφέρει επίσης casting μεταξύ τύπων Int και String. Μπορούμε να το πετύχουμε αυτό χρησιμοποιώντας τη λειτουργία του πακέτου strconv.

πακέτο κύριος
εισαγωγή (
'fmt'
'strconv'
)
func κύριος () {
ήταν str σειρά = '1999'
σε , _ := strconv . τροχόσπιτο ( μικρό )
fmt . Println ( σε )
ήταν ακέραιος αριθμός ενθ = 1999
toStr := strconv . πνίγηκε ( ακέραιος αριθμός )

fmt . Println ( toStr )
}

Εδώ είναι ο κώδικας που ξεκινά με τη δήλωση δύο μεταβλητών. Η 'str' ​​είναι μια μεταβλητή συμβολοσειράς που αρχικοποιείται με την τιμή '1999' και η 'ακέραιος' είναι μια ακέραια μεταβλητή που αρχικοποιείται με την τιμή '1999'. Μετά από αυτό, η συνάρτηση 'strconv.Atoi()' χρησιμοποιείται για τη μετατροπή της συμβολοσειράς 'str' ​​σε ακέραια τιμή. Η επιστρεφόμενη τιμή του 'v' αντιπροσωπεύει τον ακέραιο αριθμό που έχει μετατραπεί και το κενό αναγνωριστικό '_' χρησιμοποιείται για να αγνοήσει οποιοδήποτε πιθανό σφάλμα που επιστρέφεται από την Atoi().

Στη συνέχεια, η συνάρτηση strconv.Itoa() χρησιμοποιείται για να μετατρέψει τον ακέραιο σε τιμή συμβολοσειράς. Η επιστρεφόμενη τιμή που είναι 'toStr' αντιπροσωπεύει τη συμβολοσειρά που μετατράπηκε.

Η έξοδος εμφανίζει τη μετατροπή από τη συμβολοσειρά '1999' σε έναν ακέραιο και πίσω σε μια συμβολοσειρά που παράγει την αρχική τιμή του '1999':

Παράδειγμα 6: Χύτευση τύπου Golang μεταξύ συμβολοσειράς και byte

Επιπλέον, το casting στο Go μπορεί επίσης να πραγματοποιηθεί σε τύπους συμβολοσειρών και byte. Οι ακόλουθοι κωδικοί δείχνουν τη μετατροπή μεταξύ συμβολοσειρών και τμημάτων byte:

πακέτο κύριος
εισαγωγή (
'fmt'
)
func κύριος () {
ήταν mystr σειρά = 'Γεια σου'
ήταν β1 [] ψηφιόλεξη = [] ψηφιόλεξη ( myStr )
fmt . Println ( β1 )
toString := σειρά ( β1 )
fmt . Println ( toString )
}

Εδώ, οι μεταβλητές δηλώνονται πρώτα ως 'myStr' και 'b1' οι οποίες αρχικοποιούνται με ορισμένες τιμές. Στη συνέχεια, η έκφραση []byte(myStr) μετατρέπει τη συμβολοσειρά 'myStr' σε ένα κομμάτι byte χρησιμοποιώντας τη μετατροπή τύπου. Εκχωρεί το slice byte που προκύπτει στη μεταβλητή 'b1'. Μετά από αυτό, η έκφραση 'string(b1)' μετατρέπει το κομμάτι byte b1 ξανά σε μια συμβολοσειρά χρησιμοποιώντας τη μετατροπή τύπου. Εκχωρεί τη συμβολοσειρά που προκύπτει στη μεταβλητή 'toString'.

Η έξοδος δείχνει τη μετατροπή μεταξύ της συμβολοσειράς 'Hey There' και της αντίστοιχης αναπαράστασης κομματιού byte ως εξής:

Παράδειγμα 7: Τύπος Golang Casting για να αποκτήσετε την τετραγωνική ρίζα

Τώρα, κάνουμε το casting στο Go για να βρούμε τα αποτελέσματα της τετραγωνικής ρίζας. Ο κωδικός τοποθετείται ως εξής:

πακέτο κύριος
εισαγωγή (
'fmt'
'μαθηματικά'
)
func κύριος () {
ήταν n ενθ = 177
ήταν SqrtN float64
SqrtN = μαθηματικά . Sqrt ( float64 ( n ))
fmt . Εκτύπωση ( 'Η τετραγωνική ρίζα του %d είναι %.2f \n ' , n , SqrtN )
}

Εδώ, η μεταβλητή 'n' δηλώνεται ως int και εκχωρεί την τιμή '144'. Η μεταβλητή 'SqrtN' δηλώνεται ως float64 και αποθηκεύει την υπολογισμένη τετραγωνική ρίζα του 'n'. Στη συνέχεια, η συνάρτηση math.Sqrt() αναπτύσσεται για τον υπολογισμό της τετραγωνικής ρίζας του 'n'. Εφόσον η math.Sqrt() αναμένει ένα όρισμα float64 και η τιμή του 'n' μετατρέπεται σε float64 χρησιμοποιώντας το float64(n). Μετά από αυτό, η 'Τετραγωνική ρίζα του %d είναι %.2f\n' καλεί τη μορφή συμβολοσειράς στη συνάρτηση 'printf' η οποία καθορίζει μια ακέραια τιμή (%d) και μια τιμή κινητής υποδιαστολής (%.2f). Ο προσδιοριστής ακριβείας '.2' στο '%.2f' διασφαλίζει ότι η τετραγωνική ρίζα εκτυπώνεται με δύο δεκαδικά ψηφία.

Λαμβάνεται η ακόλουθη έξοδος που υποδεικνύει την τετραγωνική ρίζα της δεδομένης τιμής:

συμπέρασμα

Το casting στο Go συζητείται με ξεχωριστά παραδείγματα που είναι όλα εκτελέσιμα. Λάβετε υπόψη ότι στο Go, το typecasting είναι σαφές, το οποίο επιβάλλει ισχυρή πληκτρολόγηση και προάγει τη σαφήνεια και την αξιοπιστία του κώδικα.