16 ms·
The State of Go – Where we are in May 2017
- jayd16 9y agoStrange that Go and Dart are completely missing from I/O this year.
- sethammons 9y agoGo has its own conference: https://www.gophercon.com/ https://www.gophercon.com/
- rasjani 9y agoBut they announced Android GO! /joke
- geodel 9y agoNo. At Least Go is not there on Google I/O for last few years. To me it is encouraging that Go has its own conference Gophercon and not riding on Google I/O. I believe Go at Google does not have same relationship as Java at Oracle or Swift at Apple.
- pjmlp 9y agoSpecially when we see which languages get the preview SDKs for all Google platforms and services.
- akerro 9y ago>I believe Go at Google does not have same relationship as Java at Oracle or Swift at Apple. Could you tell me more about it, please?
- geodel 9y agoSimply it is not a part of corporate strategy. Larry/Sundar or any SVP do not introduce new version on stage or gush over its market reach or new Http2 API. See the website of Swift/OpenJDK/Go and you will notice there is no mention of corporate ownership for Go. Swift: "Swift and the Swift logo are trademarks of Apple Inc." OpenJDK: "© 2017 Oracle Corporation and/or its affiliates " Go: "Except as noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License, and code is licensed under a BSD license."
- coldtea 9y ago>Could you tell me more about it, please? Google never cared for Go. It wasn't created as a strategic project or investment. It's a language created by a small team on Google doing their thing. It does keep paying them to work on Go though (and probably devoted some more people to it), so there's that, but Google neither hired them specifically for Go, nor requested that they work on such a project from the onset. It was also never made THE official language for Google development by some decree, nor was getting it to Android any priority (they favored Kotlin for that in the end). Neither was it ever strongly marketed by Google to outside developers. Dart/Angular got more of an official "sponsoring" from Google (including devoting a top notch compiler guy like Lars Bak to work for the former) than Golang. From what I've heard, it has seen adoption inside Google, but nothing game changing.
- danellis 9y agoI thought Go was created to be the primary language for new Googlers. Did that never turn out to be the case? Are there many Google projects written in Go? Kubernetes is the only one that immediately springs to mind.
- anonfunction 9y agoDownloads are powered by Go, which was a huge port from C++. https://talks.golang.org/2013/oscon-dl.slide https://talks.golang.org/2013/oscon-dl.slide
- coldtea 9y agoThat's a single project, and one of the 2 adoption stories circulating in 2012/3, 4+ years ago (the other was a MySQL load balancer for YouTube or such). I'm pretty sure there is quite more stuff now, but those known are not much to write home about. Even downloads is not some "huge port" -- the presentation mentions "14,032" lines.
- vram22 9y ago>the other was a MySQL load balancer for YouTube or such It was Vitesse: http://vitess.io/overview/ http://vitess.io/overview/ https://github.com/youtube/vitess https://github.com/youtube/vitess
- deleted 9y ago[deleted]
- chimeracoder 9y ago> To me it is encouraging that Go has its own conference Gophercon and not riding on Google I/O That's correct - GopherCon is a community effort. It originated when a community member expressed surprised that there wasn't already a Go conference, and then, upon encouragement from others, decided to organize one themselves. They remain the organizers of the event, and they do not work for Google. Google has been a diamond-level sponsor for the last three "main" GopherCon conferences[0], but no different from any other sponsor of the conference in that regard. And that's by design - the Go project aims to be a community effort, not solely the work of Google employees, although Google does hire a small number of people who work on it full-time. This isn't inherently better or worse than the model that (for example) Oracle uses with Java. It's just a different philosophy - and in the case of Go specifically, one that everyone involved seems to be happy with. The Go project contributors (including those employed by Google) want it to be a community-driven project, and the Go community members are by and large happy carrying the mantle themselves as well. [0] GopherCon happens every year in Denver, but there are tons of other conferences around the world that carry the GopherCon name - for example, GopherCon Singapore is happening a week from today[1] [1] And, similarly, traces its origins to a single tweet from a community member expressing interest in a conference.
- geodel 9y agoAgree with everything you said. Go is very active community driven project without mile long community laws/bylaws like Apache/OpenJDK stuff.
- barrongineer 9y agoI'd imagine Dart will make an appearance at the talk 'Single Codebase, Two Apps with Flutter and Firebase'.
- sjustinas 9y agoGo has always felt more like "a language created by Google engineers" rather than "Google's language" which Dart seems to be. Compare golang.org with dartlang.org: the former does not mention Google in the front page at all, where the latter does.
- mirekrusin 9y agoIsn't kotlin the new dart now? Genuine question as they have more in common than just curly braces it seems. I know they are _different_ but the question is: is it possible (not completely stupid...) that the future of those languages is going to be a merge (kord, darlin? ;)
- scriptproof 9y agoKotlin is the new Groovy. Runs on the JVM, uses Java classes. Dart may replace the JVM.
- mirekrusin 9y agoThey have kotlin-native so they can do something a'la... crystal? It's an early stage, yes, but kotlin goes beyond jvm.
- vorg 9y agoKotlin is the new Scala, in that it's competing for mindshare in the statically-typed JVM language space. Apache Groovy is a dynamic language, originally intended to complement Java. (Although there's been a static mode since Groovy 2.0, virtually noone uses it.)
- int_19h 9y agoI don't think Kotlin is quite a new Scala. It doesn't try to fit the same niche. Scala is the bleeding edge kitchen sink, that happens to also be on JVM because, hey, existing libraries! But it doesn't try to be a better Java as a language. Whereas for Kotlin, it's the whole deal. I would say that Kotlin is filling the heretofore unfilled niche in the Java ecosystem, that was in the gap between Java and Scala.
- dgregd 9y agoDart is losing with TypeScript. It seems that outside of Google almost nobody uses Dart. It'll be interesting to see how Go will cope with Kotlin/Native (in technology preview stage right now) Kotlin has no unsigned types (JVM language). In embedded / IoT applications that's a downside. It seems that unsigned types are the only major advantage Go has over Kotlin/Native.
- pjmlp 9y agoJava 8 got unsigned arithmetic via helper classes. https://blogs.oracle.com/darcy/unsigned-integer-arithmetic-api-now-in-jdk-8 https://blogs.oracle.com/darcy/unsigned-integer-arithmetic-a... The reason why Java didn't got unsigned types was because Gosling went around Sun R&D offices asking about unsigned arithmetic and almost everyone got it wrong. I miss them when in Java though.
- geodel 9y ago> Gosling went around Sun R&D offices asking about unsigned arithmetic and almost everyone got it wrong. Maybe R&D would be busy making cool demos of futuristic technology which could beat Microsoft's cool demos.
- pjmlp 9y agoI know you are trolling, but although Sun was good at engineering in general, desktop programming and language design weren't certainly their stronger skills. They killed the only innovative desktop they had, NeWS. And although Swing is quite powerful, the default configuration certainly isn't. They also removed resources from JOGL, Java3D and JDI. Also given the existance of so many Wirth influenced languages with AOT compilation to native code, at the time Java was released, I never understood why they were so religiously against AOT toolchains. There is even a paper from Sun Research about writing Solaris drivers in Java, but instead of compiling AOT to native code, they ported the JVM into kernel space. I wonder what would have they done if the partnership with NeXT regarding OpenSTEP had actually gone forward, instead of being the inspiration to Java.
- hota_mazi 9y agoEven stranger is that it's a non Google language (Kotlin) that's receiving all the exposure at Google I/O.
- agumonkey 9y agoA bit strange, completely understandable. I've seen people mention kotlin everytime I read something about Java and/or Android. It's also a good swift alter ego at least on surface level.
- deleted 9y ago[deleted]
- skybrian 9y agoThere are two sessions indirectly about Dart (because they are about Flutter, which uses Dart). "Prototyping to Production: Bridging the Gap with a Common Tool" "Single Codebase, Two Apps with Flutter and Firebase" There are also codelabs for Flutter.
- frik 9y agoWhy was Kotlin mentioned at Google IO? But not Go nor Dart? I mean Kotlin is the baby of JetBrains, the creator of the IDEA IDE that is used for Android Studio.
- LanceH 9y agoquaternions?! This is exactly something I need but never would have expected in the base language.
- pjmlp 9y agoUsually with languages that are feature rich they can be plain library types. With Go, they will keep adding special case after special case.
- geodel 9y agoYou may have point. Though in this case it was 1st april joke.
- pjmlp 9y agoAh I see.
- masklinn 9y ago> Usually with languages that are feature rich they can be plain library types. Eh, in most languages you'd still need language support if you want quaternion literals.
- int_19h 9y agoLiterals are usually not a big issue. You don't get that much in going from "1 + 2i" to "complex(1, 2)" or something like that. It's value type semantics, operator overloading, and implicit conversions that are usually challenging. Go doesn't have any form of customized operator overloading. If something needs to look like a number, it has to be in the base language. Stuff that isn't, is second-class even if it's in the standard library. Ironically, this is the case for big integer / floating-point numbers - you have to write things like x.Add(y, z): https://golang.org/pkg/math/big/ https://golang.org/pkg/math/big/
- vanderZwan 9y agoLook at the date the issue was opened and closed...
- winteriscoming 9y agoA bit OT - does anyone know what tool was used to create those slides? They look very light and clean and something I might experiment with for technical presentations.
- fgrimes 9y agohttps://godoc.org/golang.org/x/tools/present https://godoc.org/golang.org/x/tools/present http://halyph.com/blog/2015/05/18/golang-presentation-tool.html http://halyph.com/blog/2015/05/18/golang-presentation-tool.h...
- krobertson 9y agoThe Go Present tool: https://godoc.org/golang.org/x/tools/present https://godoc.org/golang.org/x/tools/present
- sliken 9y agoAs mentioned it's the go present tool. It's ok, but kind of annoying. It runs it's own webserver (very easy in go), then does a decent job of slides. But it's kind of annoying to run, you can't run it as a user since it wants to bind to :80. You can't shared slides with people easily, nor host it statically by easily copying files. Pandoc is pretty similar, just as powerful, and supports multiple output formats. That way you can statically host random files without depending on a go binary running 24/7. Also be careful with present, it by default runs a sandbox to allow execution of code/examples that I wouldn't trust open to the internet... at least without good justification.
- jayflux 9y agoThe slides don't work very well on an iPad mini :( Going to the next slide skips 2 at a time
- spyspy 9y ago> http.DoGetPleaseAndThanks I genuinely can't tell if they're joking or not.
- tptacek 9y agosync.Map is kind of a big deal.
- saintfiends 9y agoAlso a shining example of their poor type system.
- exacube 9y agohow so? how would a type system have helped here
- tptacek 9y agoSince everything in sync.Map appears to be laundered through interface{}, you lose compile-time type safety where you use it.
- masklinn 9y agoThe type system issues can also be seen in: * you get a note that a map must not be copied, but you won't actually be prevented from doing so? * iteration can't use the native construct (no generic interface -> no generic iteration)
- fmstephe 9y agoAnother concern (big or little depending on your circumstances) many common things stored in maps, strings, primitives, incur an allocation on conversion to interface{}. Coupled with a fairly inefficient GC it means I would need to think twice before using this.
- gtirloni 9y agoWhat's inefficient about Go's GC ?
- 9y ago
- nickcw 9y ago> vendor directories are ignored by the go tool #19090: Hooray! No more Makefile spaghetti like this (well a bit less anyway!) GO_FILES := $(shell go list ./... | grep -v /vendor/ ) go test $(GO_FILES) go tool vet . 2>&1 | grep -E -v vendor/ ; test $$? -eq 1 errcheck $(GO_FILES) find . -name \*.go | grep -v /vendor/ | xargs goimports -d | grep . ; test $$? -eq 1 go list ./... | grep -v /vendor/ | xargs -i golint {} | grep . ; test $$? -eq 1 should become go test ./... go tool vet ./... errcheck ./... goimports -d . golint ./... I assume the `./...` changes will just work in `errcheck` and `golint` but I suspect `goimports` might need a bit of work.
- Kubuxu 9y agoOnly if `go test -cover ./...` would work. Currently in needs a lot of magic [1] (ignore sharness test coverage magic, it uses even more magic [2]). [1]: https://github.com/ipfs/go-ipfs/blob/master/coverage/Rules.mk#L12-L27 https://github.com/ipfs/go-ipfs/blob/master/coverage/Rules.m... [2]: same file as [1], we compile unit test using `go test -c -cover` that runs our main function and saves the return value to file ([3] and [4]), but it works. If someone considers doing that, run everything in ramfs (tmpfs). [3]: https://github.com/ipfs/go-ipfs/blob/master/coverage/main/main.go https://github.com/ipfs/go-ipfs/blob/master/coverage/main/ma... [4]: https://github.com/ipfs/go-ipfs/blob/master/cmd/ipfs/runmain_test.go https://github.com/ipfs/go-ipfs/blob/master/cmd/ipfs/runmain...
- perseusprime11 9y agoKotlin is becoming more and more popular. Are we better off learning Kotlin instead of Go?
- vanderZwan 9y agoThat's an impossible to answer question because we don't know your situation or use-case.
- perseusprime11 9y agoI want to learn the most efficient language for creating high-performance APIs ( Micro-services).
- bsaul 9y agoof course it depends on your case , but my guess is that if you ask the question then you should probably invest time on kotlin ( because it aims for a larger scope of use cases) People coding in go for real world projects usualy know that go fits the tradeoffs they're looking for.
- wayn3 9y agoeither that or they started a company when the hypetrain was around
- msluyter 9y agoLike someone mentioned, it's hard to answer this in the general case. Factors to consider would be: a) are you dependent on the JVM and Java ecosystem? b) Are you already familiar/comfortable with Java/Scala? "Yes" answers to both of these might lean you towards Kotlin. c) is speed essential? d) are you doing systems programming as opposed to CRUD webapps?[1] These might lead you to Go. [1] I know you can do the latter in Go, but it's unclear that it's as easy/productive as in other langs currently (nor have I directly compared, say, Revel to other frameworks, so someone else is probably better qualified to answer this question.)
- heyts 9y agoVideo of the presentation on youtube https://www.youtube.com/watch?v=giUatBmmb_Y https://www.youtube.com/watch?v=giUatBmmb_Y
- camus2 9y ago> how so? how would a type system have helped here Do you understand the implications of basing your container on interface {} signature ? if yes, then how can you ask such question? Obviously they can't do it any other way since Go has no support for user defined generic containers. To a point that the go team itself can't even add new container types to their own language. They'd have to rewrite the compiler everytime they do it. Questions such as yours makes me realize that a lot of go developers don't even understand what is the purpose of generic programming.
- tazjin 9y ago> Questions such as yours makes me realize that a lot of go developers don't even understand what is the purpose of generic programming. While this sounds a bit condescending I know exactly what you mean. There seems to be some sort of "language barrier" (where the language is programming language concepts) between developers from different backgrounds. Go is currently used in a lot of successful projects, so it gets new developers from lots of places and they are failing to communicate adequately about the language itself. I see three main groups (there may be more!): a) People who come from C and other lower-level languages: They are introduced to memory-safety, keep a type system that they already know and are comfortable with and in addition get a polished, well-integrated toolchain. b) People who come from Python, Ruby and other "untyped" scripting languages. These are introduced to native code (wow! fast!), a type system that isn't expressive - but sufficient (and more than they had before), and the same toolchain experience. c) People who come from higher-level, safer languages including (but not limited to) Java, Haskell, C# and so on. These developers for the most part already had well-functioning toolchains, but they are "stepping down" to a language that is less expressive (okay, for Java-people YMMV greatly) and often end up frustrated. Now you get conflicts when the c-people have discussions like this with the a/b-people and nobody is happy. There's an old joke about this in the Haskell community: http://www.lispcast.com/img/typing.png http://www.lispcast.com/img/typing.png
- int_19h 9y agoI'm not really convinced that all (or even most) people from the b) category can be lumped together with a). I like both statically and dynamically typed languages, and it's precisely because I like the latter is why I demand the former to have sufficiently advanced type systems to let me avoid most of the verbosity normally associated with static typing. When I'm writing in C#, for example, if I'm working with a collection type - and it doesn't matter if it's from the standard library or a third-party package - the only place where I need to mention the type of elements is when I instantiate it. Then I can add and elements to it, and access them later, and it's a lot like Python - I don't have to worry about the type, it's just magically there, thanks to generics (and "var"). But get rid of generics, and now suddenly explicit types are all over the place.
- trueSlav 9y ago> Minorities from all over the world. Translation for people without the leftie virus: brown/trans/female.
- ruleabidinguser 9y agoquaternions? seems a little silly
- JW_00000 9y agoIt was an April Fools' joke.
- dejawu 9y agoThe bit about better "errors" for Allman style braces really drives home to me just how proudly opinionated Go is. "We know about this other indent style and acknowledge it, but it's WRONG." I really gave Go a good shot, built a project of decent size with it and used it as my go-to first choice for a few others, but every time these little nitpicks come back and make it feel like Go is smacking my hands away from the keyboard. "Bad programmer! You didn't do it the way I wanted you to!" I would love to use a hypothetical "Go++" that's built from the same roots of Go but forgoes its opinionated nature, even if it's at the cost of messier code. Someone somewhere has to be working on that... maybe I should give it a try.
- dilap 9y agoman for me that's such an advantage of Go. i dont think brace style & other style quirks matter that much, but having them be consistent really helps a lot. so just pick one style and be done with it. also, having all code use the same style means you can safely search for semantics just using a syntactic pattern.
- laumars 9y agoI completely agree. The dogmatic opinionated approach Go takes grated with me initially but with gofmt automatically "fixing faux pas" and the ease at which I've found reading back old code or other people projects, I've come to realise I've saved more time in the long run due to their opinionated approach. And frankly, there are more important issues with writing code than which line an opening brace should land on.
- __david__ 9y agoI think consistency is very overrated by the go community. I read and work on a lot of C code, and styles vary considerably. It's just not hard to read code in different styles. And my main problem is not that `go fmt` enforces a specific style, but that it enforces a specific style that actively harms readability. Defaults are good as long as they are sane, but `go fmt` made some really stupid decisions.
- kmicklas 9y agoQ: Where is Go in May 2017? A: 1970
- t3h2mas 9y agoBut where does one find the slides though?
- kureikain 9y agoI use Go and love it. That's the only thing in my app achive sub ms latency. That is being sad, Go is still not as mature as other language such as Ruby, Java, Python,...etc in term of eco system around web application. Take database for example. Any web app needs to interact with MySQL, MongoDB etc. But the performance of those drivers are somehow lack behind when I compare them with other driver. MongoDB/MySQL drivers are both seems come from individual works of excellent/talented developer than official support from those database. Go shines in system/devops stuff though.
- zacmps 9y agoThat surprises me, go does use prepared statements by default. Could that be it?
- yandrypozo 9y agowondering why you say that drivers don't work well, most of them are on top of "database/sql" pkg
- alanbernstein 9y agoWhy can't these talks have scroll bars, or some other indicator of where you are in the document?
- pekim 9y agoI agree, I want to know how far through I am, and how much further I have to go. I would be happy with a simple 'n of m' or 'n/m' indication.
- deepsun 9y agoHmm, still no generics...
- galfarragem 9y agoAccording Stackoverflow Typescript is winning: https://insights.stackoverflow.com/trends?tags=go%2Ctypescript%2Cscala%2Ckotlin%2Cdart https://insights.stackoverflow.com/trends?tags=go%2Ctypescri...
- appleflaxen 9y agowow! that graph is not what I would have expected (not sure what I would have expected, but... typescript and scala are dwarfing other languages... wow) But it's dwarfed by c, c++, and javascript. Graph when you add a bunch of other languages: https://insights.stackoverflow.com/trends?tags=go%2Ctypescript%2Cscala%2Ckotlin%2Cdart%2Cclojure%2Celixir%2Clisp%2Chaskell%2Crust%2Cc%2Cc%2B%2B%2Cjavascript https://insights.stackoverflow.com/trends?tags=go%2Ctypescri...
- galfarragem 9y agoIMO the most interesting from all these popularity trends is the rise of Python: https://insights.stackoverflow.com/trends?tags=python%2Cjavascript https://insights.stackoverflow.com/trends?tags=python%2Cjava...
- appleflaxen 9y agothe very first slides talk about the deprecation and removal of old APIs. if there are any HN readers who influence go, consider Rich Hickey's argument [1] regarding deprecation and code removal. Bottom line: he proposes that one should never take away a function/API (particularly when you are a library or programming language). https://www.youtube.com/watch?v=oyLBGkS5ICk https://www.youtube.com/watch?v=oyLBGkS5ICk edit: superficial word choice