Szczegóły ebooka

Język Go. Tworzenie idiomatycznego kodu w praktyce

Język Go. Tworzenie idiomatycznego kodu w praktyce

Jon Bodner

Ebook

Go pojawił się w 2009 roku, służy do tworzenia usług internetowych. Pozwala na łatwe pisanie wydajnych aplikacji. Zdobył popularność, jednak wielu programistów nie wykorzystuje w pełni jego możliwości. Dotyczy to zwłaszcza osób, które przy pisaniu kodu Go korzystają z konstrukcji właściwych dla innych języków. Nie jest to właściwa metoda programowania. Aby tworzyć przejrzysty, prawidłowy kod w Go, należy do niego podejść w sposób idiomatyczny.

Ten praktyczny przewodnik jest przeznaczony dla osób, które chcą się nauczyć myśleć jak rasowi programiści Go. Dzięki niemu zaczniesz pisać idiomatyczny kod w Go, co pozwoli Ci optymalnie wykorzystywać możliwości tego języka. Dowiesz się, jak wygląda środowisko programistyczne Go i w jaki sposób przygotować je do pracy, również zespołowej. Przeanalizujesz kwestie zmiennych, typów, struktur sterujących i funkcji Go i być może odkryjesz subtelne niuanse odróżniające ten język od innych. Zapoznasz się także ze sprawdzonymi wzorcami projektowymi i przekonasz się, że naprawdę warto je stosować we własnym kodzie. Osobny rozdział poświęcono przyszłej implementacji typów sparametryzowanych i jej integracji z istniejącymi mechanizmami języka.

W książce:

  • czym jest idiomatyczny kod w języku Go
  • najlepsze wzorce projektowe w Go
  • przygotowanie i konfiguracja środowiska programistycznego
  • zastosowanie mechanizmu refleksji, a także pakietów unsafe i cgo
  • tworzenie wydajnego kodu w Go
  • możliwe problemy, ich unikanie i rozwiązywanie

