wtorek, maja 10, 2011

Zmienne Go ;-)

Wczoraj napisałem, że chciałbym by na Google I/O ogłoszono w końcu "zamrożenie" Go.
I mam to życzenie dziś jeszcze bardziej ;-)

W ramach testowania czy można już uploadować dowolne pliki do Google Docs bez konwersji przy użyciu API (nie można, choć dla wielu kont Google Docs API mówi, że można, ale każda próba kończy się błędem ;-)) postanowiłem sprawdzić czy działa uploadowanie z mojego programu w Go.
Z konwersją działało.
To wszedłem na stronę z portem Go dla Windows, i pobrałem najnowszą wersję r57.1.
Spróbowałem skompilować mój programik i już się nie da ;-)

Zmieniła się definicja typu dla http.Header, stąd przypisanie i zajęcie pamięci robiło się tak:
 req.Header = make(map[string]string)
a teraz tak:
 req.Header = make(map[string][]string)
By wam nie umknęła ta subtelna różnica to pogrubiłem [], które doszły do definicji typu (chyba).

Ta zmiana spowodowała, że nagłówków nie ustawia się już tak:
  req.Header["Slug"]="toster.txt"
teraz dla odmiany robi się to tak:
  req.Header.Set("Slug","toster.txt")
Co akurat nie jest zmianą na gorsze.

Zmieniła się też ilość parametrów w metodzie net.Dial, kiedyś były 3, teraz są 2 ;-)

Zmiany naniosłem, skompilowałem drania i znów nic. Leci mi błąd:
panic: runtime error: makeslice: len out of range

W linii, która wygląda tak:
  var buf []byte = make([]byte,r.ContentLength)
i wiele mi to nie mówi ;-)

OK, zorientowałem się po przyjrzeniu się kodowi i temu co tam wpada, że r.ContentLength ma wartość -1, co jest dziwne bo to powinna być długość odpowiedzi od serwera.... oczywiście jeżeli metoda http.Post działa teraz tak jak działała jeszcze w październiku 2010 roku ;-)

Zaprawdę powiadam wam, iż podziwiam ludzi którzy już teraz używają Go do produkcyjnych projektów ;-)
Ja rozumiem, że między Pythonami występują różnice, które powodują, że kod z niższej wersji Pythona może nie pracować w wyższej, ale nowe wersje Pythona nie wychodzą tak często ;-)


Podobne postybeta
Wysyłamy pliki do Google Docs przy pomocy Go :-)
Wrrr.... złe API ;-)
Ha! Ochidna Echidna potrafi updatować pliki :-)
Jak walczyć z gigantycznym kodem w Java'ie, część 1 ;-)
Chrome OS, Chrome2Chrome i w ogóle Chrome ;-)