Go-tour 练习 解答 - 轩 脉 刃 - 博客 园

go-tour 对于 想 ol golang 是 个 的 教程.

Tour go-tour 有 版本 web 版本, Q FQ.

提醒 下, 如果 是 后者, 这篇 章 章 import import import import import import import import import import import import import import import import import.

在 给出 我 的 go-tour

第一个循环10次:

paquet principalimportation ( "fmt")func Sqrt (x float64) float64 { z: = float64 (1) pour i: = 0; i <= 10; i ++ { z = z - (z * z - x) / (2 * z) } retour z}func main () { fmt.Println (Sqrt (2))}

第二次无限接近:

paquet principalimportation ( "fmt" "math")func Sqrt (x float64) float64 { z: = float64 (1) pour { y: = z - (z * z - x) / (2 * z) si math.Abs ​​(y - z) <1e-10 { retour y } z = y; } retour z}func main () { fmt.Println (Sqrt (2)) fmt.Println (math.Sqrt (2))}
paquet principalimportation ( "tour / wc" "cordes")func WordCount (chaîne s) map [chaîne] int { ret: = make (map [chaîne] int) arr: = chaînes.Champ pour _, val: = range arr { ret [val] ++ } retour ret}func main () { wc.Test (WordCount)}
paquet principalimporter "tour / pic"func Pic (dx, dy int) [] [] uint8 { ret: = make ([] [] uint8, dy) pour i: = 0; je <dy; i ++ { ret [i] = make ([] uint8, dx) pour j: = 0; j <dx; j ++ { ret [i] [j] = uint8 (i * j) } } retour ret}func main () { pic.Show (Pic)}
paquet principalimporter "fmt"// fibonacci est une fonction qui retourne// une fonction qui retourne un int.func fibonacci () func () int { sum1: = 0 sum2: = 1 return func () int { out: = sum1 + sum2 sum1 = sum2 sum2 = out sortir }}func main () { f: = fibonacci () pour i: = 0; i <10; i ++ { fmt.Println (f ()) }}
paquet principalimportation ( "fmt" "math / cmplx" )func Cbrt (x complex128) complexe128 { z: = complexe128 (1) pour { si y: = z- (cmplx.pow (z, 3) - x) / (3 * z * z); cmplx.Abs (y - z) <1e-10 { retour y } autre { z = y } } retour z}func main () { fmt.Println (Cbrt (2))}
paquet principalimportation ( "fmt" "math")type ErrNegativeSqrt float64func (e ErrNegativeSqrt) Erreur () chaîne { return "ne peut pas Sqrt nombre négatif:" + fmt.Sprint (float64 (e))}func Sqrt (f float64) (float64, erreur) { si f <0 { return 0, ErrNegativeSqrt (f) } z: = float64 (1) pour { y: = z - (z * z-f) / (2 * z) si math.Abs ​​(y-z) <1e-10 { retour y, néant } z = y } retour z, néant}func main () { fmt.Println (Sqrt (2)) fmt.Println (Sqrt (-2))}
paquet principalimportation ( "image" "tour / pic" "image / couleur")type Image struct { W int H int}func (auto-image) Bounds () image.Rectangle { return image.Rect (0, 0, self.W, self.H)}func (self Image) ColorModel () color.Model { return color.RGBAModel}func (self image) À (x, y int) color.Color { return color.RGBA {uint8 (x), uint8 (y), 255, 255}}func main () { m: = Image {W: 100, H: 100} pic.ShowImage (m)}
paquet principalimportation ( "io" "os" "cordes")type rot13Reader struct { rio.Reader}func (self rot13Reader) Lire (p [] octet) (n int, erreur err) { self.r.Read (p) leng: = len (p) pour i: = 0; je <leng; je ++ { commutateur{ cas p [i]> = 'a' && p [i] <'n': tomber dans cas p [i]> = 'A' && p [i] <'N': p [i] = p [i] + 13 cas p [i]> = 'n' && p [i] <= 'z': tomber dans cas p [i]> = 'N' && p [i] <= 'Z': p [i] = p [i] - 13 } } retour leng, néant}func main () { s: = strings.NewReader ( "Lbh penpxrq gur pbqr!") r: = rot13Reader {s} io.Copy (os.Stdout, & r)}
paquet principalimportation ( "tour / arbre" )// Marcher dans l'arbre t envoyer toutes les valeurs// de l'arbre au canal ch.func Marche (t * tree.Tree, ch chan int) { si t == nul { revenir } Marcher (t.Gauche, ch) ch <- t.Value Marcher (t.Right, ch)}// Same détermine si les arbres// t1 et t2 contiennent les mêmes valeurs.func Même (t1, t2 * tree.Tree) bool { ch1: = make (chan int) ch2: = make (chan int) va func () { Marcher (t1, ch1) ch1 <- 0 } () va func () { Marcher (t2, ch2) ch2 <- 0 ► () pour { t1: = <-ch1 t2: = <-ch2 si t1 == 0 && t2 == 0 { retourner vrai; } si t1 == t2 { continuer; } autre { return false; } } retourner vrai}func main () { ch: = make (chan int) va func () { Marcher (arbre.Nouveau (1), ch) ch <- 0 } () pour { t: = <-ch Si t == 0 { Pause; } println (t) } println (Same (tree.New (1), tree.New (2)))}
paquet principalimportation ( "fmt" "synchronisation")type interface Fetcher { // Récupère retourne le corps de l'URL et // une tranche d'URL trouvée sur cette page. Fetch (chaîne d'URL) (chaîne de caractères, URL [] chaîne, erreur err)}// Crawl utilise fetcher pour explorer récursivement// pages commençant par url, jusqu'à un maximum de profondeur.func Crawl (chaîne d'URL, profondeur int, récupérateur Fetcher, chaîne de chan, out chan bool) { si profondeur <= 0 { end <- true revenir } si _, ok: = crawlé [url]; D'accord { end <- true revenir } crawledMutex.Lock () analysé [url] = true crawledMutex.Unlock () body, urls, err: = fetcher.Fetch (url) si err! = nul { out <- fmt.Sprintln (err) end <- true revenir } out <- fmt.Sprintf ("trouvé:% s% q \ n", url, body) subEnd: = make (chan bool) pour _, u: = urls de plage { allez Crawl (u, depth-1, fetcher, out, subEnd) } pour i: = 0; i <len (urls); je ++ { <- subEnd } end <- true}var crawled = make (map [chaîne] bool)var crawledMutex syncMutexfunc main () { out: = make (chaîne de chan) fin: = make (chan bool) Allez Crawl ("http://golang.org/", 4, fetcher, out, end) pour { sélectionnez { cas t: = <- out: fmt.Print (t) case <- fin: revenir } }}// fakeFetcher est Fetcher qui retourne les résultats prédéfinis.tapez fakeFetcher map [chaîne] * fakeResulttype fakeResult struct { ficelle urls [] chaîne}func (f * fakeFetcher) Récupère (chaîne URL) (chaîne, chaîne [], erreur) { si res, ok: = (* f) [url]; D'accord { retour res.body, res.urls, nil } return "", nil, fmt.Errorf ("non trouvé:% s", url)}// fetcher est un fakeFetcher peuplé.var fetcher = & fakeFetcher { "http://golang.org/": & fakeResult { "Le langage de programmation Go", []chaîne{ "http://golang.org/pkg/", "http://golang.org/cmd/", }, }, "http://golang.org/pkg/": & fakeResult { "Paquets", []chaîne{ "http://golang.org/", "http://golang.org/cmd/", "http://golang.org/pkg/fmt/", "http://golang.org/pkg/os/", }, }, "http://golang.org/pkg/fmt/": ​​& fakeResult { "Package fmt", []chaîne{ "http://golang.org/", "http://golang.org/pkg/", }, }, "http://golang.org/pkg/os/": & fakeResult { "Package os", []chaîne{ "http://golang.org/", "http://golang.org/pkg/", }, },}
4.2
5
15
4
3
3
1
2
3
1
1