• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    BLAMIThe Go Programming Language - moderni programovaci jazyk

    Go is an open source programming environment that makes it easy to build simple, reliable, and efficient software.

    Pro vyhledavani clanku/blogu/informaci o Go v Google je potreba misto vyrazu "Go" pouzivat "Golang".

    Web:
    golang.org - ofic. www stranky projektu Go
    Go Playground - piskoviste na vyzkouseni Go
    blog.golang.org - ofic. blog projektu Go
    pkg.go.dev - vyhledavac knihoven a dokumentace
    Awesome Go - seznam oblibenych projektu, knihoven a blogu

    Literatura:
    The Way To Go: A Thorough Introduction To The Go Programming Language (Ivo Balbaert)
    Programming in Go: Creating Applications for the 21st Century (Developer's Library) (Mark Summerfield)

    Komunita:
    Slack Gophers - server pro uzivatele a skupiny okolo projektu v Go
    rozbalit záhlaví
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: ok. je možný, že fmt zaokrouhluje. to jsem nezkoušel.
    RAGNAROK
    RAGNAROK --- ---
    CUCHULAIN:
    Jsem tu funkci testoval a zaokrouhluje podle pravidel.
    Stim pow muze byt pro velke cisla problem preteceni.
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: takže třeba takhle:

    package main
    
    import (
    	"fmt"
    	"math"
    )
    
    func main() {
    	for i := 0; i < 10; i++ {
    		pow := math.Pow10(i)
    		num := math.Round(9.123456789 * pow) / pow
    		fmt.Println(num)
    	}
    }
    CUCHULAIN
    CUCHULAIN --- ---
    CUCHULAIN: teda... místo 3 má být places
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: tohle nemáš úplně zaokrouhlování, spíš Floor.

    pow := math.Pow10(3)
    a := math.Round(i * pow) / pow
    
    RAGNAROK
    RAGNAROK --- ---
    Neni neco lepsiho pro zaokrouhlovani na pozadovany misto? Jsem uklohnil tohle:
    
    func Rounder(i float64, places int) (float64, error) {
    	frmt := "%." + fmt.Sprint(places) + "f"
    	a, err := strconv.ParseFloat(fmt.Sprintf(frmt, i), 64)
    	return a, err
    }
    


    BULHI
    BULHI --- ---
    CUCHULAIN
    CUCHULAIN --- ---
    ANT_39: správně. akorát bych nechtěl potkat projekťáka, který mi tohle navrhne :-)
    ANT_39
    ANT_39 --- ---
    NYX: Podle toho, co znamena "na zaklade vstupnich parametru". Pokud to ma pro sudy cisla vracet int64 a pro lichy float64, tak ti generika nepomuzou, a vracet Interface je v zasade to ciste reseni.
    CUCHULAIN
    CUCHULAIN --- ---
    NYX: jasně, debat ohledně vyspělosti Go je hromada, každopádně interface funguje :-)
    NYX
    NYX --- ---
    RAGNAROK: Zadne ciste reseni. Reflexe, interface + runtime aserce nebo generovany kod jsou jen zpusoby jak ocurat absenci generik.
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: že bude vracet typ Interface?
    DEFILA
    DEFILA --- ---
    RAGNAROK: reflectem si vratis typ?(nevim zda je elegantnejsi reseni) https://golang.org/pkg/reflect/
    RAGNAROK
    RAGNAROK --- ---
    Jde prosim v go vytvorit funkci ktera vraci variabilni typ? Tj. na zaklade vstupnich parametru funkce vrati treba float64, int64 nebo neco jineho.
    CUCHULAIN
    CUCHULAIN --- ---
    RAGNAROK: prostě přetížená metoda pro výpis typu IPAddr
    RAGNAROK
    RAGNAROK --- ---
    Neni mi jasne jaktoze se v nasledujicim kodu pouzije metoda i kdyz neni explicitne volana.
    
    package main
    import (
    	"fmt"
    	"strconv"
    	"strings"
    )
    
    type IPAddr [4]byte
    
    func (ip IPAddr) String() string {
    	s := make([]string, len(ip))
    	for i, val := range ip {
    		s[i] = strconv.Itoa(int(val))
    	}
    	return strings.Join(s, ".")
    }
    
    func main() {
    	hosts := map[string]IPAddr{
    		"loopback":  {127, 0, 0, 1},
    		"googleDNS": {8, 8, 8, 8},
    	}
    	for name, ip := range hosts {
    		fmt.Printf("%v: %v\n", name, ip)
    	}
    }
    
    RAGNAROK
    RAGNAROK --- ---
    JOHNY_K:
    Super děkuji.
    JOHNY_K
    JOHNY_K --- ---
    package main
    
    import (
    	"fmt"
    	"strconv"
    )
    
    func factorial(x uint64) uint64 {
    	if x == 0 {
    		return 1
    	}
    	return x * factorial(x-1)
    }
    
    func main() {
    	var input string
    
    	for {
    		fmt.Print("Enter a number: ")
    		fmt.Scan(&input)
    
    		if input == "quit" {
    			break
    		}
    		i, err := strconv.ParseUint(input, 10, 64)
    		if err == nil {
    			fmt.Println(i, factorial(i))
    		} else {
    			fmt.Println("Invalid input", input)
    		}
    	}
    }
    
    JOHNY_K
    JOHNY_K --- ---
    Kliknutím sem můžete změnit nastavení reklam