zaterdag 11 februari 2012

Kleine webserver met html template

Na wat voorbeelden te zoeken en deze voorbeelden aan te passen naar werkende code. Heb ik nu een kleine webserver opgezet die html toont met behulp van Go's template package. Ik vermoed dat mijn template package wat verouderd is en dat daardoor veel verschillende voorbeelden niet werkte. Ik heb hiervoor de google go versie gebruikt die je in men eerdere blog posts kan terugvinden.

Hieronder staat de code voor mijn main.go

// Webserver project main.go
package main
// Importing packages
import (
    "fmt"
    "http"
    "template"
)
// Data structure
type foo struct{
    Title string
    Header1 string
}
// In the Handler
func sayHello(w http.ResponseWriter, r *http.Request) {
    //creating our parser
    t, _ := template.ParseFile("./h1.html", nil)
    //creating our data struct
    f := &foo{Title:"NewTitle",Header1:"Header1"}
    //parsing our template and data struct
    t.Execute(f, w)
}
// Our main
func main(){
    fmt.Printf("Starting http Server ... \n")
    http.Handle("/", http.HandlerFunc(sayHello))
    err := http.ListenAndServe("0.0.0.0:8080", nil)
    if err != nil {
       fmt.Printf("ListenAndServe Error :" + err.String())
    }
}

Hieronder staat de code voor h1.html

<!DOCTYPE html>
<html>
  <head>
    <title>{.section Title}{@}{.or}SomeoneForgotTheTitle{.end}</title>
  </head>
  <body>
    <h1>{Header1}</h1>
  </body>
</html>
    

dinsdag 7 februari 2012

Meer interesante videos over Google Go

maandag 6 februari 2012

Waarom Go programmeren?

donderdag 2 februari 2012

Nabootsen van de while loop

Go heeft maar 1 soort lus en dat is de 'for', we kunnen echter het gedrag van een 'for' zo beinvloeden dat het een while lus word.

    //normal loop
    for i := 10; i >= 0; i--{
        fmt.Printf("Normal loop : %d\n",i)
    }
    
    //while loop
    var i int = 10
    for {
        fmt.Printf("While loop : %d\n", i)
        if i == 0 {
            break;
        }
        i--
    }

We kunnen ook gebruik maken van het continue; statement, dit stelt ons in staat door te gaan met onze lus en de overige statements over te slaan.


    //continue
    for i:=30; i>=0; i--{
        if i%5 !=0{
            continue;
        }
        fmt.Printf("Did not continue : %d\n",i)

strconv.FloatSize werkt niet in Google Go?!

    fmt.Printf("The size of floats is : %d\n", strconv.FloatSize);
    fmt.Printf("The size of ints is: %d\n", strconv.IntSize);

Bij het volgen van een voorbeeld uit het boek dat ik vermelde in mijn vorige blog post ben ik een fout tegen gekomen. Ik krijg volgende foutmelding :

    main.go:16: undefined: strconv.FloatSize


Ongedefinieerde functie, variabele? IntSize werkt wel. Na wat Google zoekwerk vond ik IntSize gedefinieerd als constante op het strconv package, maar geen FloatSize. Dus ik vermoed dat in de oude versie er wel degelijk een FloatSize aanwezig was maar dat deze er is uitgehaald.