Need advice about which tool to choose?Ask the StackShare community!
.NET vs Go: What are the differences?
.NET is a versatile framework supporting multiple languages for cross-platform development, while Go is a modern language known for its simplicity, efficiency, and concurrency support. Here are the key differences between .NET and Go:
Language Design and Syntax: .NET is a framework developed by Microsoft that supports multiple programming languages such as C#, F#, and Visual Basic. It follows a static typing approach and provides extensive libraries and tools for application development. Go, on the other hand, is a statically typed language developed by Google. It has a simpler syntax and focuses on readability and simplicity, making it easier for developers to write and understand code.
Performance and Efficiency: .NET is known for its performance and efficiency, especially when running on the Microsoft ecosystem. It offers just-in-time (JIT) compilation, which can optimize the execution speed of applications. Go, on the other hand, is designed for high performance and efficiency. It has a lightweight runtime, garbage collector, and built-in concurrency features, allowing for efficient execution and scalability.
Concurrency and Parallelism: Go has native support for concurrent programming through goroutines and channels. Goroutines are lightweight threads that allow for the concurrent execution of functions, and channels facilitate communication and synchronization between goroutines. This makes it easier to write concurrent and parallel programs in Go. In contrast, .NET provides concurrency support through the Task Parallel Library (TPL) and async/await keywords, which allow for asynchronous programming and parallel execution.
Ecosystem and Libraries: .NET has a mature and extensive ecosystem with a wide range of libraries, frameworks, and tools available. It provides support for various application domains, including web development, desktop applications, mobile apps, and machine learning. The ecosystem includes frameworks like ASP.NET for web development and Xamarin for cross-platform mobile app development. Go has a growing ecosystem and a standard library that provides many useful features out of the box. It is particularly well-suited for building networking applications, concurrent systems, and command-line tools.
Community and Adoption: .NET has a large and established community with a strong presence in enterprise and Windows-based development. It is widely adopted by organizations for building robust and scalable applications. Go, on the other hand, has gained popularity for its simplicity, performance, and concurrency features. It has a vibrant and active community, and it is often favored for building cloud-native and microservices-based applications.
In summary, .NET offers a powerful and feature-rich framework with a wide range of language options and a mature ecosystem, making it suitable for diverse application development. Go, on the other hand, focuses on simplicity, performance, and concurrency, making it well-suited for building efficient and scalable systems.
I've been juggling with an app idea and am clueless about how to build it.
A little about the app:
- Social network type app ,
- Users can create different directories, in those directories post images and/or text that'll be shared on a public dashboard .
Directory creation is the main point of this app. Besides there'll be rooms(groups),chatting system, search operations similar to instagram,push notifications
I have two options:
- React Native, Python, AWS stack or
- Flutter, Go ( I don't know what stack or tools to use)
Currently, I have decided to use Python and JavaScript (especially React and Node.js) for any of my projects. Well, I have used Python with Django for a lot of things, and I would certainly recommend Django to anyone, due to its high secure authentication and authorization inbuilt system, a ready to use admin platform, template tags, and many more. Well, I guess that you would like to use Python to create the backend of your application, an API, and React Native for the frontend. Python and JavaScript (React) are on the trend these days and have a huge community, so there are many resources, tutorials, great documentation. I have not really heard anyone using Flutter and Go for applications these days, so I would not recommend it to you, it would make your life much more difficult.
Hope that helps, and good luck with your project!
I'm typically agnostic when it comes to picking languages. Whatever gets the job done, but, in this case, to figure out what's involved with what you want to do, it's going to be much more than just picking programming languages for your client and backend interfaces.
So, I'm recommending you use Flutter+Firebase as a way to figure out what you need to get done. It supports both iOS and Android out of the box, introduces you to a bunch of components you will need to think about in the future (whether you stick with Firebase or not), and the key here, is that there are tons of articles, youtube videos, and other courses you can take to pick it up pretty quickly. You could even clone an Instagram knockoff from github. Guess what else, it's all free. You might not need to worry as much about the backend since there are client libraries for Flutter/Dart for Firebase.
Some might have different opinions, and like I said, I'm usually agnostic, but in this case, you have a lot to consider. Where are you going to store the data? Are people going to need to login? Will there but customized settings the will save even if I close the app? Yeah, that's just a few questions.
Those are just a few. Lots to consider, so if you want to get something in your hand as soon as possible, try a search for flutter + firebase + chat + Instagram or something like that and have a look.
If this is for learning about how to design the system, then pick the tools are you are confortable with.
Often times, I get stuck picking the tools (and trying to learn about them) vs actually trying to design the system itself.
If you are familiar with React (check out Expo) and Django then I would recommend going with that.
For deploying your backend, I would go with a provider like https://zeit.co/ that automates a whole bunch of deployment steps with their cli tools that you might have to do with AWS.
The above listed tools will do the job, you just need to figure out your architecture(e.g models). How they will all connect. Then you can use a tool you are comfortable with to implement them.
What you need to take a look at is Apache OpenMeetings. It already does what you want, it is open source and well documented and only requires that you design the UI and plumbing required to serve you application.
Let's select right tool you feel you are good at. And selecting tools are used by large community to solve your stuck if encounter
We are converting AWS Lambdas from Java due to excessive cold start times. Usage: These lambdas handle XML and JSON payloads, they use s3, API Gateway, RDS, DynamoDB, and external API's. Most of our developers are only experienced in java. These three languages (Go, Node.js, and Python) were discussed, but no consensus has been reached yet.
I've worked with all three of these languages and also with Java developers converting to these languages and far and away Go is the easier one to convert to. With the improved cold-start times and the ease of conversion for a Java developer, it is a no-brainer for me.
The hardest part of the conversion though is going to be the lack of traditional Classes so you have to be mindful of that, but Go Structs and interfaces tend to make up for what is lost there.
Full Disclosure: I'm a 95% Go convert (from Python) at this point in time.
Although I am primarily a Javascript developer myself, I used Go to build AWS lambda in a similar scenario to yours. AWS libraries felt better integrated on the Go side, I believe due to the language itself (e.g. how JSON objects are handled in go). Besides that performance of Go is much superior. But on the cons side; community is far smaller around Go, compared to Javascript. That is easy notice if you look at repos of community-maintained libraries for Go. That can feel a bit unreliable.
Go would provide the easiest transition for Java programmers -- its IDE/tooling is second to none (just install Goland) and the deploy/distribution story is extremely clean and lends itself to work well in lambda: single, static binaries with quick startup. No need to set up a full environment or package dependencies on your lambda AMIs, just copy a file.
If you want to prioritise language familiarity, JavaScript is more like Java than the other choices; and it can be optimised to run very fast. However if you need really fast cold-start times, you can't beat Go since it's compiled. There are other things to consider, such as the massive amount of community packages and help/documentation in the JavaScript ecosystem. Go is newer but seems to be quite popular if you need something that runs fast in a single binary.
I was initially going to suggest JavaScript due to the smaller size needs of AWS Lambdas code and the larger range of libraries and community available (and to avoid Python for this). But I have to agree with the recommendations and rationale of @ayildirim above and I think you should choose any reasonable language that is low-overhead, fast startup, and best supported by AWS Lambda, and that is probably Go. I don't think you are likely to go wrong with that, while you can potentially with the others.
So I'd agree, on the strength of AWS Lambda support and the solid performance of Go, it seems like your best choice here for Lambdas (and I'm going to need to consider that myself going forward... pardon the pun).
Finding the best server-side tool for building a personal information organizer that focuses on performance, simplicity, and scalability.
performance and scalability get a prototype going fast by keeping codebase simple find hosting that is affordable and scales well (Java/Scala-based ones might not be affordable)
I've picked Node.js here but honestly it's a toss up between that and Go around this. It really depends on your background and skillset around "get something going fast" for one of these languages. Based on not knowing that I've suggested Node because it can be easier to prototype quickly and built right is performant enough. The scaffolding provided around Node.js services (Koa, Restify, NestJS) means you can get up and running pretty easily. It's important to note that the tooling surrounding this is good also, such as tracing, metrics et al (important when you're building production ready services).
You'll get more scalability and perf from go, but balancing them out I would say that you'll get pretty far with a well built Node.JS service (our entire site with over 1.5k requests/m scales easily and holds it's own with 4 pods in production.
Without knowing the scale you are building for and the systems you are using around it it's hard to say for certain this is the right route.
Telegram Messenger has frameworks for most known languages, which makes easier for anyone to integrate with them. I started with Golang and soon found that those frameworks are not up to date, not to mention my experience testing on Golang is also mixed due to how their testing tool works. The natural runner-up was JS, which I'm ditching in favor of TS to make a strongly typed code, proper tests and documentation for broader usage. TypeScript allows fast prototyping and can prevent problems during code phase, given that your IDE of choice has support for a language server, and build phase. Pairing it with lint tools also allows honing code before it even hits the repositories.
1. Type safety and inferred types
Go is type safe by default, which allows you to right more reliable code and have better developer tooling, plus with the :=
operator, you can initialize a variable without having to define its type because it automatically gets its type from the initial value.
2. Performance
There isn't much to be said here, but on most counts go beats both Python and Node.js on performance.
3. Documentation
I'm not talking about the Go language itself, although it does have good docs. I'm talking about Go's auto generated documentation tool, which allows people to document their packages easily and works amazingly with Go's type system.
4. Compiles to binary
If you are making a local program for somebody and they don't want to download the Go compiler, you can make Go into a native binary.
5. Built for the web
Go has built in Http libraries to rival Express.js and has a HTML/Text templating system.
6. Great Concurrency
Go utilizes Goroutines to help developers utilize multiple threads easily.
Conclusion
Go is an excellent choice for any system code, especially http networking and web backends.
Decided to change all my stack to microsoft technologies for they behave just great together. It is very easy to set up and deploy projects using visual studio and azure. Visual studio is also an amazing IDE, if not the best, when used for C#, it allows you to work in every aspect of your software.
Visual studio templates for ASP.NET MVC are the best I've found compared to django, rails, laravel, and others.
C# and .Net were obvious choices for us at LiveTiles given our investment in the Microsoft ecosystem. It enabled us to harness of the .Net framework to build ASP.Net MVC, WebAPI, and Serverless applications very easily. Coupled with the high productivity of Visual Studio, it's the native tongue of Microsoft technology.
Node.js has been growing in popularity, and the ability to access the global pool of Javascript developers is great. There is a decreased amount of effort for people to work across the frontend and backend, and the language itself is easy and works well for many common use cases.
Go was the other serious candidate, but it just hasn't been implemented in as many Production systems yet, and the best Go engineers I've known have been hackers, whereas we're building a robust analytics platform that requires more caution. Type safety is easily added with TypeScript, and NPM is awesomely handy.
When developing a new blockchain, we as a team chose Go lang over Java and other candidates, due to Go being (a) natively suited to concurrency - there are primitives in the language itself (goroutines, channels) that really help with reasoning about concurrency (b) super fast - build time, running, testing are all much faster that Java, this gives a far superior developer experience (c) shorter and stricter than Java - code is much shorter (less verbose), and there is usually one good way to do things, and even the code formatter that is bundled with Go is very opinionated - over a short time this makes reading other people's code far smoother than having to deal with different styles.
You should be aware that Go presently (v1.13) lacks Generics.
I chose Golang as a language to write Tango because it's super easy to get started with. I also considered Rust, but learning curve of it is much higher than in Golang. I felt like I would need to spend an endless amount of time to even get the hello world app working in Rust. While easy to learn, Golang still shows good performance, multithreading out of the box and fun to implement.
I also could choose PHP and create a phar-based tool, but I was not sure that it would be a good choice as I want to scale to be able to process Gbs of access log data
We decided to use python to write our ETLs and import them into metabase via a lambda. Before python we tried using Go, but overall go was way more verbose than Python when writing the ETLs. Go also had some issues managing memory when using the S3 upload manager library. This was a deal breaker for us that made us switch to Python.
In the end the solution was much cleaner and maintainable.
This language, even in early dev stages is to put it simply, fantastic! It is small, fast, and types a lot like go. It feels complete even though coming out less than a year ago in first early stages. I love it, it works anywhere and everywhere plus making binaries and GUI applications is just super easy!
A number of years ago; I had done python for a long time prior to learning about Go. Most of what I wrote was system-like things and web-things in python, and I got tired of running into the lack-of-a-type-system problems that python gave me. I wanted to switch to a compiled, strongly-typed system that wasn't C/C++ (been there, done that, got the "shoot yourself in the foot" t-shirt). I looked into both Rust/Go, and for what I wanted to do (system/web) stuff ... at the time, Go was the strongest candidate, so I switched and never went back. Recently I started to re-look at Rust for system things, but for anything I do that I have to touch the web with, it will be Go from now on.
Pros of .NET
- Tight integration with visual studio271
- Stable code261
- Great community189
- Reliable and strongly typed server side language.182
- Microsoft140
- Fantastic documentation119
- Great 3rd party libraries89
- Speedy80
- Great azure integration71
- Great support63
- Highly productive34
- C#34
- Linq34
- High Performance31
- Great programming languages (C#, VB)28
- Open source25
- Powerful Web application framework (ASP.NET MVC)19
- Clean markup with razor16
- Fast16
- Powerful ORM (EntityFramework)15
- Dependency injection13
- Constantly improving to keep up with new trends10
- Visual studio + Resharper = <310
- High-Performance9
- Security8
- TFS8
- Huge ecosystem and communities7
- Integrated and Reliable7
- Job opportunities7
- Light-weight6
- Lovely6
- Asynchrony5
- Variations5
- {get; set;}5
- Concurrent4
- Support and SImplicity4
- Default Debuging tools4
- Useful IoC4
- Scaffolding4
- Entity framework4
- Blazor3
- F♯2
- Nuget package manager2
Pros of Golang
- High-performance547
- Simple, minimal syntax395
- Fun to write363
- Easy concurrency support via goroutines301
- Fast compilation times273
- Goroutines193
- Statically linked binaries that are simple to deploy180
- Simple compile build/run procedures150
- Backed by google136
- Great community136
- Garbage collection built-in53
- Built-in Testing45
- Excellent tools - gofmt, godoc etc44
- Elegant and concise like Python, fast like C39
- Awesome to Develop37
- Used for Docker26
- Flexible interface system25
- Deploy as executable24
- Great concurrency pattern24
- Open-source Integration20
- Easy to read18
- Fun to write and so many feature out of the box17
- Go is God16
- Easy to deploy14
- Powerful and simple14
- Its Simple and Heavy duty14
- Best language for concurrency13
- Concurrency13
- Rich standard library11
- Safe GOTOs11
- Clean code, high performance10
- Easy setup10
- High performance9
- Simplicity, Concurrency, Performance9
- Hassle free deployment8
- Single binary avoids library dependency issues8
- Gofmt7
- Cross compiling7
- Simple, powerful, and great performance7
- Used by Giants of the industry7
- Garbage Collection6
- Very sophisticated syntax5
- Excellent tooling5
- WYSIWYG5
- Keep it simple and stupid4
- Widely used4
- Kubernetes written on Go4
- No generics2
- Operator goto1
- Looks not fancy, but promoting pragmatic idioms1
Sign up to add or upvote prosMake informed product decisions
Cons of .NET
- C#13
- Too expensive to deploy and maintain12
- Microsoft dependable systems8
- Microsoft itself8
- Hard learning curve5
- Tight integration with visual studio3
- Not have a full fledged visual studio for linux3
- Microsoft itself 🤡🥲1
Cons of Golang
- You waste time in plumbing code catching errors42
- Verbose25
- Packages and their path dependencies are braindead23
- Google's documentations aren't beginer friendly16
- Dependency management when working on multiple projects15
- Automatic garbage collection overheads10
- Uncommon syntax8
- Type system is lacking (no generics, etc)7
- Collection framework is lacking (list, set, map)5
- Best programming language3
- A failed experiment to combine c and python1