Golang REST API With Mux

Поділитися
Вставка
  • Опубліковано 15 гру 2024

КОМЕНТАРІ • 351

  • @forzaforza9204
    @forzaforza9204 7 років тому +108

    Brad! You are genius! Looking forward to your Golang course. You definitely have a gift to share your knowledge.

  • @Pikoro09
    @Pikoro09 5 років тому +58

    I'd 100% buy an intermediate/advanced Golang course from you.

    • @quantum-t
      @quantum-t 5 років тому +6

      all those YT "lessons" are just reading out documentation. u gotta be rly lazy

    • @SantiagoPerez-il8tj
      @SantiagoPerez-il8tj 4 роки тому +2

      @@quantum-t But not all of them explain good

    • @MaoDev
      @MaoDev 4 роки тому

      @@SantiagoPerez-il8tj they literally do

    • @ericblancas8113
      @ericblancas8113 4 роки тому +4

      @@SantiagoPerez-il8tj in my personal preference and opinion, I usually rely on both documentation and learning from YT video, along side that, shouldn't matter which medium you prefer, as long as you're able to effective learn thats all that matters, besides everyone has their own different learning style.

  • @samdavepollard
    @samdavepollard 7 років тому +176

    "I'm actually thinking of doing a course on it."
    YES!!!!

  • @katungiyassin9947
    @katungiyassin9947 Місяць тому +1

    37:20 I got an explanation from chatgpt which absolutely cool.
    books = append(books[:index],
    books[index+1:]...)
    This line removes the matched item from the books slice. It does this by "slicing" around the current index:
    books[:index] is the part of the slice up to (but not including) the element at index.
    books[index+1:] is the part of the slice after index.
    append(books[:index], books[index+1:]...) combines both parts, effectively skipping the element at index.

  • @levizwannah
    @levizwannah 3 роки тому

    Thank you Brad. I watch your 1hr 30min intro to golang. And now I am watching this. It has brought me a long way. Here is a closure function to generate unique ids instead of the random.
    //closure function to generate ids for book
    func IdGenerator() func() int {
    id := 1
    return func() int {
    id++
    return id
    }
    }
    var IdGen func() int = IdGenerator()
    Thats how far I have come. Keep on.

  • @joeyalfaro2323
    @joeyalfaro2323 3 роки тому

    This greatest tutorial I've ever seen and I've seen some bad ones can't understand voice, guys going hundred miles hour leaving shit out. You are truly gifted

  • @BrutalHellfire
    @BrutalHellfire 6 років тому +5

    You don't really need to import all the packages at the beginning, also you don't need to align types in your struct with tabs, go fmt does it for you which runs automatically when you save your code in vscode. You may have noticed (I did) that your extra unused imports went away as you saved your real code (not the hello world one) for first time. Anyway you said it in the beginning that you are new to golang so not to worry, it happens. Overall a good video for golang newbies.

  • @learning608
    @learning608 7 років тому +3

    I just want to say that you're the AWESOME! I really appreciate you're work, i think you're the best programming instructor on internet. To do all this tutorials for free, just priceless, GOD bless you! I learned so many things with you, thank you so much! Please never stop this videos, i study Computer Science at university, but i learned pretty much with you than at university:)

  • @JonBrookes
    @JonBrookes 7 років тому +3

    Thanks again Brad. Another really good tutorial. Go is by far my favourite language just now and for the purpose of serving json apis in this manner is highly performant. You've shown how to get this done efficiently and explain how to get there in a very clear and easy to understand way.

  • @ristekostadinov2820
    @ristekostadinov2820 7 років тому

    This is the most elegant language i've ever seen with 80 lines of code you've made a rest api, looking forward for more go-lang content :)

  • @saadabbasi2063
    @saadabbasi2063 5 років тому

    it wasn't long, nicely paced and controlled depth of details.
    Great video.
    finally got my head around it a little.

  • @micaelatucker6626
    @micaelatucker6626 5 років тому +6

    A second part would be awesomeeee. Thank you so much for your help! This helped a lot to start learning some things for a new job I started! :)

  • @ClaraMcKenzie1
    @ClaraMcKenzie1 5 років тому +1

    This was a terrific intro to Go and a basic REST api, please do more!

  • @wk_dev
    @wk_dev 5 років тому +1

    So you mention that you don't fully grasp slices when explaining the delete function, which may have changed by now, but for anyone watching, the gist of that delete line is:
    - list[beginning:end] is a sublist of list from the indexes beginning to end
    - so list[1:3] on a list like {1, 2, 3, 4} would give you a new list with the elements 1 and 2 (so, {2,3}) of the original one (remember that indexes start at 0, and also the ending point is excluded from the sublist)
    - If you don't put any index, the starting point defaults to 0, and the ending point defaults to the length of the list
    - So books[:index] is "all books from the beginning to the index we got in the request" (excluding the last one of the sublist: the book we are deleting)
    - And books[index+1:] is "all books from the book following the one we got from the request till the end"
    - And then you're stitching these 2 sublists back together with append - omitting the book you are deleting

  • @z10n0v4
    @z10n0v4 7 років тому +3

  • @nlburnr1
    @nlburnr1 7 років тому +5

    This language looks so clean / so smooth and beatiful defintly going to try this. thank you brad for introducing me to something else besides javascript. I like what I'm seeing. As soon as you are ready for a full course in Udemy I will buy this course looking forward to more Go !

  • @TheHermitHacker
    @TheHermitHacker 6 років тому +1

    Thank you sir. I have been programming professionally since 1999 in a multitude of different programming languages but mostly in the areas of web development and server Administration so PHP python Perl Ruby Etc. I recently started delving into Dart 2 and golang. Honestly go looked pretty easy but there were a lot of little things that I didn't quite understand and I really just want to jump right in and I feel like this video hit on some of the key things that I questioned but wasn't sure how to quickly learn through the tutorials and example code scattered around the web. I learn by example generally and usually by browsing code. I very much appreciate you taking the time to make this video tutorial it helped me grasp this quickly. Thank you.

  • @gameofcodes9832
    @gameofcodes9832 4 роки тому +3

    32:53
    When in tutorial someone says dont use this in production then we expect that you suggest what will be a better approach in just brief. Because we want to learn best practice in coding.

    • @madhavadiflorio2550
      @madhavadiflorio2550 4 роки тому

      This is something that you would let the database handle. The database can generate a unique identifier so that you're sure that you won't have two items that have the same ID.

    • @realgabreal
      @realgabreal 4 роки тому

      you should look into "github.com/google/uuid" package

  • @zoliky
    @zoliky 5 років тому +2

    Hi Brad, could you please create more videos on Golang? I would be very grateful. Your time is appreciated.

  • @Oswee
    @Oswee 7 років тому +13

    GO is my first programming language at all an i like it a lot. I really would like to see some tutorial of fully functional CRUD application, like - Customers -> Orders, with MySQL and Web Components (not Polymer).

    • @danielsokil9529
      @danielsokil9529 7 років тому

      Same here

    • @0xPriom
      @0xPriom 7 років тому

      Good choice!

    • @philtrem
      @philtrem 6 років тому

      I'm doing a React app with a Golang back-end. I'm no expert though... That's like my first full-stack app.

  • @kave_08
    @kave_08 3 роки тому

    Alright after 3 years , still one of the best source to learning GO! Tyvm 🍻

  • @steveymcneckbeard
    @steveymcneckbeard 7 років тому +2

    This was excellent Brad. The syntax for Goland is very appealing and I look forward to more tutorials.

  • @renishb10
    @renishb10 4 роки тому +2

    For the updating Book, we can just replace the item as below
    func updateBook(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    params := mux.Vars(r)
    for i, item := range books {
    if item.ID == params["id"] {
    var book Book
    _ = json.NewDecoder(r.Body).Decode(&book)
    book.ID = item.ID
    books[i] = book
    }
    }
    json.NewEncoder(w).Encode(books)
    }

  • @nastyfinn1098
    @nastyfinn1098 5 років тому

    As a somewhat newbie to go I highly recommend you do a course on go. I am almost through with the book "the go programming language" and it is a very efficient language

  • @lozD83
    @lozD83 6 років тому

    My notes so far:
    1:30 - Were going to use http
    2:30 - actually, were jumping straight to using a third party router instead of using the standard http lib
    3:48 - $ = "money sign"
    👌

  • @Hendrix312002
    @Hendrix312002 6 років тому +2

    Brad please make a Go course! Would love to learn more about Go especially from you

  • @VladimirKopecky
    @VladimirKopecky 6 років тому +2

    Thanks so much for your course! Can't wait for Part 2 and maybe Angular as a frontend !

  • @jusumdood4632
    @jusumdood4632 5 років тому +3

    I'd love to see more videos on Go. A course on it would be great!

  • @codelucky
    @codelucky 5 років тому +9

    It's time to make a course on Google RPC(remote procedure call) framework which is 10x faster than GraphQL. Also, implement it with Golang.

    • @fr3fou
      @fr3fou 4 роки тому +1

      where'd you get the 10x faster figure?

    • @silentobserver9095
      @silentobserver9095 4 роки тому +2

      What are you comparing with for the 10x faster perf? If you use `graphql-jit` then you can get more perf out of JS.
      But if you really need the perf then Go isn't the right tool, you're better off with something like Rust.

  • @metaorior
    @metaorior 6 років тому +1

    Brad love your tutorials pls make more in go!
    it's really hard to find more videos in golang nowadays

  • @Dima-rj7bv
    @Dima-rj7bv 5 років тому +2

    For unique IDs in the scope of this exercise, I would use UUID instead. It should be safe and should not have collisions in a limited space.

  • @eddiejibson6841
    @eddiejibson6841 7 років тому +15

    Nice to see some Go here, hopefully more to follow :P

    • @TraversyMedia
      @TraversyMedia  7 років тому +2

      Definitely, I love it

    • @Nicky-dw2eu
      @Nicky-dw2eu 7 років тому

      It’s really similar to python but with types

  • @rickyferia
    @rickyferia 7 років тому +3

    I love golang. It's nice to see a tutorial about it in this channel. Hopefully there will be much more.

  • @soruzein2988
    @soruzein2988 4 роки тому

    I love how this is pretty similiar with Node.Js (Express)'s Webservice. Thankyou for sharing Brad! I feel related to you because I'm a JavaScript boy and wanted to learn this Go language

  • @artiomoganesyan8952
    @artiomoganesyan8952 4 роки тому

    I am sure people are still waiting on that course I really hope that it comes out. It would be really great. I wasn't able to find anyone for me on udemy that explains GO.

  • @Bakuta1103
    @Bakuta1103 6 років тому

    @31:20 The reason it disappears is because if you import a package and don't use it, the code will not compile. The extension just helps you along with the process :)

  • @francomedina8310
    @francomedina8310 6 років тому +1

    Looking forward for the next video where the database is implemented. Great tut, subscribed!

  • @murilohenriquematias9590
    @murilohenriquematias9590 2 роки тому

    Not an indian tutorial, but very awesome. Thank you very much!

  • @admercs
    @admercs 6 років тому

    Also, the deleteBook function is appending two slices. The first slice goes up to (not including) the index and the second slice starts after the index. Hence, the index is not included in the new array. This is equivalent to deleting it. Probably, this is what higher-level languages do under the hood.

  • @Muddzdk
    @Muddzdk 5 років тому

    Tip for new beginners: The first 10 minutes hazzle of creating a Go file and package and imports could be avoided by just using Goland. The autoimport feature saves you for manually typing every package

    • @dowiee2694
      @dowiee2694 5 років тому

      Or just the Go extension in vscode?

  • @leeritenour
    @leeritenour 6 років тому +1

    Great video! Looking forward to the full-stack implementation with the database.

  • @muhammadarifin9470
    @muhammadarifin9470 6 років тому

    this is the best go tutorial for bignner ever I seen....

  • @sk8rgui
    @sk8rgui 5 років тому +2

    I would really love to see a course from you on Golang. You're great at explaining things.

  • @supernenechi
    @supernenechi 3 роки тому

    I wish that I knew Go at the beginning of college, I honestly don't know how I ever made a Rest like api with goddamn PHP. Go is by far my favorite language ever since I discovered it

  • @stefanocardarelli9201
    @stefanocardarelli9201 4 роки тому

    Great video, thank you very much!
    Regarding the append(books[:index], books[index+1]...) syntax this may be more familiar to people that comes from python! It basically replaces the books slice with itself but up until "index" (first argument) and from "index+1" to the end of the slice (second argument).
    The dotdotdot is the same as the * operator when put before lists in python. It basically "unwraps" the list (in this case the slice) into single elements and gives them to the append function as if they were comma separated (this is sort of a workaround to feed the append function when you have already other data stored in other slices (or arrays))
    Hope this helps =)
    EDIT: missing "other data" in the last line

  • @valdezm_com
    @valdezm_com 6 років тому

    I second all the remarks on the excellency that you brought! Well done my friend! One thing that wasn't clear was the usage of the _ operator(the blank identifier) in the following line:
    `_ = json.newDecoder(r.body).Decode(&book)` (line 53, minute 33:33)
    however, it was a delightful opportunity to learn through inference fascinating things about this language! After looking up the decode function i see it returns an error and the blank identifier allows execution without having to worry about catching said error.. so that is why a seemingly mutating function requires an assignment of void(the blank identifier) sending error handling to oblivion.. that's my inference i suspect it wouldn't compile otherwise... i was wondering why a void mutating function had an assignment precede it in the first place.. again, well done and thank you! I wish you the best in your future endeavors!

    • @valdezm_com
      @valdezm_com 6 років тому

      After spinning this project up and removing the `_ =` from the line, it built and executed just fine, so my inference was wrong.. So? Why did you add that? Seems like `json.newDecoder(r.body).Decode(&book)` does exactly the same thing.. Was it because you were unsure of what was returned from this functions in the first place and just wanted to be extra careful? O! I think I know why it doesn't cause a compile time error and my test-case(simple creating a book with the correct parameters) BECAUSE IT IS A RUNTIME ERROR!!! Duh! .. UPDATE: nope that isn't it, I couldn't break the code.. Perhaps you thought that since you couldn't anticipate what might cause the error to be thrown and didn't care to handle that exceptional case, you would just "be safe" and cover the unknown(through the use of this blank identifier, which I am still assuming basically mean if anything is returned send it to oblivion)? Ahh... I am at a loss, this is something like my first week at Go programming for me though, so I am going to stop beating myself up... BUT PLEASE LET ME KNOW, thanks :)

  • @noice4989
    @noice4989 4 роки тому

    I can't stress how much this was helpful!!

  • @mrunknown160
    @mrunknown160 3 роки тому +1

    Mr.Brad, do you have a plan for a paid course on the Go with React js? Kindly create a course. We would highly appreciate your effort.

  • @wikedawsom
    @wikedawsom 4 роки тому +1

    Very good tutorial, thank you. In the update function you delete the item and create a new one to append on the end. Instead of rewriting this functionality, would you just be able to call the 2 functions that you already created for delete and create? Also, if you wanted to do a proper update, you could just modify the properties of the book at books[index] (ex. books[index].Title = book.Title) or replace the whole book with the new one (ex. books[index] = book (you would have to make sure the ID is still correct with this one tho)).

  • @benz4977
    @benz4977 7 років тому

    Finally! Thanks so much for doing this, pls do a course on this!

  • @akyeren
    @akyeren 3 роки тому +1

    The update request could simply be: books[index] = updatedBook, and with this solution updatedBook.ID needs to be made the same as book.ID, but that's a minor detail.

  • @natansevero4272
    @natansevero4272 7 років тому

    Too cool! Nice video. Would be interessant a video talking about of initial features for beginners in the Go Lang, please!

  • @saunved
    @saunved 3 роки тому

    Hi,
    At 29:45 you're returning a single book. How does the &Book{} pick up the correct book? I'm a little confused there

  • @freddian4865
    @freddian4865 6 років тому +2

    Why did you decide to capitalize the structs in this project? I mean they worked just fine for me in lowercase and (afaik) having them start with an uppercase letter would only export them (which wouldn't be needed in this small project).

    • @sametsahin10
      @sametsahin10 4 роки тому

      It's required to make fields exported for "json" package to work. Refer to this SO answer.
      stackoverflow.com/a/50320595/6753606

  • @danielsokil9529
    @danielsokil9529 7 років тому

    I was shocked to see this video. THANKS! You are awesome. So is golang

  • @huyhoang752
    @huyhoang752 6 років тому

    Traversy Media is like a code-gym for developers :)

  • @anisbedhiafi4531
    @anisbedhiafi4531 4 роки тому +1

    You could test your API using REST Client (an extension in vscode) directly from vscode instead of dowloading, installing and filling the fields in postman.
    Link: marketplace.visualstudio.com/items?itemName=humao.rest-client

  • @MisterFresh022
    @MisterFresh022 4 роки тому +2

    Good tutorial. But explanations are still missing for beginners like me such as "Why should a variable in a struct begin with an upper case?" ( to be an exported variable, otherwise it wouldn't work. I wasted alot of time looking for why it wasn't working ), you should add an error handler in case that the json request isn't what we're expecting ( bad/missing attributes ). What does the underscore in the loop function mean ? And why are you using an underscore to decode a json ?

    • @stctheproducer
      @stctheproducer 3 роки тому

      You might want to check out his crash course which is tailored towards beginners: ua-cam.com/video/SqrbIlUwR0U/v-deo.html

  • @MsDsmart
    @MsDsmart 2 роки тому

    Very fast API coding! Excellent idea. Like this techics, thanks you

  • @tabiApo41013
    @tabiApo41013 7 років тому

    Looking forward for this course.. Thank you Brad!

  • @dimarzio9374
    @dimarzio9374 7 років тому

    Wow. Golang. That's a bold move. I wish I have time to learn it somehow.

  • @jfkoya
    @jfkoya 4 роки тому

    Hey Brad, I was successful with the get all books but on moving on to get single book, the postman returned a blank response, saying "405 Method Not Found." I went ahead to create book and it went through but on running Get book, it returned 404 not found. Please help on what I can do.

  • @thecodeluminary
    @thecodeluminary 2 роки тому

    Hello Brad, please when are you going to do the next phase of this tutorial?

  • @DeeptimanPattnaik1991
    @DeeptimanPattnaik1991 5 років тому

    Amazing, very clear neat explanation to get started with GO Rest APIs , Thanks :)

  • @thepepe
    @thepepe 3 роки тому

    Why did you use .Encode(&Book{}) but not just .Encode(Book{}) on 29:39?

  • @shuaishao2584
    @shuaishao2584 4 роки тому

    Thanks Brad, I followed your tutorial and cannot compile, the error message is "go build runtime/cgo: copying /Users/shuaishao/Library/Caches/go-build/a1/a195b901aae0a10a5971c762413083aa8b422336860f68ba78816eca576ae573-d: open /usr/local/go/pkg/darwin_amd64/runtime/cgo.a: permission denied", you have any idea?

  • @TharinduBoy
    @TharinduBoy 6 років тому

    Loved it! And waiting for the 2nd part with database

  • @stevenkaufman1324
    @stevenkaufman1324 4 роки тому +1

    Would be nice to see an example of a patch request using json.Unmarshall. Additionally, your updateBook could be as simple as books[index] = book (with book being the json decoded r.Body).

  • @TheNeonbuffalo
    @TheNeonbuffalo 4 роки тому

    waits patiently for Go Web Development Course

  • @dixonekuri9393
    @dixonekuri9393 4 роки тому

    If I'm not wrong, embedding a struct within another struct is called composition? I really love go. Been learning for a few weeks now and its been really amazing

  • @mirekum
    @mirekum 6 років тому

    Great tutorial, we're waiting for the second part

  • @doitalone2024
    @doitalone2024 7 років тому +2

    this is great ! :) please do a beginner course for go :)

  • @wisdomtree_btw
    @wisdomtree_btw 6 років тому

    Great tutorial.I appreciate the way you are able to simplify the process down and make it easy for people to understand.
    Are you able to share your VSCode theme and color scheme modifications?

  •  4 роки тому

    It is very simple, very clear video thank you so much!

  • @tenj
    @tenj 4 роки тому

    Thanks for your time my friend !

  • @canopener00
    @canopener00 4 роки тому

    just a question for clarificaiton if you can...
    When you are doing the update book, right after your if statement when you do "books = append(books[:index], books[index+1]...)
    is this basically just removing your book from the mock database, then re-adding it after the necessary updates have been made down below?
    I noticed the delete method does just that part and I was wondering if that is why your update works. basically using the 0 index of the slice to find where in the books it is, as the specific book due to 0 index would always be index -1 in the mock database, deleting them, then readding it ensuring the ID integrity using the book.ID = params["id"].
    you said in the course you didn't know why this works and I really just wanted to understand it

  • @arenddejong6609
    @arenddejong6609 4 роки тому

    when you getting a lot of books will a for loop be exspensive ?
    what if you use a array and id value is the interger of the array value so you get no for loop ?

  • @Dhostna
    @Dhostna 7 років тому

    I waiting for this video for a very long time thanks, brad...

  • @krishind99
    @krishind99 5 років тому

    This is a nice introduction. But is it common in golang to define/declare model within this same file? Should it not be defined separately in something like a model package, so that it can be re-used? Same with the function definitions too. Shouldn’t they be declared in another file/package and invoked in main.go?

  • @admercs
    @admercs 6 років тому

    For the updateBook function, you can also omit the last line, json.NewEncoder(w).Encode(books), as it would return a list of all the books if the book ID is not found.

    • @jims540
      @jims540 6 років тому

      Actually it returns the book struct with empty values, when not finding the book ID

  • @bc0078
    @bc0078 7 років тому

    Nice tutorial! Looking forward for a series

  • @robertwillis387
    @robertwillis387 5 років тому

    Was wondering whether there is a part 2 and 3 on this video into golang here on youtube?

  • @liadidan4248
    @liadidan4248 7 років тому

    Thank you Brad! Please make a full Udemy course about Golang for web 🙏

  • @davidignatius1
    @davidignatius1 5 років тому

    Hey! This is awesome video!
    In the video, there were already two data initially. However, when I tried with no initial mock data, when I did r.HandleFunc("/api/books",getBooks).Methods("GET"), it returns null and not empty slice [ ]. How to make it returns [ ] on the browser even though initially theres no data at all? Thank you!

  • @user-rp9iis1en6h
    @user-rp9iis1en6h 4 роки тому

    Hi traversy, How do you deploy this go project in Linux or windows server? I am trying to deploy it in azure app service but not understanding how to do it?

  • @letoan285
    @letoan285 6 років тому +2

    Hello Traversy, do you have a golang + vuejs/reactjs course on udemy ?

  • @maaz1000000
    @maaz1000000 5 років тому

    Very well explained. Enjoyed watching till the end :) thanks!!!

  • @arnoldwolfstein
    @arnoldwolfstein 5 років тому +1

    Thx again Brad. What is the theme you are using? Very liked colorful brackets.

    • @arnoldwolfstein
      @arnoldwolfstein 5 років тому

      @Lucas Farias thx. +rainbow parenthesis extension I guess.

  • @usamahnadeem2941
    @usamahnadeem2941 6 років тому

    A Full Stack GoLang Course with Angular 4, and any database at all would be awesome!

  • @Suriprofz
    @Suriprofz 6 років тому

    Nice Tutorial, love go.. its so fast. No overhead

  • @nathansnow
    @nathansnow 2 роки тому

    Good video Brad 👌
    I must say, Go is seriously shorter to write than what I'm used to, but I can't say it's very intuitive if you know what I mean...
    Slice, mux, struct, func, _. ? 😆
    Give me spring boot any day

  • @sandesh.timilsina
    @sandesh.timilsina 5 років тому +3

    Another approach for update operation:
    if item. ID ==params["id"] {
    var book Book
    _ = json.NewDecoder(r.Body).Decode(&book)
    books[i] = book

  • @admercs
    @admercs 6 років тому +1

    To configure the Go extension for VS Code to not remove unused packages, disable formatOnSave in your User Settings:
    "[go]": {
    "editor.insertSpaces": false,
    "editor.formatOnSave": false
    }

    • @dowiee2694
      @dowiee2694 5 років тому +1

      Better yet, realize that references to a package that has not been imported will be automatically imported by default.

  • @fakhruddinkhan8905
    @fakhruddinkhan8905 7 років тому

    Good video & Thank-You
    And provide the complete video of Golang

  • @alexanderviljoen6117
    @alexanderviljoen6117 5 років тому +1

    I’m loving the mern stack videos but any chance we could get a mgrn stack tutorial with Mongodb atlas?

  • @borisakelovic9930
    @borisakelovic9930 3 роки тому

    Great explaining ... Good diction, you are the man man :D thank you man, now I understand things much better

  • @Yashuu96
    @Yashuu96 4 роки тому

    Hi, Is the course you were talking about out?

  • @sravyaguntuku980
    @sravyaguntuku980 3 роки тому

    Please post the link if you made a second video on this.. Very Nice Video

  • @rei2502
    @rei2502 2 роки тому

    Thank you so much sir...this tutorial was fantastic

  • @jmarquez-cs
    @jmarquez-cs 5 років тому

    For viewers at 32:45 - line 54 can be better written as:
    `book.ID = strconv.Itoa(len(books)+1) `
    This is incrementing the length of books by 1 as a new id..