Struktury danych w Go - Dziennik pokładowy #2

Kamil Powroźnik
2019-05-20T21:46+02:00 | 4 min

Życie programisty byłoby strasznie uporczywe, gdyby nie złożone struktury danych takie jak tablice czy obiekty. Dziś porozmawiamy o tym, jak wygląda to w języku go.
Podstawowymi złożonymi typami danych są tablice, struktury oraz mapy. Możemy w nich przechowywać każdy z dostępnych w go typów podstawowych. Przejdźmy zatem do poznania typu tablicy oferowanego przez ten język.
Tablice
Tablica może zostać przypisana do zmiennej za pomocą wyrażenia
var a = [2]string
Co oznacza powyższy literał? Właśnie do zmiennej a przypisaliśmy tablicę o długości dwóch elementów typu string.
Do danych elementów tablicy możemy przypisać wartości za pomocą odwołania się do indexu
a[0] = "John"
a[1] = "Doe"
Kolejnym sposobem tworzenia tablic jest użycie magicznego operatora dostępnego w go
a := [2]string{
"John",
"Doe",
}
Jak widać, zdefiniowałem tutaj tablicę identyczną jak powyżej, a za pomocą nawiasów, uzupełniłem ją o potrzebne wartości.
slice
Dużo częściej używaną odmianą jest typ slice, bazuje on na tablicach, jednak różni się tym, że nie musi mieć ściśle określonej długości.
b := []int{1, 2, 3}
Używając typu slice, możemy również tworzyć wycinki z istniejących tablic
a := [3]string{
"John",
"Henry",
"Doe",
}
var b []string = a[1:2]
wbudowane funkcje
Go oferuje nam dwie wbudowane funkcje, które pozwolą nam dostać się do pewnych właściwości tablicy.
Funkcja len() zwróci długość tablicy, którą podamy jako argument. cap() natomiast, jest funkcją która zwróci nam pojemność tablicy (w przypadku typu slice pojemność będzie równa długości).
Kolekcje
Kolejnym typem danych oferowanym przez go jest struct. Przypomina on obiekty w JavaScript i jest kolekcją pól o określonym typie.
Zobaczmy zatem jak zdefiniować taką kolekcje.
type User struct {
name string
age int
email string
password string
}
func main() {
firstUser := User{
"John", 24, "go@bycfrontendem.blog", "goIsTheBest",
}
fmt.Println(firstUser)
}
Jak widzisz zdefiniowałem tutaj kolekcję o nazwie User, która posiada pola o odpowiednich typach przewidzianych dla naszego użytkownika.
Dostęp do właściwości kolekcji odbywa się tak jak w JavaScript za pomocą kropki. Przykładowo chcąc dostać email użytkownika użyjemy notacji
fmt.Println(firstUser.email)
Map
Ostatnim złożonym typem jest map. Typ ten jest swoistym odpowiednikiem tablicy asocjacyjnej jednak różni się sposobem zapisu i dostępu do wartości. W tym wypadku nie mamy do czynienia z indeksami jak w zwykłej tablicy, a z kluczami.
Przykład:
var a = map[string]int{
"two": 2,
"three": 3,
}
fmt.Println(a["two"]) // 2
fmt.Println(a) // map[three:3 two:2]
Ponadto klucz może być dowolnym typem:
type test struct {
id int
name string
}
func main() {
var a = map[test]int{
test{1, "String1"}: 2,
test{2, "String2"}: 3,
}
fmt.Println(a) // map[{1 String1}:2 {2 String2}:3]
fmt.Println(a[test{1, "String1"}]) // 2
}
Mam nadzieje, że Ci się spodobało, w następnym poście porozmawiamy o funkcjach i interfejsach. Do zobaczenia 😄