Creating Api with Golang
sqlc
please check https://github.com/sqlc-dev/sqlc
Project demonstrates how to create Go Backend project using
chi
for Routersqlc
for compiling sql
into type safe codegoose
to handle the database migrationscreate .env
file at root
PORT=8080
POSTGRESQL=postgres://username:password@localhost:5433/testGoApi
GOOSE_DRIVER=postgres
GOOSE_DBSTRING=${POSTGRESQL}
GOOSE_MIGRATION_DIR=./internal/db/migrations
ENVIRONMENT=dev
JWT_SECRET_KEY=SomeSecretKeyHere
TOKEN_EXPIRE=10 # in minutes
make run
make lint
to check for linter bugsmake migrate-create n=name-of-migration
it will create new file in internal/db/migrations
with the correct name edit the up and down statements.make migrate-up
.make migrate-down
please remove the associated file with it as well.atomic
operations.Install golangci-lint
Link recommended way is to put it in the golang binary directory
Everything should have corresponding test suites except the repository for now
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin VERSION_NUMBER_HERE
add the $(go env GOPATH)
to PATH
To generate Swagger documentation for the API, first, you need to install swaggo CLI:
go install github.com/swaggo/swag/cmd/[email protected]
Add annotations to the controllers. Here's an example:
// HandleCreateUser creates a new user.
// @Summary Create a new user
// @Description Creates a new user with the provided details.
// @Tags user
// @Param username query string true "Username of the new user"
// @Param email query string true "Email address of the new user"
// @Param password query string true "Password of the new user"
// @Success 201 {object} UserDTO "User created successfully"
// @Failure 400 {object} ErrorResponse "Invalid request format"
// @Failure 500 {object} ErrorResponse "Internal server error"
// @Router /api/v1/users [post]
func HandleCreateUser(w http.ResponseWriter, r *http.Request) {
// Handler logic to create a new user
}
Once the annotations are added, you can generate Swagger documentation by running:
make gen-swagger
After running the command, you can access the documentation of your API by running the project and visiting: http://localhost:8080/swagger/index.html
"go.lintTool" : "golangci-lint",
"go.lintFlags": [
"--fast"
]