Golang is a trend now but there is a lot of projects where you have to avoid of using it.
Let’s start from what kind of benefits brings Golang for your team/project:
– Easy to learn and get started with. This helps to grow your team quickly and involve new people even without any experience with Golang.
– Built-in concurrency and a robust standard library. Which allows to utilise your CPU in the most effective way and easily create multithreading applications (channels, mutex, atomic etc.).
– Strict types helps to avoid some basic coding issues. So these options shows us that Golang is a good tool for high performance projects and big growing teams.
But otherwise when your team is small and you don’t need to solve high performance tasks. That means that you will have some troubles like a very big codebase.
– Lack of generics in Golang will make you to write / support more code.
– Writing of multithreading programms even in Golang requires to have senior engineers. So that means you will have to spend more money on your team without any incomes from using Golang.
– It will take more time to release because you will need to write/support a bigger codebase.
When you don’t need to use Golang in your team/project?
– Your project is not simple (it is not quite small like some CLI utilities or small service) and it should be build as a monolithic application with a small team
– Your budget is not big and you don’t have too much time for release
– Your project is new and you have to release it ASAP to make money
– You don’t have any high performance problems which can not be solved on your current technical stack
../../../../firstname.lastname@example.org/session_srtp.go:144:9: assignment mismatch: 1 variable but h.Unmarshal returns 2 values
../../../../email@example.com/srtp.go:37:9: assignment mismatch: 1 variable but header.Unmarshal returns 2 values
../../../../firstname.lastname@example.org/srtp.go:52:9: assignment mismatch: 1 variable but header.Unmarshal returns 2 values
../../../../email@example.com/srtp.go:56:51: header.PayloadOffset undefined (type *rtp.Header has no field or method PayloadOffset)
../../../../firstname.lastname@example.org/srtp_cipher_aead_aes_gcm.go:99:13: header.PayloadOffset undefined (type *rtp.Header has no field or method PayloadOffset)
../../../../email@example.com/srtp_cipher_aead_aes_gcm.go:104:18: header.PayloadOffset undefined (type *rtp.Header has no field or method PayloadOffset)
../../../../firstname.lastname@example.org/srtp_cipher_aes_cm_hmac_sha1.go:121:30: header.PayloadOffset undefined (type *rtp.Header has no field or method PayloadOffset)
../../../../email@example.com/srtp_cipher_aes_cm_hmac_sha1.go:126:32: header.PayloadOffset undefined (type *rtp.Header has no field or method PayloadOffset)
../../../../firstname.lastname@example.org/stream_srtp.go:88:6: assignment mismatch: 1 variable but header.Unmarshal returns 2 values
While working on the one of my pet projects I caught the issue with building of my app. The fix is very easy but I spent some time to find out the issue and how to solve it.
So if you have the same issue you have to add to your go.mod file such line:
github.com/pion/srtp/v2 v2.0.5 // indirect
And update your packages with go mod. The problem was on this line – https://github.com/pion/srtp/compare/v2.0.4…v2.0.5#diff-42e63a61fe336233215c8623a90b1e1697a38e30aa9cafc1c396a9e37d61c00cR144
Sometimes we have a task that causes a feeling of fear. This fear appears because the task has something new, something in what I am not experienced yet.
My list about how to solve this and defeat such fears:
- Relax and think why you have a fear
- Ask your supervisor/teammate for advice/support
- Find some examples of solutions for a similar task
- Prepare first version of solution and discuss it with somemone (superviser, client, teammate)
- Update your solution according to feedback from them and go back for review with your supervisor/teammate
Steps 4-5 are repeatable unless you have a proper solution.
All of us made something in the first time and the fear is a normal for everyone.
Here is my DBAL implementation for mongoDB that I am using in my daily routines.
It contains features that I am using frequently it does not contain any implementation for DSL or Query Builders.
All extra features will be added later or maybe I will put it into a different library.
CloneGoPkg is a simple CLI tool to create your own package from template based on any git repository
go install -i github.com/wajox/clonegopkg
# clonegopkg clone [git_repository_template] [new_pkg]
clonegopkg clone email@example.com:wajox/gobase.git github.com/wajox/newproject
GitHub – https://github.com/wajox/clonegopkg
What is Watermill?
“Watermill is a Golang library for working efficiently with message streams. It is intended for building event-driven applications. It can be used for event sourcing, RPC over messages, sagas, and whatever else comes to your mind. You can use conventional pub/sub implementations like Kafka or RabbitMQ, but also HTTP or MySQL binlog, if that fits your use case.
It comes with a set of Pub/Sub implementations and can be easily extended by your own.
Watermill also ships with standard middlewares like instrumentation, poison queue, throttling, correlation, and other tools used by every message-driven application.”
Why use Watermill?
“With more projects adopting the microservices pattern over recent years, we realized that synchronous communication is not always the right choice. Asynchronous methods started to grow as a new standard way to communicate.
But while there’s a lot of existing tooling for synchronous integration patterns (e.g. HTTP), correctly setting up a message-oriented project can be a challenge. There’s a lot of different message queues and streaming systems, each with different features and client library API.
Watermill aims to be the standard messaging library for Go, hiding all that complexity behind an API that is easy to understand. It provides all you might need for building an application based on events or other asynchronous patterns. After looking at the examples, you should be able to quickly integrate Watermill with your project.”
Here is my template for Golang Application –
Only one thing that you have to do after git clone – replace all package name entries, from
github.com/ildarusmanov/gobase github.com/wajox/gobase to [your_package_name]
Template has been updated and moved into wajox/gobase repository.