• 0 Posts
  • 4 Comments
Joined 1 year ago
cake
Cake day: June 17th, 2023

help-circle
  • I can imagine how…exhausting these discussions were 😅

    Apart from the more synthetic examples and the obvious things like iterating custom containers - I understand your argument that this is not a every day use case but there are certainly some use cases - there are things like:

    • iterating a bufio.Scanner
    • iterating SQL results
    • streaming chunked HTTP results

    That can benefit from the range-over-func approach.

    Furthermore there’s another “class” of tasks that are quite a good fit: generators 😍 Think of an infinite slice of random numbers or Fibonacci numbers or prime numbers…all of this can be expressed as a function you can iterate and “just stop” as soon as you have enough.

    Probably this gives you an idea what else the whole experiment is good for 😉

    Edit: there’s for instance a Python library letting you generate the holidays of a state for the next 1000 years based on some algorithm without having the data pre-calculated/stored anywhere but you can iterate/filter/… whatever you want



  • Haven’t copied it yet to an editor so just a few things:

    • naming convention in Go is camelCase not snake_case
    • prefer to accept io.Reader over opening files in every function. Improves testability but also is best practice
    • return errors whenever possible instead of just logging them or do something about if you can (like creating a file if it doesn’t exist yet if it makes sense) - don’t use panic if you don’t have to! Panics are only a last resort if there’s no way to handle the error gracefully, think: compile a regex as a global variable that you need and that’s static, the expression won’t change magically so there’s no way the program can continue without a valid expression
    • move logic to some package (== sub-directory with a package name != main) and have at least one function with a PascalCase name to call from you main package. Functions starting with a capital letter are public whereas functions starting with a lowercase letter are private - not by convention but enforced by the compiler!

    For a more thorough review I’ve to get to a computer but probably someone else has some more tips for you :)

    Also check out the docs for testing https://pkg.go.dev/testing should hopefully get you started