GoCatFacts/main.go

62 lines
1.1 KiB
Go

package main
import (
"bufio"
"io"
"log"
"math/rand"
"net/http"
"os"
)
var (
port = "8080"
facts = []string{}
)
func main() {
// Set custom port if PORT environment variable is set
portOverride := os.Getenv("PORT")
if portOverride != "" {
port = portOverride
}
// Load it up
err := loadFacts()
if err != nil {
log.Fatalf("Error loading facts: %v", err)
}
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, getRandomFact())
})
err = http.ListenAndServe(":"+port, nil)
if err != nil {
log.Fatalf("Error loading facts: %v", err)
}
}
// loadFacts loads cat facts from a file named "facts.txt"
func loadFacts() error {
file, err := os.Open("facts.txt")
if err != nil {
return err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
facts = append(facts, scanner.Text())
}
return scanner.Err()
}
// getRandomFact returns a random cat fact from the loaded facts
func getRandomFact() string {
if len(facts) == 0 {
return "No facts available."
}
return facts[rand.Intn(len(facts))]
}