Hmm, budou datové typy 3. část? Je třeba interface také typ? Tj. je možné mít pole (fat?) ukazatelů na "něco, co implementuje daný interface", a poté třeba pole procházet a volat na tom "něco" polymorfní metody?
Pak ještě jedna otázka spíš k předchozímu dílu. Je tam odstavec věnování kopírování polí. Jak kopírování probíhá, je to prostě memcpy, nebo v go existují nějaké copy constructory? Je možné kopírovat úplně všechno? Co když mám pole handle k souboru nebo socketů?
jj chapu, ale ten koncept je porad stejny - "primitivni hodnoty" se kopiruji, struktury a pole se rekurzivne resi jako primitivni hodnoty, pointery se kopiruji (ale ukazuji na stejnou pamet, pochopitelne). Pokud potrebujes vlastni implementaci, je nutne si to napsat a explicitne uvest.
Omlouvám se, že pedanticky opravuji nepřesnosti :), ale drobná připomínka. V kapitole 6, ukázka deklarace a inicializace pole současně je v druhém případě inicializován řez (slice) a ne pole. V daném příkladě v tom není rozdíl, ale v realitě se rozdíly mohou projevit a je potřeba s tím počítat. Správný zápis druhé části příkladu měl být:
var users2 = [...]User{
User{
id: 1,
name: "Pepek",
surname: "Vyskoč"},
User{
id: 2,
name: "Pepek",
surname: "Vyskoč"},
User{
id: 3,
name: "Josef",
surname: "Vyskočil"},
}
fmt.Println(users2)
to znamená [...]Users místo []Users. Místo tří teček kompilátor dosadí počet prvků pole.
K pointrům bych jen dodal, že existuje možnost pracovat s nimi stejně, jako v jazyce C přes balík unsafe. Díky němu lze obejít typovou kontrolu, což může být, jak už z názvu vyplývá, nebzezpečné.