Poznaj Go: nudny język do pisania fascynujących programów!

  • Opinie o książce Język Go. Tworzenie idiomatycznego kodu w praktyce
  • Przedmowa
    • Do kogo jest skierowana ta książka
    • Konwencje zastosowane w tej książce
    • Posługiwanie się przykładami
    • Podziękowania
  • Rozdział 1. Konfigurowanie środowiska Go
    • Instalowanie narzędzi Go
    • Środowisko robocze Go
    • Polecenie go
      • Polecenia go run i go build
        • Polecenie go run
        • Polecenie go build
      • Instalowanie pomocniczych narzędzi Go
      • Formatowanie kodu
    • Analiza składniowa i weryfikacja kodu
    • Dobór narzędzi
      • Visual Studio Code
      • GoLand
      • Go Playground
    • Pliki reguł
    • Aktualizacja
    • Podsumowanie
  • Rozdział 2. Typy podstawowe i deklaracje
    • Typy wbudowane
      • Wartość zerowa
      • Literały
      • Zmienne boolowskie
      • Typy numeryczne
        • Typy całkowite
        • Specjalne typy całkowite
        • Wybór typu całkowitego
        • Operatory wartości całkowitych
        • Typy zmiennoprzecinkowe
        • Typy zespolone (zapewne nie będziesz się nimi posługiwać)
      • Przedsmak informacji o łańcuchach i runach
      • Jawna konwersja typów
    • Słowo kluczowe var a operator :=
    • Zastosowanie słowa kluczowego const
    • Stałe typowane i nietypowane
    • Niewykorzystane zmienne
    • Nazywanie zmiennych i stałych
    • Podsumowanie
  • Rozdział 3. Typy złożone
    • Tablice za mało elastyczne, by używać ich bezpośrednio
    • Wycinki
      • Funkcja len
      • Funkcja append
      • Pojemność
      • Funkcja make
      • Deklarowanie wycinka
      • Wycinki wycinków
        • Wycinki czasami współdzielą pamięć
      • Przekształcanie tablic w wycinki
      • Funkcja copy
    • Łańcuchy, runy i bajty
    • Mapy
      • Mapy czytanie i zapisywanie danych
      • Idiom comma ok
      • Usuwanie elementów z map
      • Używanie map jako zbiorów
    • Struktury
      • Struktury anonimowe
      • Porównywanie i konwertowanie struktur
    • Podsumowanie
  • Rozdział 4. Bloki, przesłanianie oraz struktury sterujące
    • Bloki
      • Przesłanianie zmiennych
      • Wykrywanie przesłoniętych zmiennych
    • Instrukcja if
    • Cztery wersje pętli for
      • Pełna pętla for
      • Warunkowa pętla for
      • Nieskończona pętla for
      • Instrukcje break i continue
      • Instrukcja for-range
        • Iterowanie map
        • Iterowanie łańcuchów
        • Wartość zwracana przez pętlę for-range jest kopią
      • Oznaczanie instrukcji etykietami
      • Wybór właściwej wersji pętli for
    • Instrukcja switch
    • Puste instrukcje switch
    • Wybór pomiędzy instrukcjami if a switch
    • Instrukcja goto tak, goto!
    • Podsumowanie
  • Rozdział 5. Funkcje
    • Deklarowanie i wywoływanie funkcji
      • Symulowanie parametrów nazwanych i opcjonalnych
      • Wycinki a zmienna liczba parametrów wejściowych
      • Zwracanie wielu wartości
      • Jeśli funkcja zwraca wiele wartości, należy je traktować osobno
      • Ignorowanie zwróconych wartości
      • Nazywanie zwracanych wartości
      • Pusta instrukcja return stosowanie surowo wzbronione!
    • Funkcje to wartości
      • Deklaracja typu funkcyjnego
      • Funkcje anonimowe
    • Domknięcia
      • Przekazywanie funkcji jako argumentów
      • Zwracanie funkcji przez inne funkcje
    • Instrukcja defer
    • W Go obowiązuje wywołanie przez wartość
    • Podsumowanie
  • Rozdział 6. Wskaźniki
    • Krótkie wprowadzenie do wskaźników
    • Nie bój się wskaźników
    • Wskaźniki oznaczają argumenty modyfikowalne
    • Wskaźniki są ostatnią deską ratunku
    • Wydajność przekazywania wskaźników
    • Wartość zerowa a brak wartości
    • Różnica między mapami a wycinkami
    • Wycinki w charakterze buforów
    • Jak ułatwić pracę mechanizmowi garbage collector
    • Podsumowanie
  • Rozdział 7. Typy, metody i interfejsy
    • Typy w języku Go
    • Metody
      • Odbiorcy wskaźników i odbiorcy wartości
      • Programowanie metod pod kątem instancji nil
      • Metody także są funkcjami
      • Funkcje kontra metody
      • Deklaracje typów nie oznaczają dziedziczenia
      • Typy są elementem dokumentacji programu
      • Iota służy do tworzenia typów wyliczeniowych czasami
    • Używaj osadzania w przypadku kompozycji
    • Osadzanie nie jest dziedziczeniem
    • Krótki przewodnik po interfejsach
    • Interfejsy są bezpieczne pod względem typów (duck typing)
    • Osadzanie a interfejsy
    • Przyjmuj interfejsy, zwracaj struktury
    • Interfejsy a nil
    • Pusty interfejs nie informuje o niczym
    • Asercja i przełączniki typów
    • Asercje i przełączniki typów warto stosować oszczędnie
    • Typy funkcyjne są pomostem dla interfejsów
    • Niejawna implementacja interfejsu ułatwia wstrzykiwanie zależności
    • Wire
    • Go nie jest typowym językiem zorientowanym obiektowo (i bardzo dobrze)
    • Podsumowanie
  • Rozdział 8. Błędy
    • Obsługa błędów podstawy
    • W przypadku prostych błędów używaj łańcuchów znaków
    • Błędy typu sentinel
    • Błędy to wartości
    • Opakowywanie błędów
    • Funkcje Is i As
    • Opakowywanie błędów przy użyciu instrukcji defer
    • Funkcje panic i recover
    • Tworzenie zrzutu stosu w przypadku błędu
    • Podsumowanie
  • Rozdział 9. Moduły, pakiety i importowanie
    • Repozytoria, moduły i pakiety
    • Plik go.mod
    • Tworzenie pakietów
      • Importowanie i eksportowanie
      • Tworzenie pakietu i uzyskiwanie dostępu do niego
      • Nazewnictwo pakietów
      • Struktura modułu
      • Zastępowanie nazwy pakietu
      • Komentarze dotyczące pakietów i format godoc
      • Pakiet internal
      • Funkcja init unikaj jej, jeśli to możliwe
      • Zależności cykliczne
      • Eleganckie podejście do zmiany nazw i porządkowania API
    • Obsługa modułów
      • Importowanie kodu
      • Obsługa wersji
      • Wybór wersji minimalnej
      • Aktualizowanie zgodnych wersji
      • Aktualizowanie niezgodnych wersji
      • Vendoring
      • Serwis pkg.go.dev
      • Dodatkowe informacje
    • Publikowanie modułu
    • Wersjonowanie modułu
    • Serwery proxy modułów
      • Wybór serwera proxy
      • Repozytoria prywatne
    • Podsumowanie
  • Rozdział 10. Przetwarzanie współbieżne w Go
    • Kiedy warto używać przetwarzania współbieżnego
    • Goprocedury
    • Kanały
      • Czytanie, zapisywanie i buforowanie
      • Pętla for-range i kanały
      • Zamykanie kanału
      • Zachowania kanałów
    • Instrukcja select
    • Zalecane rozwiązania i wzorce dotyczące współbieżności
      • API powinno być pozbawione współbieżności
      • Goprocedury, pętle for i zmieniające się zmienne
      • Pamiętaj o sprzątaniu po goprocedurach
      • Wzorzec z kanałem done
      • Zastosowanie funkcji anulującej do wstrzymania goprocedury
      • Kiedy używać kanałów buforowanych, a kiedy niebuforowanych
      • Mechanizm backpressure
      • Wyłączanie klauzuli case w instrukcji select
      • Określanie limitu czasu
      • Zastosowanie struktury WaitGroup
      • Uruchamianie kodu dokładnie raz
      • Łączenie różnych aspektów przetwarzania współbieżnego
    • Kiedy używać muteksów zamiast kanałów
    • Operacje atomowe raczej Ci się nie przydadzą
    • Gdzie szukać dodatkowych informacji o współbieżności?
    • Podsumowanie
  • Rozdział 11. Biblioteka standardowa
    • Pakiet io i przyjaciele
    • Pakiet time
      • Czas od uruchomienia systemu
      • Liczniki czasu i limit czasu
    • Pakiet encoding/json
      • Zastosowanie znaczników struktur w celu dodania metadanych
      • Unmarshaling i marshaling
      • JSON i operacje odczytywania i zapisywania
      • Kodowanie i dekodowanie strumieni JSON
      • Niestandardowe przetwarzanie obiektów JSON
    • Pakiet net/http
      • Klient
      • Serwer
        • Oprogramowanie pośredniczące
        • Rozszerzanie możliwości serwera przy użyciu idiomatycznych modułów zewnętrznych
    • Podsumowanie
  • Rozdział 12. Kontekst
    • Czym jest kontekst?
    • Anulowanie
    • Liczniki czasu
    • Anulowanie kontekstu we własnym kodzie
    • Wartości
    • Podsumowanie
  • Rozdział 13. Pisanie testów
    • Podstawy testowania
      • Zgłaszanie błędów w testach
      • Konfigurowanie i demontowanie
      • Przechowywanie prostych danych testowych
      • Przechowywanie wyników testowania w pamięci podręcznej
      • Testowanie publicznego API
      • Porównywanie wyników testów przy użyciu modułu go-cmp
    • Testy tablicowe
    • Sprawdzanie pokrycia kodu
    • Testowanie wydajności
    • Zalążki w języku Go
    • Pakiet httptest
    • Testy integracyjne i znaczniki kompilacji
    • Wyszukiwanie problemów ze współbieżnością przy użyciu narzędzia race checker
    • Podsumowanie
  • Rozdział 14. W krainie smoków: mechanizm refleksji oraz pakiety unsafe i cgo
    • Mechanizm refleksji umożliwia manipulowanie typami podczas działania programu
      • Typy, rodzaje i wartości
        • Typy i rodzaje
        • Wartości
      • Tworzenie nowych wartości
      • Zastosowanie refleksji do sprawdzenia, czy wartość interfejsu wynosi nil
      • Tworzenie marshalera danych przy użyciu mechanizmu refleksji
      • Zastosowanie refleksji do tworzenia funkcji automatyzujących powtarzalne zadania
      • Przy użyciu refleksji da się tworzyć struktury, ale nie rób tego
      • Przy użyciu refleksji nie da się tworzyć metod
      • Używaj refleksji tylko wtedy, gdy to się opłaca
    • Pakiet unsafe rzeczywiście jest niebezpieczny
      • Zastosowanie pakietu unsafe do konwersji zewnętrznych danych binarnych
      • Pakiet unsafe a łańcuchy i wycinki
      • Narzędzia związane z pakietem unsafe
    • W pakiecie cgo chodzi o integrację, nie o wydajność
    • Podsumowanie
  • Rozdział 15. Spojrzenie w przyszłość typy sparametryzowane w Go
    • Typy sparametryzowane ograniczają redundantność kodu i zwiększają bezpieczeństwo typowania
    • Wstęp do typów sparametryzowanych w Go
    • Zastosowanie list typów do określania operatorów
    • Funkcje sparametryzowane i algorytmy abstrakcyjne
    • Listy typów ograniczają możliwość przypisywania stałych oraz implementacji
    • Pominięte kwestie
    • Typy sparametryzowane a idiomatyczny kod w Go
    • Co niesie przyszłość?
    • Podsumowanie
    • O autorze
    • Kolofon
  • Tytuł: Język Go. Tworzenie idiomatycznego kodu w praktyce
  • Autor: Jon Bodner
  • Tytuł oryginału: Learning Go: An Idiomatic Approach to Real-World Go Programming
  • Tłumaczenie: Piotr Cieślak
  • ISBN: 978-83-283-8395-1, 9788328383951
  • Data wydania: 2022-04-19
  • Format: Ebook
  • Identyfikator pozycji: jegotw
  • Wydawca: Helion