首页 > 代码库 > exercise.tour.go google的go官方教程答案
exercise.tour.go google的go官方教程答案
/* Exercise: Loops and Functions #43 */package main import ( "fmt" "math") func Sqrt(x float64) float64 { z := float64(2.) s := float64(0) for { z = z - (z*z - x)/(2*z) if math.Abs(s-z) < 1e-15 { break } s = z } return s} func main() { fmt.Println(Sqrt(2)) fmt.Println(math.Sqrt(2))} /******************************************************************************************************/ /* Exercise: Maps #44 */package main import ( "tour/wc" "strings") func WordCount(s string) map[string]int { ss := strings.Fields(s) num := len(ss) ret := make(map[string]int) for i := 0; i < num; i++ { (ret[ss[i]])++ } return ret} func main() { wc.Test(WordCount)} /******************************************************************************************************/ /* Exercise: Slices #45 */package main import "tour/pic" func Pic(dx, dy int) [][]uint8 { ret := make([][]uint8, dy) for i := 0; i < dy; i++ { ret[i] = make([]uint8, dx) for j := 0; j < dx; j++ { ret[i][j] = uint8(i^j+(i+j)/2) } } return ret} func main() { pic.Show(Pic)} /******************************************************************************************************/ /* Exercise: Fibonacci closure #46 */package main import "fmt" // fibonacci is a function that returns// a function that returns an int.func fibonacci() func() int { x := 0 y := 1 return func() int { x,y = y,x+y return x }} func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) }} /******************************************************************************************************/ /* Advanced Exercise: Complex cube roots #47 */package main import ( "fmt" "math/cmplx") func Cbrt(x complex128) complex128 { z := complex128(2) s := complex128(0) for { z = z - (cmplx.Pow(z,3) - x)/(3 * (z * z)) if cmplx.Abs(s-z) < 1e-17 { break } s = z } return z} func main() { fmt.Println(Cbrt(2))} /******************************************************************************************************/ /* Exercise: Errors #57 */package main import ( "fmt") type ErrNegativeSqrt float64 func (e ErrNegativeSqrt) Error() string { return fmt.Sprintf("cannot Sqrt negativ number: %g", float64(e))} func Sqrt(f float64) (float64, error) { if f < 0 { return 0, ErrNegativeSqrt(f) } return 0, nil} func main() { fmt.Println(Sqrt(2)) fmt.Println(Sqrt(-2))} /******************************************************************************************************/ /* Exercise: Images #58 */package main import ( "image" "tour/pic" "image/color") type Image struct{ Width, Height int colr uint8 } func (r *Image) Bounds() image.Rectangle { return image.Rect(0, 0, r.Width, r.Height)} func (r *Image) ColorModel() color.Model { return color.RGBAModel} func (r *Image) At(x, y int) color.Color { return color.RGBA{r.colr+uint8(x), r.colr+uint8(y), 255, 255}} func main() { m := Image{100, 100, 128} pic.ShowImage(&m)} /******************************************************************************************************//* Exercise: Rot13 Reader #59: ‘You cracked the code!‘ */package main import ( "io" "os" "strings") type rot13Reader struct { r io.Reader} func (rot *rot13Reader) Read(p []byte) (n int, err error) { n,err = rot.r.Read(p) for i := 0; i < len(p); i++ { if (p[i] >= ‘A‘ && p[i] < ‘N‘) || (p[i] >=‘a‘ && p[i] < ‘n‘) { p[i] += 13 } else if (p[i] > ‘M‘ && p[i] <= ‘Z‘) || (p[i] > ‘m‘ && p[i] <= ‘z‘){ p[i] -= 13 } } return} func main() { s := strings.NewReader( "Lbh penpxrq gur pbqr!") r := rot13Reader{s} io.Copy(os.Stdout, &r)} /******************************************************************************************************/ /* Exercise: Equivalent Binary Trees #67 */package main import ( "tour/tree" "fmt") // Walk walks the tree t sending all values// from the tree to the channel ch.func Walk(t *tree.Tree, ch chan int) { _walk(t, ch) close(ch) } func _walk(t *tree.Tree, ch chan int) { if t != nil { _walk(t.Left, ch) ch <- t.Value _walk(t.Right, ch) }} // Same determines whether the trees// t1 and t2 contain the same values.func Same(t1, t2 *tree.Tree) bool { ch1 := make(chan int) ch2 := make(chan int) go Walk(t1, ch1) go Walk(t2, ch2) for i := range ch1 { if i != <- ch2 { return false } } return true } func main() { //tree.New(2) ch := make(chan int) go Walk(tree.New(1), ch) for v := range ch { fmt.Print(v) } fmt.Println(Same(tree.New(1), tree.New(1))) fmt.Println(Same(tree.New(1), tree.New(2)))} /******************************************************************************************************/ /* Exercise: Web Crawler #69 */package main import ( "fmt") type Fetcher interface { // Fetch returns the body of URL and // a slice of URLs found on that page. Fetch(url string) (body string, urls []string, err error)} var store map[string]bool func Krawl(url string, fetcher Fetcher, Urls chan []string) { body, urls, err := fetcher.Fetch(url) if err != nil { fmt.Println(err) } else { fmt.Printf("found: %s %q\n", url, body) } Urls <- urls} func Crawl(url string, depth int, fetcher Fetcher) { Urls := make(chan []string) go Krawl(url, fetcher, Urls) band := 1 store[url] = true // init for level 0 done for i := 0; i < depth; i++ { for band > 0 { band-- next := <- Urls for _, url := range next { if _, done := store[url] ; !done { store[url] = true band++ go Krawl(url, fetcher, Urls) } } } } return} func main() { store = make(map[string]bool) Crawl("http://golang.org/", 4, fetcher)} // fakeFetcher is Fetcher that returns canned results.type fakeFetcher map[string]*fakeResult type fakeResult struct { body string urls []string} func (f *fakeFetcher) Fetch(url string) (string, []string, error) { if res, ok := (*f)[url]; ok { return res.body, res.urls, nil } return "", nil, fmt.Errorf("not found: %s", url)} // fetcher is a populated fakeFetcher.var fetcher = &fakeFetcher{ "http://golang.org/": &fakeResult{ "The Go Programming Language", []string{ "http://golang.org/pkg/", "http://golang.org/cmd/", }, }, "http://golang.org/pkg/": &fakeResult{ "Packages", []string{ "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", []string{ "http://golang.org/", "http://golang.org/pkg/", }, }, "http://golang.org/pkg/os/": &fakeResult{ "Package os", []string{ "http://golang.org/", "http://golang.org/pkg/", }, },}
exercise.tour.go google的go官方教程答案
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。