Golang types for parsing and working with General Bikeshare Feed Specification (GBFS) data, ensuring type safety and code consistency in Golang projects.
To use the gbfs-language-bindings
structs in your own project, you need to
first install this library with:
go get github.com/MobilityData/gbfs-json-schema/models/golang
Currently only version 3.0 of GBFS is supported
Using the pre-build unmarshaller
import(
"net/http"
"io"
v30systemInformation "github.com/MobilityData/gbfs-json-schema/models/golang/v3.0/system_information"
)
const url = "https://berlin.example.tier-services.io/tier_paris/gbfs/3.0/system-information";
resp, err := http.Get(url)
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
systemInformationData, unmarshalError := v30systemInformation.UnmarshalSystemInformation(body)
if unmarshalError != nil {
// NOTE: If any type mismatch occurs (ex: number instead of string) it will show up as an error
fmt.Println("Error unmarshelling:", err)
}
// systemInformationData is now typed as SystemInformation
Or you can do it manually
import(
"net/http"
"encoding/json"
"io"
v30systemInformation "github.com/MobilityData/gbfs-json-schema/models/golang/v3.0/system_information"
)
const url = "https://berlin.example.tier-services.io/tier_paris/gbfs/3.0/system-information";
resp, errHttp := http.Get(url)
defer resp.Body.Close()
body, errRead := io.ReadAll(resp.Body)
var systemInformationData v30systemInformation.SystemInformation
errMarshel := json.Unmarshal(body, &systemInformationData)
if errMarshel != nil {
// NOTE: If any type mismatch occurs (ex: number instead of string) it will show up as an error
fmt.Println("Error unmarshaling JSON:", err)
}
// systemInformationData is now typed as SystemInformation
When unmarshalling data Golang sets defaults if the required value does not exist
int, int8, int16, int32, int64: 0
uint, uint8 (byte), uint16, uint32, uint64: 0
float32, float64: 0.0
string: "" (empty string)
bool: false
Pointers, slices, maps, channels, functions, and interfaces: nil