• ú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: 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 --- ---
    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 --- ---
    RAGNAROK
    RAGNAROK --- ---
    Jde nejak elegantne udelat while loop? Je takove cviceni. Program by mel pocitat factorial a bud se zada cislo a vyplivne faktorial a nebo zadam "quit" a program by se mel ukoncit. Problem je ze input muze brat jen type uint. Takze kdyz dam quit tak to hodi error. Dole je program ktery se uknoci pri zadani 0, ale to neni uplne co chci.
    
    func factorial(x uint) uint {
    	if x == 0 {
    		return 1
    	}
    	return x * factorial(x-1)
    }
    
    func main() {
    	var input uint
    	input = 1
    	for input != 0 {
    		fmt.Print("Enter a number: ")
    		fmt.Scanf("%d", &input)
    		fmt.Println(input, factorial(input))
    	}
    }
    
    BLAMI
    BLAMI --- ---
    NYX: tyjo koukam na vendoring a to se zda byt presne tim, co hledam! Dekuju!
    NYX
    NYX --- ---
    BLAMI: neresi tohle vendoring? a na spravu zavislosti treba glide nebo nejaky ekvivalent.
    BLAMI
    BLAMI --- ---
    jak si bezne organizujete workspace? Ja jsem donedavna pouzival jednu velkou hromadu (v ne-go svete pracuju na vyvoji operacniho systemu, kterej je tak zaverzovanej, takze mi to necinilo problem...) Ale ted pracuju na dvou projektech s konfliktnimi zavislostmi (jina branch). Pouzivate vic "GOPATH workspaces" a prepinate GOPATH?
    Kliknutím sem můžete změnit nastavení reklam