Тёмный

Handling errors LIKE a 10x ENGINEER in Golang - Golang Service Pattern 

samvcodes
Подписаться 5 тыс.
Просмотров 27 тыс.
50% 1

Опубликовано:

 

28 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 60   
@MatthiasFasching
@MatthiasFasching 7 месяцев назад
I'm not a big fan of having the service decide which HTTP error the handler returns if something goes wrong. Let's say we have a service that manages invoices and a method that returns a given invoice based on it's id. If that invoice doesn't exist in my opinion we should not return an error that is automatically mapped to 404 in a handler because depending on the context a 403 or even 5xx might be a better response. Errors returned by services should be specific to the service and the handler should decide how to map those errors to HTTP status codes not the service.
@samvcodes
@samvcodes 7 месяцев назад
I agree - I have since been bitten by this and now take the exact approach you’ve mentioned! I’ll make an updated video on this soon as I think it’s a very key point!
@esra_erimez
@esra_erimez 11 месяцев назад
Most impressive. Not only was this video clear and informative, I can tell you know what your talking about by how fluid you are in talking about it. Well done.
@samvcodes
@samvcodes 11 месяцев назад
Thank you very much for you comment!
@matthew1106
@matthew1106 6 месяцев назад
Jesus dude I’ve been looking for Go content like this. I’m going to binge watch all your videos. Keep it going.
@samvcodes
@samvcodes 6 месяцев назад
Thanks for the comment! Much appreciated :) - More videos coming soon!
@cole.maxwell
@cole.maxwell 5 месяцев назад
So good! Thanks for being the senior I don't have
@rampandey191
@rampandey191 11 месяцев назад
Thanks for the video will implement it in a current project
@samvcodes
@samvcodes 11 месяцев назад
Thanks for watching!😊
@memeherp166
@memeherp166 11 месяцев назад
thank you, your channel make my go code more clean 😊
@samvcodes
@samvcodes 11 месяцев назад
Thank you for watching, I'm glad the videos are helping! :)
@oleksandr-petrovych
@oleksandr-petrovych 11 месяцев назад
get rid of the "SWITCH", it spoils everything
@samvcodes
@samvcodes 11 месяцев назад
Hello! Thanks for watching :) No need to use it if you'd like more control on an error by error basis from your services, however the switch for the HTTP codes is a mere util to return HTTP status codes from a server based on errors returned from your services - idea being saving repetitive response code handling code throughout your endpoints. Hopefully that makes sense :D
@oleksandr-petrovych
@oleksandr-petrovych 11 месяцев назад
@@samvcodes move the behavior to where it should be and do not write "SWITCH" where it is not needed
@clutchmadness
@clutchmadness 11 месяцев назад
Where is he supposed to move it? @@oleksandr-petrovych
@oleksandr-petrovych
@oleksandr-petrovych 11 месяцев назад
@@clutchmadness The second principle of SOLID or Open-closed Principle. If we add a new "Error" then we will have to modify this SWITCH as well. To avoid this necessity, use polymorphism instead of SWITCH. The behavior must be transferred to the method of the "Error" file, and instead of SWITCH, the method from these files will be called. It is necessary to save the condition of the presence of a certain method in each file, an interface can help with it.
@clutchmadness
@clutchmadness 11 месяцев назад
@@oleksandr-petrovych Thank you for explaining.
@packagebattos
@packagebattos 11 месяцев назад
underrated channel
@samvcodes
@samvcodes 11 месяцев назад
Ayyy thank you!
@hectorcast943
@hectorcast943 2 дня назад
how do you handle db transaction in service pattern? like using 2 separate services in the handler function.
@nooblero
@nooblero 3 месяца назад
So much code and you are still going to end up with thousand lines of "if err != nill" When people are asking for better error handling I am not sure that we worry about how to transfer error details, but rather how to make the code cleaner and less repetitive.
@justiceessiel6123
@justiceessiel6123 8 месяцев назад
Please drop the repo
@Ishmeetsinghis
@Ishmeetsinghis 11 месяцев назад
Thanks, this is useful
@samvcodes
@samvcodes 11 месяцев назад
Thanks for watching!
@justiceessiel6123
@justiceessiel6123 8 месяцев назад
Please make a video on mocking
@samvcodes
@samvcodes 8 месяцев назад
Will do!
@Bashx1
@Bashx1 11 месяцев назад
Hey man, would you mind sharing your font and theme? Nice video. Thanks
@samvcodes
@samvcodes 11 месяцев назад
Thank you man! The theme is "gruvbox", but I also switch to "catppuccin". My go to font is "Monaco" :)
@Bashx1
@Bashx1 11 месяцев назад
Thank you very much. I will subscribe.Keep it up! @@samvcodes
@leonardovillalobos5277
@leonardovillalobos5277 5 месяцев назад
Beautiful! Earned a sub, thanks bro!
@TehGettinq
@TehGettinq 11 месяцев назад
I also end up doing similar stuff for generic-ish error handling. Sadly the only thing this truly highlight is how poorly designed go is.
@khushalgandhi5157
@khushalgandhi5157 9 месяцев назад
Which language do u think has better error handling ? What changes could be made in golang ?
@TehGettinq
@TehGettinq 9 месяцев назад
​@@khushalgandhi5157 i think pretty much all languages from the past 15years, rust would be a good mainstream example. As for what changes in golang well support for sum types would be the first thing for me. Then maybe optimized/release builds.
@khushalgandhi5157
@khushalgandhi5157 9 месяцев назад
@@TehGettinq I am a new golang dev working for past 5 months using fiber and gin framework Do u suggest any other language that I should learn on my own . I know the basics of Java
@TehGettinq
@TehGettinq 9 месяцев назад
@@khushalgandhi5157 That's great :) I would say 5 months is not a lot if you are new. If you enjoy golang I would say keep using it and make sure you understand and study all the technical details (go routines, channels, interfaces, packaging).. Then once you feel like you are extremely comfortable with these concepts you can move to something else!
@diehenne
@diehenne 8 месяцев назад
@TehGettinq Maybe I am missing something, but do you mean an option type that can return a Some or None, or what do you mean by sum type?
@pasanmadhuranga9545
@pasanmadhuranga9545 Месяц назад
you're an superstart bro😃😃
@李伟鸣
@李伟鸣 11 месяцев назад
Good job!
@samvcodes
@samvcodes 11 месяцев назад
Thanks! 😊
@crusader_
@crusader_ Месяц назад
which font is this
@danimunf
@danimunf 11 месяцев назад
I'm kinda lost, why do you put errors.go under service? wouldn't it be more intuitive to put it under commons / helper? because it's the more generic error, am i right? thanka in advance
@Laflamablanca969
@Laflamablanca969 11 месяцев назад
Bruz… if that’s all you picked up from this video, you’ve got 100 problems
@filipboye-kofi3018
@filipboye-kofi3018 9 месяцев назад
depends, but pkg like commons and helpers are totaly useless name conventions saying nothing, in this case it could be at /service/errors/http.go when he was talking about rpc potentional implementing.
@anhhaoam3379
@anhhaoam3379 9 месяцев назад
Where did you get the Join function? Because in errors there is no Join function.
@samvcodes
@samvcodes 9 месяцев назад
Hi! There is indeed a new `Join` method in the standard library `errors` package. pkg.go.dev/errors#example-Join But looking back on this code, error wrapping is probably nicer here. `fmt.Errorf("%w: %w", err1, err2)`.
@anhhaoam3379
@anhhaoam3379 9 месяцев назад
@@samvcodes tks
@matthewrawlings6763
@matthewrawlings6763 11 месяцев назад
This is a great pattern, I had recently just done something similar on a recent project
@samvcodes
@samvcodes 11 месяцев назад
Nothing better than handling errors nicely right!? - Thanks for watching :)
@afadeevz
@afadeevz 11 месяцев назад
Great and useful content as always
@samvcodes
@samvcodes 11 месяцев назад
Thanks again!
@gouravkolhatkar3623
@gouravkolhatkar3623 11 месяцев назад
Mate we need full beginner friendly tutorial of go from you. Please 🚀❤.
@samvcodes
@samvcodes 11 месяцев назад
Coming soon😊 thanks!
@vikingthedude
@vikingthedude 11 месяцев назад
But also more intermediate/advanced stuff as well. Theres a huge supply of beginner content and not nearly enough more advanced content
@felixna5650
@felixna5650 11 месяцев назад
full beginner content is everywhere out there. intermediate stuff would be way more useful at this point
@konradpiotrowski9549
@konradpiotrowski9549 5 месяцев назад
Damn, this is nice. Imho it would be perfect if you finish it off with some dependency injection, specific error handler interface which is later on implemented by a few packages, http, grpc... So then when you switch from httperror to grpcerror you do it in one place by replacing the structure instead of refering to a different package everywhere :)
Далее
The secret to making Golang error handling a breeze
13:46
err != nil Is GOOD? (And Why)
7:19
Просмотров 92 тыс.
CORTE DE CABELO RADICAL
00:59
Просмотров 2 млн
Creating custom struct tags in Golang is awesome!
24:42
Domain Driven Design (DDD) in Golang!?
11:30
Просмотров 21 тыс.
Beginners Should Think Differently When Writing Golang
11:35
Advanced Golang: Generics Explained
13:37
Просмотров 64 тыс.
This Is The BEST Way To Structure Your GO Projects
11:08
Golang Error Handling Is Better Than You Think!
18:53
CORTE DE CABELO RADICAL
00:59
Просмотров 2 млн