Outils pour utilisateurs

Outils du site


tech:notes_go_golang
,

Notes go golang

Tuto

Voir tuto Api :

Début du tuto

restapi.go

package main
 
import(
//	"encoding/json"
	"log"
	"net/http"
//	"math/rand"
//	"strconv"
	"github.com/gorilla/mux"
)
 
type Book struct {
	ID string `json:"id"`
	Isbn string `json:"isbn"`
	Title string `json:"title"`
	Author *Author `json:"author"`
}
 
type Author struct {
	Firstname string `json:"fistname"`
	Lastname string `json:"lastname"`
}
 
func getBooks(w http.ResponseWriter, r *http.Request) {
 
}
 
func getBook(w http.ResponseWriter, r *http.Request) {
}
func createBook(w http.ResponseWriter, r *http.Request) {
}
func updateBook(w http.ResponseWriter, r *http.Request) {
}
func deleteBook(w http.ResponseWriter, r *http.Request) {
}
 
func main() {
	r := mux.NewRouter()
 
	r.HandleFunc("/api/books", getBooks).Methods("GET")
	r.HandleFunc("/api/books/{id}", getBook).Methods("GET")
	r.HandleFunc("/api/books", createBook).Methods("POST")
	r.HandleFunc("/api/books/{id}", updateBook).Methods("PUT")
	r.HandleFunc("/api/books/{id}", deleteBook).Methods("DELETE")
 
	log.Fatal(http.ListenAndServe(":8085", r))
}

Install & config

sudo apt-get install -t jessie-backports golang
mkdir -p $HOME/go/bin
#export GOPATH=$HOME/go
 
# go install plop.go
export GOBIN="$HOME/go/bin"
 
export PATH="$PATH:~/.local/bin/"
export GOHOME="$HOME/go"
export GO111MODULE=on
export PATH="$PATH:$HOME/go/bin/"

~/.bashrc

export GOPATH=$HOME/work
export GOBIN=$HOME/work/bin
export PATH=$PATH:$HOME/work/bin

Exemple avec Terraform

Voir aussi OpenTofu

go get -u github.com/hashicorp/terraform

Ce qui revient à :

mkdir -p ~/work/src/github.com/hashicorp/
cd ~/work/src/github.com/hashicorp/
git clone https://github.com/hashicorp/terraform

Puis

cd ~/work/src/github.com/hashicorp/terraform
cat README.md
make updatedeps
make
go install

Dev bonnes pratiques

Language

Types

Lancer des commandes systèmes

Pb voir : http://stackoverflow.com/questions/23723955/how-can-i-pass-a-slice-as-a-variadic-input

exec.go

// http://www.darrencoxall.com/golang/executing-commands-in-go/
 
package main
 
import (
        "fmt"
        "os"
        "os/exec"
        "log"
        //"flag"
        //"strings"
)
 
func main() {
        s := os.Args[1:]
        fmt.Println(s)
        //cmd := exec.Command(s[:])             // Error !
        cmd := exec.Command(s[0], s[1], s[2])
        //out, err := cmd.Output()              // Whithout Stdout
        out, err := cmd.CombinedOutput()        // Whith StdErr
        if err != nil {
                fmt.Println("Error")
                fmt.Printf("%s", out)
                log.Fatal(err)
        }
        fmt.Printf("%s", out)
}
go run exec.go ls /tmp/ /

Tests unitaire

fact.go

package main

func fact(x int) int {
        if (x == 0) || (x == 1) {
                return 1
        }
        return x * fact(x-1)
}

fact_test.go

package main

import "testing"

func TestFact(t *testing.T) {
        if fact(0) != 1 {
                //t.Fail() // Erreur sans message
                t.Error("Err with 0")
        }
        if fact(1) != 1 {
                t.Error("Err with 1")
        }
        if fact(4) != 24 {
                t.Error("Err with 4")
        }
}
go test fact.go fact_test.go
ok      command-line-arguments  0.001s

Outils

Gosh un shell interactif

IDE

Vscode / Codium

LiteIDE X

snap install liteide-tpaw

IntelliJ IDEA

Code qualité

Crosscompil

OS et architectures supportées

go tool dist list
env GOOS=android GOARCH=arm64 go build -o /arm64bins/app

Pour voir la liste des architectures supportée

go tool dist list

Tour

export GO111MODULE=on
export GOPATH=$HOME/code/go
go install golang.org/x/website/tour@latest
go get golang.org/x/website/tour@latest
~/code/go/bin/tour

ou : https://go.dev/tour/welcome/1

Debuger

Jupyter Notebook

Ordiphone / Android / téléphone mobile

tech/notes_go_golang.txt · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki