You’re going to get a lot of useful responses to this Q, but in addition to everything else people say, I’d suggest a little meditation on the following questions:
(1) Why - exactly and concretely - do you say "I would like to use Go"? (You answered this at least partially in your post. Is there anything else, perhaps including non-technical factors?)
(2) Why - exactly and concretely - do you suspect these reasons would not persuade your boss?
(3) From the point of view of your organization’s goals, are the reasons in (2) legitimate, or ill-considered/short-sighted?
(a) Legitimate could be eg technical virtues of Go don’t outweigh other business-centered factors.
(b) Ill-considered could be eg boss has her/his own favorite language.
(c) Short-sighted could be eg giving transition costs too much weight compared to long-term benefits.
(4) If, on objective reflection, the answer to (3) is "largely legitimate", then this is an opportunity for your own self-mentoring and personal growth.
(5) If the answer to (3) is "largely ill-considered/short-sighted", then how - exactly and concretely - did your self-reflection convince you of this? You’ll find in there some of the arguments you’re looking for.
Lather-rinse-repeat after each time you talk to your boss about this, in light of what she/he (and you) actually had to say.
Please understand that I'm not out to slant you one way or the other re the answer to (3). Both happen every day, and getting good at distinguishing one from the other is a great skill to develop.
Good luck,
Mike
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
golang-nuts...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
I'm a big fan of Go and i have used it for some side projects. I like its performance, built-in concurrency, easy cross platform builds and the concept of being practical and productive.My company it's currently .net based, we develop all backends (scrapers, rest api, web sites etc) in vb.net and c#.We want to switch to something crossplatform and stick with it for all new projects.
My boss discovered Go and he likes it too but i know for certain that .NET core (currently in RC) it's an obvious choice because we don't need to learn a completely different language and development environment.I would like to use Go but i don't know which arguments can i use to persuade by boss, any hint?
He mentions that they have a bunch of Web scrappers, this kind of task is heavily concurrent, something that .net is not know for, but golang is. We are a php house, but we are switching to go for this one reason, our new internal stack wil be based on php frontend, golang based microservices layers, and mysql, elasticsearch and mongo based data stores.
We also run Windows and Linux servers, we are continually having problems with our windows systems stalling becuase the predominate pattern for services there is to build a "windows service", which suffers from issues with leakage of resources, deadlocks etc.
The predominate pattern on linux for services that don't have a listener, is to use cron driven tasks that execute a fixed amount of work and then die, freeing up all resources except persistent ones like disk space. This makes them very much more reliable. Golang has good support for building listeners too.
--
-j
This is actually my go setup along with delve for debugging.
Doubdtfully Go will optimize out fmt.Sprintf.
Anyway, I think .Net core garbage collector just more efficient for extremely short living objects. Does it has as short GC pause as Go for huge heaps?
-j
-j
I am waiting for the final implementation to check them out. Looks promising.
headon/parallelism/dotnet$ /usr/bin/time dotnet run -c Release 10000
Project dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Task to execute: 10000
10000 in 00:00:00.0110531, hash = 0xb64c05b40.62user 0.07system 0:00.58elapsed 119%CPU (0avgtext+0avgdata 66744maxresident)k0inputs+48outputs (0major+17542minor)pagefaults 0swapsheadon/parallelism/dotnet$ /usr/bin/time dotnet run -c Release 100000
Project dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Task to execute: 100000
100000 in 00:00:00.0846664, hash = 0x829de33c0.70user 0.06system 0:00.67elapsed 113%CPU (0avgtext+0avgdata 66776maxresident)k0inputs+48outputs (0major+20086minor)pagefaults 0swapsheadon/parallelism/dotnet$ /usr/bin/time dotnet run -c Release 1000000
Project dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Task to execute: 1000000
1000000 in 00:00:00.9544900, hash = 0xde68528c1.57user 0.12system 0:01.57elapsed 107%CPU (0avgtext+0avgdata 124912maxresident)k
headon/parallelism/go$ /usr/bin/time go run main.go -tasks 10000Task to execute: 1000010000 in 54.893915ms, hash = 0xb64c05b40.34user 0.03system 0:00.21elapsed 177%CPU (0avgtext+0avgdata 30120maxresident)k0inputs+2464outputs (0major+17786minor)pagefaults 0swapsheadon/parallelism/go$ /usr/bin/time go run main.go -tasks 100000Task to execute: 100000100000 in 568.61465ms, hash = 0x829de33c1.85user 0.12system 0:00.76elapsed 260%CPU (0avgtext+0avgdata 268676maxresident)k0inputs+2464outputs (0major+77815minor)pagefaults 0swapsProject/headon/parallelism/go$ /usr/bin/time go run main.go -tasks 1000000Task to execute: 10000001000000 in 6.251455405s, hash = 0xde68528c18.74user 1.17system 0:06.52elapsed 305%CPU (0avgtext+0avgdata 2708028maxresident)k0inputs+2464outputs (0major+668978minor)pagefaults 0swaps
headon/parallelism/go$ /usr/bin/time go run mainwait.go -tasks 10000Task to execute: 1000010000 in 9.313603ms, hash = 0xb64c05b40.19user 0.02system 0:00.17elapsed 127%CPU (0avgtext+0avgdata 30356maxresident)k0inputs+2472outputs (0major+14299minor)pagefaults 0swapsheadon/parallelism/go$ /usr/bin/time go run mainwait.go -tasks 100000Task to execute: 100000100000 in 581.959038ms, hash = 0x829de33c1.96user 0.12system 0:00.75elapsed 277%CPU (0avgtext+0avgdata 230132maxresident)k0inputs+2472outputs (0major+69227minor)pagefaults 0swapsheadon/parallelism/go$ /usr/bin/time go run mainwait.go -tasks 1000000Task to execute: 10000001000000 in 6.258064822s, hash = 0xde68528c18.75user 1.26system 0:06.54elapsed 306%CPU (0avgtext+0avgdata 2784356maxresident)k0inputs+2472outputs (0major+686800minor)pagefaults 0swaps
headon/parallelism/go$ /usr/bin/time go run mainmulti.go -tasks 10000Task to execute: 1000010000 in 9.948716ms, hash = 0xb64c05b40.20user 0.02system 0:00.18elapsed 130%CPU (0avgtext+0avgdata 30748maxresident)k0inputs+2464outputs (0major+13034minor)pagefaults 0swapsheadon/parallelism/go$ /usr/bin/time go run mainmulti.go -tasks 100000Task to execute: 100000100000 in 149.616735ms, hash = 0x829de33c0.67user 0.06system 0:00.32elapsed 227%CPU (0avgtext+0avgdata 60592maxresident)k0inputs+2464outputs (0major+28922minor)pagefaults 0swapsheadon/parallelism/go$ /usr/bin/time go run mainmulti.go -tasks 1000000Task to execute: 10000001000000 in 1.537953634s, hash = 0xde68528c5.31user 0.46system 0:01.72elapsed 334%CPU (0avgtext+0avgdata 384608maxresident)k256inputs+2464outputs (1major+125570minor)pagefaults 0swaps
-j
You are adding the hash calculation to the mix which skew the results, but the end result is the same.
--
You received this message because you are subscribed to a topic in the Google Groups "golang-nuts" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/golang-nuts/_6K8SpMFsTM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to golang-nuts...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
headon/parallelism/dotnet$ /usr/bin/time dotnet run -c Release 10000Project dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Task to execute: 10000
10000 in 00:00:00.0216859, hash = 0xb64c05b40.67user 0.05system 0:00.58elapsed 124%CPU (0avgtext+0avgdata 65364maxresident)k0inputs+48outputs (0major+18283minor)pagefaults 0swaps
headon/parallelism/dotnet$ /usr/bin/time dotnet run -c Release 100000Project dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Task to execute: 100000
100000 in 00:00:00.1708238, hash = 0x829de33c1.01user 0.09system 0:00.78elapsed 140%CPU (0avgtext+0avgdata 66756maxresident)k0inputs+48outputs (0major+26606minor)pagefaults 0swaps
parallelism/dotnet$ /usr/bin/time dotnet run -c Release 1000000Project dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Task to execute: 1000000
1000000 in 00:00:01.6099377, hash = 0xde68528c4.46user 0.19system 0:02.17elapsed 214%CPU (0avgtext+0avgdata 128232maxresident)k0inputs+48outputs (0major+61664minor)pagefaults 0swaps
The major hurdle of a .net shop switching to other platform/language is usually the non-technical ones. A typical .net shop usually have a significant investment in .net and the tools around it. Moving to another language (eg. Go) often means throwing away those existing investment.
Thanks
Dave
I think you are being naive. You don't pay in terms of running the code per-se, but to get other parts of their toolchain that generally go together with the whole baggage, e.g. MSSQL, OS, support, updates, etc. That's the whole point.This would take the conversation in another direction and then you'll complain again. The point here is that the .Net stack is still very slow, whether you admit or not because I have seen it a million times ;)