Sobes.tech
Junior

Ποιοι τύποι δεδομένων υπάρχουν στο Go;

sobes.tech AI

Απάντηση από AI

Στη Go υπάρχουν τέσσερις κατηγορίες τύπων δεδομένων:

  1. Βασικοί τύποι (Basic types) - προεπιλεγμένοι από τον μεταγλωττιστή.

    • Λογικοί: bool
    • Αριθμητικοί:
      • Ακέραιοι: int, int8, int16, int32, int64, uint, uint8 (byte), uint16, uint32, uint64, uintptr
      • Πλωτοί: float32, float64
      • Συγκροτήματα: complex64, complex128
    • Συμβολοσειρές: string
  2. Συσσωρευμένοι τύποι (Aggregate types) - συλλογές σταθερού μεγέθους.

    • Πίνακες: [n]T (όπου n το μέγεθος, T ο τύπος των στοιχείων)
    • Δομές: struct {} (συλλογή ονομασμένων πεδίων διαφορετικών τύπων)
  3. Τύποι αναφοράς (Reference types) - τύποι αναφοράς, περνούν με αναφορά, αποθηκεύουν δείκτη στα βασικά δεδομένα.

    • Λωρίδες: []T (δυναμικός πίνακας, βασίζεται σε πίνακα)
    • Χάρτες: map[K]V (συλλογή ζευγών κλειδιού-τιμής)
    • Δείκτες: *T (αποθηκεύουν τη διεύθυνση μιας μεταβλητής)
    • Κανάλια: chan T, chan<- T, <-chan T (για συγχρονισμό και επικοινωνία μεταξύ goroutines)
    • Συναρτήσεις: func(...) (...) (ο τύπος είναι η υπογραφή της συνάρτησης)
  4. Τύποι διεπαφής (Interface types) - ορίζουν ένα σύνολο υπογραφών μεθόδων που υλοποιούνται από τύπους δεδομένων.

    • Διεπαφές: interface{} (κενή διεπαφή), interface{ methodName(...) ... }

Παραδείγματα:

// Βασικοί τύποι
var isTrue bool = true
var age int = 30
var price float64 = 19.99
var name string = "Go Gopher"

// Συσσωρευμένοι τύποι
var numbers [5]int = [5]int{1, 2, 3, 4, 5} // Πίνακας
type Person struct { // Δομή
    Name string
    Age  int
}
var p Person = Person{Name: "Alice", Age: 25}

// Τύποι αναφοράς
var slice []int = []int{1, 2, 3}           // Λωρίδα
var grades map[string]int = map[string]int{"Alice": 90, "Bob": 85} // Χάρτης
var ptr *int = &age                     // Δείκτης
var dataChan chan int = make(chan int)  // Κανάλι
var myFunc func(int) int = func(x int) int { return x * 2 } // Συνάρτηση

// Τύποι διεπαφής
var i interface{} = "anything" // Κενή διεπαφή
type Shape interface { // Διεπαφή
    Area() float64
}