Structure and performance questions from a Fortran programmer: functions, global variables, array allocations, input files, and structs

I’m a physicist used to using Fortran90 for number crunching and Python for plotting and glue code. I’m learning Julia because of its ease of use, promised efficiency, and excellent math support. That said, there’s some habits and methods I’ve learned from Fortran programming that I’m unsure how to translate to Julia, as well as some aspects of Julia whose practical implications I don’t quite understand. So, without further ado, here goes:

  1. Do I need a main()function? Fortran is not like C and thus has no main() function, but I don’t know how far to take the “put everything in a function” recommendation from the manual.
  2. Relatedly, for global variables, is it sufficient to avoid the performance hit if they’re inside a main() function, and/or if they’re declared const or given a fixed type? Fortran is statically typed and compiled in advance, so this was never an issue there.
  3. If I know my array sizes in advance (or at least can get them based off of input parameters), do I gain any benefit from pre-allocating/initializing them, eg, a = zeros(3,3,2)? In Fortran this is mandatory, and even if you’re using allocatable arrays, they still need to be explicitly allocated with a fixed size, type, and dimension before usage, as far as I can tell. I know that the StaticArrays package exists, but that’s recommended for small arrays (< 100 elements) and I can have array sizes easily top 1 million elements.
  4. A standard method of modifying a Fortran program without changing the source code and recompiling it is to provide an input file of parameters, which it then uses to adjust behavior and control flow. Is this a good practice in Julia, or is it better to simply modify the script?
  5. Other than conveniently bundling a bunch of parameters to pass to a function, what is the point of structs? I believe they are a feature of more recent Fortran versions, but as they never appeared in any of the Fotran90 code I’ve written or used, I’m completely unfamiliar with them. They seem to get regular mention as a means of improving performance, but I don’t understand how.

I know this is a lot of questions, so don’t feel like you need to answer all of them at once! If you have insight on any of things I’ve asked above, I’d greatly appreciate it. I want to learn good Julia programming habits from the outset, even if that means letting go of some of my old Fortran ways. Thanks in advance!