How To Structure Your Golang (API) Projects!?

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 มิ.ย. 2024
  • ► Join my Discord community for free education 👉 / discord
    ► Become a Patreon for more exclusive content 👉 / anthonygg_
    ► Buy my a coffee 👉 donate.stripe.com/aEU2a6ayH2u...
    ► Follow me on Twitter 👉 / anthdm
    ► Follow me on GitHub 👉 github.com/anthdm
    In this Golang tutorial, I will show you MY best practices on how to structure your Golang (API) projects.
    #golang

ความคิดเห็น • 67

  • @anthonygg_
    @anthonygg_  ปีที่แล้ว +2

    ► Join my Discord community for free education 👉 discord.com/invite/bDy8t4b3Rz
    ► Become a Patreon for exclusive tutorials👉 www.patreon.com/anthonygg_
    ► Buy me a coffee 👉 donate.stripe.com/aEU2a6ayH2uCa3u4gg
    Thanks for watching

  • @TheRealisticNihilist
    @TheRealisticNihilist ปีที่แล้ว +24

    I love the way this guy says "structure".

  • @mwnkt
    @mwnkt ปีที่แล้ว +3

    loving the consistency in uploads, loving the channel so far

  • @linhnguyen05111999
    @linhnguyen05111999 2 หลายเดือนก่อน +1

    omg amazing! I really needed this. Great example, especially the storage interface.

  • @krislui852
    @krislui852 9 หลายเดือนก่อน +5

    just learnt go recently and trying to build my first project on it. tried different ways to structure my project but found them being quite messy. great video, helps a lot.

  • @scarthebadguy
    @scarthebadguy ปีที่แล้ว +5

    Hey mate these are great videos. I love how verbose you are as you type. I learn more from you talking than I have from any udemy course

  • @jondoe79
    @jondoe79 ปีที่แล้ว +1

    Super clean, it's grouped by feature.

  • @pss_crs
    @pss_crs ปีที่แล้ว +1

    I'm regretting notvdiscovered this channel early thanks.

  • @davidhtorres
    @davidhtorres 10 หลายเดือนก่อน

    These videos are awesome! Thank you! Very clear!

  • @Incolent
    @Incolent ปีที่แล้ว +5

    Just stumbled upon your channel. Amazing content for students! Keep it coming!

  • @andreimikhalkevich5633
    @andreimikhalkevich5633 ปีที่แล้ว +1

    go ahead Anthony, very helpful skills

  • @joshb7001
    @joshb7001 ปีที่แล้ว +2

    You are pumping out golden eggs non stop. Thank you

  • @Leon-cj8hd
    @Leon-cj8hd 11 หลายเดือนก่อน

    Your coding speed is insane, even while talking. Viewed some videos, I think the content is great, thanks a lot :)

  • @tintin537
    @tintin537 ปีที่แล้ว +1

    Thank you. as always superb.

  • @terriprifti5069
    @terriprifti5069 ปีที่แล้ว +3

    This is a gem 💎

  • @blazinglyfaster9935
    @blazinglyfaster9935 ปีที่แล้ว +1

    Perfect timing 🚀🚀🚀

  • @Shatterhand16
    @Shatterhand16 ปีที่แล้ว +12

    Watched your "Important Tips On How To Write Idiomatic Code In Golang" just before watching this, and I believe that the interface declared in 8:02 should be Storer instead of Storage, same for module name. Additionally maybe it would be worth to enable screencast mode in vscode with smaller font and offset? I think it'd be great to learn some of the shortcuts that allow you to be that fast just by watching. By the way loving the content, keep it up!

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว +8

      Yeah storer would maybe more idiomatic. You are right.

    • @jean-naymar602
      @jean-naymar602 9 หลายเดือนก่อน +4

      This is a common misconception but the "effective go" doc does NOT say that every interface should end in -er.
      Instead, it says that IF an interface defines only 1 method, then this interface should be named by appending -er to the method's name : "By convention, one-method interfaces are named by the method name plus an -er suffix"
      That's it.
      (Admittedly, one method interfaces should be what you aim for anyway but still, you shouldn't bother naming multi-method interfaces with -er...)

    • @Shatterhand16
      @Shatterhand16 9 หลายเดือนก่อน

      @@jean-naymar602 That's cool to know, thanks for detailed explanation!

  • @frozenn00b
    @frozenn00b 6 หลายเดือนก่อน +1

    Breaking all the Golang project structure conventions for "reasons". Convention is to use cmd, internal, pkg, test for sorting your packages... arbitrary folder structures introduce additional hurdles for newcomers to the project to figure out what you're doing.

  • @JohnDoe-ji1zv
    @JohnDoe-ji1zv ปีที่แล้ว

    Anthony thanks for the video! Would like to get your opinion on di frameworks like Uber fx. Do you use dependency injection frameworks in your applications ?

  • @Noudapi
    @Noudapi 3 หลายเดือนก่อน

    Hey Anthony thank you for your video. I just don't understand how you implement the storage interface. Do you add all the functions to implement for all entities of your database?

  • @cothromachd
    @cothromachd ปีที่แล้ว +2

    anthony the sigma

  • @ThePandaGuitar
    @ThePandaGuitar ปีที่แล้ว +1

    I don't know Go and that flag string is awesome. I can see why making CLIs in Go is sweet.

  • @JanPhilippHeinrich
    @JanPhilippHeinrich ปีที่แล้ว +3

    Hey Anthony,
    basically this is a good video but could you explain why you put the interface for store
    right there where it is implemented? I learned that we use duck typing / structural typing
    which means we would put the interface were it is used.

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว

      In have a video explaining interfaces and why you should use them

  • @soufta5872
    @soufta5872 7 หลายเดือนก่อน

    Hi there. Is golang a good thing for sysadmin and autmation projects ? I don't want to use python especially when it comes to third party librairies that are hard to install on production ! Thanks

  • @jorisjansen2892
    @jorisjansen2892 ปีที่แล้ว +1

    🚀🚀

  • @bmitch3020
    @bmitch3020 ปีที่แล้ว +13

    "package util" oh no, Oh no no no no no.

  • @nickchristoforidis6176
    @nickchristoforidis6176 ปีที่แล้ว

    Hello Anthony,
    A while ago, I just watch the "How To Build And Structure A JSON API Project In Golang!?" video, in which you're following a sightly different approach concerning the folders/packages structure (which I love very much BTW). "Everything on root" you're saying, "unless it's really needed".
    I'd like to ask you why? Does this happen because the videos are from different time?
    Thank you.

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว

      My personal opinion is to keep things very simple and with as less folders possible. Because soon or later you will end up with circular dependencies. But I know that this is very hard for a lot of people to switch to due to the fact that the meta is to folderize like a mad men. So, I try to switch things up and give people multiple approaches on "how they could structure Golang applications".

    • @nickchristoforidis6176
      @nickchristoforidis6176 ปีที่แล้ว

      @@anthonygg_ Got it!
      I'm just starting and I'm friend of the minimalistic approach. You've right though.

  • @rafaelcordoba13
    @rafaelcordoba13 10 หลายเดือนก่อน +1

    How would you organize all the other go files based on application features? For a game server for example, you have a shop, daily quests, daily login, clans, events, wallet, etc. How do you see that scaling?

    • @anthonygg_
      @anthonygg_  10 หลายเดือนก่อน

      Just separate handlers, data, and business logic

  • @jed271
    @jed271 ปีที่แล้ว +5

    What are your thoughts on hexagonal architecture?

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว +9

      Thats a scam

    • @jed271
      @jed271 ปีที่แล้ว +1

      @@anthonygg_ can you elaborate more? I really like your contents

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว +5

      @@jed271 I think that people are inventing new ways of doing things because they have nothing better to do. My advice is to just solve the problem and do what works for you. The folder structure I showed you worked very well for me and I think it's a structure that is also highly adopted by a lot of big open-source projects. Don't make it too complex.

  • @andrewcathcart
    @andrewcathcart ปีที่แล้ว +2

    Random, but can you export your vscode setup? Theme looks v clean

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว +1

      github.com/anthdm/vscode-config

  • @maximilianlang7175
    @maximilianlang7175 ปีที่แล้ว +2

    If you have more than one route, maybe something like /users and /books. Would you implement one store for all or would you have one store for all your types?

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว +1

      Depends. You could make more interfaces for each domain if you want. Otherwise your storage interface will be a raidboss

    • @maximilianlang7175
      @maximilianlang7175 ปีที่แล้ว

      @@anthonygg_ Thanks! So you would have a user and a book interface and then several implementations for mongo oder mysql

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว

      @@maximilianlang7175 Yes. UserStorage, bookStorage and so on.

    • @maximilianlang7175
      @maximilianlang7175 ปีที่แล้ว

      @@anthonygg_ and do you plan to make a video about mongo?

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว +1

      @@maximilianlang7175 good idea, will note that.

  • @MaheshKumar-tc3gn
    @MaheshKumar-tc3gn 3 หลายเดือนก่อน

    Do you keep everything in server package. Server package will handle user requests, in future it will handle all the separate modules? I think it is bad idea and bad structure

  • @pavelastraukh9905
    @pavelastraukh9905 9 หลายเดือนก่อน

    Is there a reason why store is passed by value and not by reference?

  • @kamalkamals
    @kamalkamals ปีที่แล้ว +1

    so the storage it s look like session of connection to mongodb, but is that a best practice to inject it as params in every function of the services ?? why no use it like a global variable !

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว

      Yup. Im using that approach right now.

    • @kamalkamals
      @kamalkamals ปีที่แล้ว

      @@anthonygg_ greate i use with graphql and works good, are u test before upload file with graphql ?? sorry if that is not the topic of this video

  • @pedrohenriquebufulindealme5763
    @pedrohenriquebufulindealme5763 ปีที่แล้ว +1

    Do you have any video that extends on the Storage pattern you showed?

    • @anthonygg_
      @anthonygg_  ปีที่แล้ว

      Hmm. Not sure. I use it in a lot of streams and projects

  • @hello-test-user
    @hello-test-user 10 หลายเดือนก่อน

    make : The term 'make' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
    the spelling of the name, or if a path was included, verify that the path is correct and try again.
    At line:1 char:1

  • @insert-name1500
    @insert-name1500 ปีที่แล้ว +2

    What's the name of this VS Code theme?

  • @2gbeh
    @2gbeh 3 หลายเดือนก่อน

    🇳🇬 Is Go a high level language ? This syntax looks sick (in a bad way).

  • @gustavogoncalves2101
    @gustavogoncalves2101 ปีที่แล้ว

    At interface storage can we make a gerenic interface with the default CRUD methods to work with N models?

  • @VeereshPatel15
    @VeereshPatel15 ปีที่แล้ว

    Hi bro, how to learn golang
    --->>>Please explain learning path about golang & solidity
    -- >>>> how to learn / build /test/ deploy frontend for web 3 projects

  • @faizulla5838
    @faizulla5838 2 หลายเดือนก่อน

    A lot off Bla Bla Bloa ... "How To Structure Your Golang (API) Projects!?" , but just 3 min about structure .... why need in this video inside the file?
    20 min video will good talk mi 15 min about folders and fills but not about insite the file.

  • @rezaneyrami7944
    @rezaneyrami7944 6 หลายเดือนก่อน

    Hello . I wish you would speak more slowly. I can hardly communicate with your language. If possible, speak more slowly... Thank you

  • @samess_
    @samess_ ปีที่แล้ว

    Please create a cli app that generates the template of your structured project...🥲

  • @Gertozzz
    @Gertozzz ปีที่แล้ว +1

    When are you going to code a Shalien server? Request.get.go