A conversation with the Go team 6 Jun 2013 * Introduction At Google I/O 2013, several members of the Go team hosted a "Fireside chat." Robert Griesemer, Rob Pike, David Symonds, Andrew Gerrand, Ian Lance Taylor, Sameer Ajmani, Brad Fitzpatrick, and Nigel Tao took questions from the audience and people around the world about various aspects of the Go project. .iframe http://www.youtube.com/embed/p9VUCp98ay4 309 549 We also hosted a similar session at I/O last year: [[http://www.youtube.com/watch?v=sln-gJaURzk][_Meet_the_Go_team_]]. There were many more questions from Google Moderator than we were able to answer in the short 40 minute session. Here we answer some of those we missed in the live session. _Linking_speed_(and_memory_usage)_for_the_gc_toolchain_are_a_known_problem._ _Are_there_any_plans_to_address_this_during_the_1.2_cycle?_ *Rob:* Yes. We are always thinking about ways to improve performance of the tools as well as the language and libraries. _I_have_been_very_pleased_to_see_how_quickly_Go_appears_to_be_gaining_traction._ _Can_you_talk_about_the_reactions_you_have_experienced_working_with_other_ _developers_inside_and_outside_Google?_Are_there_any_major_sticking_points_remaining?_ *Robert:* A lot of developers that seriously tried Go are very happy with it. Many of them report a much smaller, more readable and thus maintainable code base: A 50% code size reduction or more when coming from C++ seems common. Developers that switched to Go from Python are invariably pleased with the performance gain. The typical complaints are about small inconsistencies in the language (some of which we might iron out at some point). What surprises me is that almost nobody complains about the lack of generics. _When_will_Go_be_a_first-class_language_for_Android_development?_ *Andrew:* This would be great, but we don't have anything to announce. _Is_there_a_roadmap_for_the_next_version_of_Go?_ *Andrew:* We have no feature roadmap as such. The contributors tend to work on what interests them. Active areas of development include the gc and gccgo compilers, the garbage collector and runtime, and many others. We expect the majority of exciting new additions will be in the form of improvements to our tools. You can find design discussions and code reviews on the [[http://groups.google.com/group/golang-dev][golang-dev mailing list]]. As for the timeline, we do have [[https://docs.google.com/document/d/106hMEZj58L9nq9N9p7Zll_WKfo-oyZHFyI6MttuZmBU/edit?usp=sharing][concrete plans]]: we expect to release Go 1.2 on December 1, 2013. _Where_do_you_guys_want_to_see_Go_used_externally?_ _What_would_you_consider_a_big_win_for_Go_adoption_outside_Google?_ _Where_do_you_think_Go_has_the_potential_to_make_a_significant_impact?_ *Rob:* Where Go is deployed is up to its users, not to us. We're happy to see it gain traction anywhere it helps. It was designed with server-side software in mind, and is showing promise there, but has also shown strengths in many other areas and the story is really just beginning. There are many surprises to come. *Ian:* It’s easier for startups to use Go, because they don’t have an entrenched code base that they need to work with. So I see two future big wins for Go. One would be a significant use of Go by an existing large software company other than Google. Another would be a significant IPO or acquisition of a startup that primarily uses Go. These are both indirect: clearly choice of programming language is a very small factor in the success of a company. But it would be another way to show that Go can be part of a successful software system. _Have_you_thought_any_(more)_about_the_potential_of_dynamically_loading_ _Go_packages_or_objects_and_how_it_could_work_in_Go?_ _I_think_this_could_enable_some_really_interesting_and_expressive_constructs,_ _especially_coupled_with_interfaces._ *Rob:* This is an active topic of discussion. We appreciate how powerful the concept can be and hope we can find a way to implement it before too long. There are serious challenges in the design approach to take and the need to make it work portably. _There_was_a_discussion_a_while_ago_about_collecting_some_best-of-breed_ `database/sql` _drivers_in_a_more_central_place._ _Some_people_had_strong_opinions_to_the_contrary_though._ _Where_is_ `database/sql` _and_its_drivers_going_in_the_next_year?_ *Brad:* While we could create an official subrepo (“go.db”) for database drivers, we fear that would unduly bless certain drivers. At this point we’d still rather see healthy competition between different drivers. The [[https://code.google.com/p/go-wiki/wiki/SQLDrivers][SQLDrivers wiki page]] lists some good ones. The `database/sql` package didn’t get much attention for a while, due to lack of drivers. Now that drivers exist, usage of the package is increasing and correctness and performance bugs are now being reported (and fixed). Fixes will continue, but no major changes to the interface of `database/sql` are planned.  There might be small extensions here and there as needed for performance or to assist some drivers. _What_is_the_status_of_versioning?_ _Is_importing_some_code_from_github_a_best_practice_recommended_by_the_Go_team?_ _What_happens_when_we_publish_our_code_that_is_dependent_on_a_github_repo_and_ _the_API_of_the_dependee_changes?_ *Ian:* This is frequently discussed on the mailing list. What we do internally is take a snapshot of the imported code, and update that snapshot from time to time. That way, our code base won't break unexpectedly if the API changes. But we understand that that approach doesn’t work very well for people who are themselves providing a library. We’re open to good suggestions in this area. Remember that this is an aspect of the tools that surround the language rather than the language itself; the place to fix this is in the tools, not the language. _What_about_Go_and_Graphical_User_Interfaces?_ *Rob:* This is a subject close to my heart. Newsqueak, a very early precursor language, was designed specifically for writing graphics programs (that's what we used to call apps). The landscape has changed a lot but I think Go's concurrency model has much to offer in the field of interactive graphics. *Andrew:* There are many [[https://code.google.com/p/go-wiki/wiki/Projects#Graphics_and_Audio][bindings for existing graphics libraries]] out there, and a few Go-specific projects. One of the more promising ones is [[https://github.com/skelterjohn/go.uik][go.uik]], but it's still in its early days. I think there's a lot of potential for a great Go-specific UI toolkit for writing native applications (consider handling user events by receiving from a channel), but developing a production-quality package is a significant undertaking. I have no doubt one will come in time. In the meantime, the web is the most broadly available platform for user interfaces. Go provides great support for building web apps, albeit only on the back end. _In_the_mailing_lists_Adam_Langley_has_stated_that_the_TLS_code_has_not_been_ _reviewed_by_outside_groups,_and_thus_should_not_be_used_in_production._ _Are_there_plans_to_have_the_code_reviewed?_ _A_good_secure_implementation_of_concurrent_TLS_would_be_very_nice._ *Adam*: Cryptography is notoriously easy to botch in subtle and surprising ways and I’m only human. I don’t feel that I can warrant that Go’s TLS code is flawless and I wouldn’t want to misrepresent it. There are a couple of places where the code is known to have side-channel issues: the RSA code is blinded but not constant time, elliptic curves other than P-224 are not constant time and the Lucky13 attack might work. I hope to address the latter two in the Go 1.2 timeframe with a constant-time P-256 implementation and AES-GCM. Nobody has stepped forward to do a review of the TLS stack however and I’ve not investigated whether we could get Matasano or the like to do it. That depends on whether Google wishes to fund it. _What_do_you_think_about_ [[http://www.gophercon.com/][_GopherCon_2014_]]_?_ _Does_anyone_from_the_team_plan_to_attend?_ *Andrew:* It's very exciting. I'm sure some of us will be there.