mirror of
https://github.com/idanoo/GoCatFacts
synced 2025-07-01 14:52:15 +00:00
62 lines
1.1 KiB
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))]
|
|
}
|