🌟 Hey devs! 🌟 Ready to level up your coding game? Check out this awesome course on Microservices using Go! 🚀 From beginner to pro, learn to build scalable apps with ease. Don't miss out! Enroll now 👉 kantan-coding.teachable.com/p/early-bird-special-pricing #GoLang #Microservices #CodeWithConfidence 🔥🎉
Hey thank you. That’s kind of you to say. I’m really glad this video has helped so many people. Didn’t expect it. I’m happy that you found it helpful! 😊
One of the best I've seen. You are the rare type that can take complex concepts and explain them so well. I hope you continue to make this kind of great content!
I agree with everyone else's comments. You've done an incredible job of taking a complex and difficult to understand topic and make it clear with a great example demonstrating it. Thank you so much! You've also gained another subscriber.
Hey thanks for the feedback! Actually, closing the channel isn't incorrect. In go, when you close the channel, the zero value for the channel's data type will get put onto the channel. So in this case, since the channel's data type is bool, when we close the channel in main, the message false gets put onto the channel. The for select loop in doWork will then receive that value and it will trigger the return. That's because "case
@kantancoding Thank you for your quick response. Yes you were right. The reason of the missing log was the missing sleep in the end of the main function. But another question pops up. In the following code if I remove the return statement, the app continuously logs "work done". Why is that ? It seems that the close function spamming the channel with messages. ``` package main import "fmt" import "time" func doWork(done
@@tzakarda Isn't that because we are relying on the channel to close our goroutine? If we get the value from the channel we manually close the function. That's the whole point of using the done channel. Since it's a for loop that is going to run forever, we are passing a done channel from the main function and it is unbuffered, when the goroutine can read from it, the function returns to close itself.
Excellent tutorial. There are lot of very smart developers around, but very few who can teach a relatively complex subject in an easy fashion. Kudos, and keep posting.
This was really great, I like the time you took to explain the difference between a bounded, and unbounded channel as it relates to async/sync behavior. Really useful
This is quite clear, even though I'm not a Go programmer. The music, however, is very distracting. Silence is the best accompaniment for an instructional video.
brother thanks a lot , many concepts like goroutines, concurrent, time.Sleep , it's only been 6:12 and i had cleared all my concepts. I came to this video after watching 10 videos. Thanks you brother.
@Kantan, I'm definitely not regretting subscribing to this channel. I'm learning go and so far you have been a huge help for me to understand complex go concepts. Thank you sir :)
From now on, you've got one more subscriber. Great content. I can't wait for some more advanced topics like, dependency injection, dynamic typing (interface{}) etc. As a php programmer recently I rewrote one of my microservices, and I was amazed by ease of doing it just with go. Apart of painfully precise data types declaration, and luck of many useful generic functions present in php core, I had almost ecstatic pleasure. Most of the time I do hard core backend staff with data transfer and after speed comparison I fell in love with go 🙂
Welcome! Yeah Go is definitely a great language. It seems it’s starting to pick up in popularity and the topics you mentioned seem like good video ideas so I will add them to my backlog. Thank you for the valuable feedback and thank you for watching ❤️
again great video. I don't think you need background music of any sort, because that's distracting. You explanation is great and that's is enough to get us going as opposed to background music.
Very cool demonstration. I'm just starting at Go but this is not my first language (I've been a backend developer for 12+ years). This language is getting more interesting at each new video I watch, this is exiting ^^
Really struggling to focus on your voice and not the background music but the comments all say what an essential video this is so I'll keep trying. I hope you'll consider dropping the background music in future videos.
Yeah, I’ve received many complaints about it already so the rest of the videos in the series I have dropped the music. Unfortunately it can’t be removed retroactively. I hope that you can get through it!
This explanation are really good, explained systematically from bottom to top, i came from frontend dev who dont know nothing about conccurent programming, even though i watch ZTM Golang i still cannot fully grasp the idea behind this Pattern. Love from indonesian bro, already liked videos also subscribed and shared!!
Wow! One of the best tutorials into channels I have seen. Really great explanation of what is happening under the hood. For me the first half was a tiny bit boring because of too many details which I already know and which I think every adequate junior software engineer should be already aware of. The second half is perfectly balanced in terms of new material and under the hood explanations. Thanks!
Great video brother. Hope you keep it going. I suggest though that you make the videos in 10 minutes series instead of a single large chunk. It becomes pretty overwhelming and difficult to index when I am trying to refer to your videos when working on something. But ey, you just got yourself a subscriber
😂that’s awesome! Seems you are working with some advanced concepts. I’m currently working on some videos touching on more advanced concepts. Be on the lookout and thanks for watching! ❤️
It was easy to understand. Finally I understand the logic behind using the concurrency. I used to see those mentioned in the project code base but didn't understand properly. Now I can implement my own :'). It was a nice video. I wanted to go through more but there are no more videos on golang 🥺 Sorry if I am greedy. I want to have more videos related to golang or design 🥺.
There actually is another video on Go that’s over 2 hours long: How To Structure Your Go App - Full Course [ Hex Arch + Tests ] ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-MpFog2kZsHk.html Also, thanks for your comment. I’m glad that it helped 🙂
@@anistoryhindi Are you talking specifically for Go? I've already created some HLD videos. Will do more in the future but HLD isn't a language specific thing. And yeah, I have plans to make some kafka stuff. I have no experience with NSQ so at least for the time being, no plans for that.
Well, i didn't understand, how this pipeline is better than just calling functions one by one in a for loop? Are there any pros? I mean your pipeline is executed actually synchronously, but code is overcomplicated, isn't it? Is there any reallife scenario when this worth it? P.S. amazing video, awesome tutorial
So basically, I opted for a very simple example so that people can understand the concept of a pipeline without getting distracted by a bunch of complex logic. But if you imagine that the go routines for each stage do something time consuming, I think you can understand the benefit. For example, If both stage 1 and stage 2 do something time consuming, they will be able to work in parallel. That’s because stage 1 can put something on the channel that stage two is listening to. And then Stage 1 can start working on a new thing WHILE stage 2 is processes what stage 1 just put on the channel. So at this point they will be doing work in parallel. If you just loop through each item in the slice and call some functions consecutively without using go routines and channels like you mentioned, nothing will happen in parallel. The first function will execute and the second won’t be called until it’s finished. Then the second will execute and at that time the first function is basically blocked until the second finishes because you won’t go to the next iteration in the loop until the currently running function and whatever comes after it is finished... etc. I hope that makes sense. Kind of difficult to explain via text 😅
I loved the video a lot, but this clarification I consider is crucial to be mentioned. A simple time.Sleep injected to stages could illustrate the point. Else it is indeed raising questions why do pipelining for no (clear) benefit. Having said that I really loved the way you explain and presented your content. I know how much effort goes into creating content of such quality
Thanks for the feedback! 😄 Yes, I will create more Go videos because Go is one of my favorite languages but this is not a Go specific channel. So for those that will be annoyed if I post videos unrelated to go, it's probably best not to subscribe 👍
I think you missed the mark on the last example, go's power is in its async nature, would have loved to see how the data could have been distributed across the pipeline to make it faster
There are 3 parts in this playlist so far. I’m not sure I’ll make a video specific to mutexes and wait groups since in most cases shared memory can be avoided. But I guess it depends on the need 🤔