Elixir doesn’t have an entrypoint like Go where it runs the main function when the executable is run. In Elixir’s case, you implement the Application behavior in your module and add it to the application function in your mix.exs file.
Below is an example of how this works with an HTTP server such as Bandit.
# lib/bandit_server.ex
defmodule Example.BanditServer do
use Application
def start(_type, _args) do
children = [
{Bandit, plug: MyRouter, scheme: :http, port: 4001}
]
opts = [strategy: :one_for_one, name: MyApp.Supervisor]
Supervisor.start_link(children, opts)
end
end
# mix.exs
defmodule Example.MixProject do
use Mix.Project
...
def application do
[
mod: {Example.BanditServer, []}
]
end
end
When you run iex -S mix now, it will start the Bandit HTTP server right away. This is in contrast to running iex -S mix and then manually calling and managing the pid of Example.BanditServer.start to start your application.