Go 语言教程实战

本文介绍了如何在国内环境下安装Go语言在线教程,包括解决golang.org被墙的问题,提供替代教程链接,并详细给出了几个练习,如斐波纳契闭包、错误处理和Map的解答。
摘要由CSDN通过智能技术生成

安装在线教程

由于墙,golang.org 国内无法访问,其在线教程也一样     tutorial.golang.org      http://go-tour-zh.appspot.com/


可以在本机运行,

先安装Go 编译器   http://code.google.com/p/go/downloads/list


然后安装教程

go get code.google.com/p/go-tour/gotour

或者中文的

go get bitbucket.org/mikespook/go-tour-zh/gotour

最后执行安装产生的 gotour 执行文件,即可在http://localhost:3999 打开教程。

一些练习的答案


#46  练习:斐波纳契闭包

package main

import "fmt"

// fibonacci 函数会返回一个返回 int 的函数。
func fibonacci() func() int {
	var a int = 1
	var b int = 1
	
	return func() int {
		c := a+b
		a = b
		b = c
		return c
	}
}

func main() {
	f := fibonacci()
	for i := 0; i < 10; i++ {
		fmt.Println(f())
	}
}


#69  练习:等价二叉树

package main

import (
	"bitbucket.org/mikespook/go-tour-zh/tree"
	"fmt"
)

/*
type Tree struct {
	Left  *Tree
	Value int
	Right *Tree
}
*/

// Walk 步进 tree t 将所有的值从 tree 发送到 channel ch。
func Walk(t *tree.Tree, ch chan int) {
	if t != nil {
		Walk(t.Left, ch)
		ch <- t.Value
		Walk(t.Right, ch)
	}
}

// Same 检测树 t1 和 t2 是否含有相同的值。
func Same(t1, t2 *tree.Tree) bool {
	ch1 := make(chan int, 10)
	go Walk(t1, ch1)

	ch2 := make(chan int, 10)
	go Walk(t2, ch2)

	for i := 0; i < 10; i++ {
		if <-ch1 != <-ch2 {
			return false
		}
	}
	return true
}

func main() {
	fmt.Println(Same(tree.New(1), tree.New(1)))
}


#57  练习:错误

package main

import (
	"fmt"
)


type ErrNegativeSqrt float64

func (e ErrNegativeSqrt) Error() string {
	return fmt.Sprintf("cannot Sqrt negative number: %f",  e)
}

func Sqrt(f float64) (float64, error) {

	if f < 0 {
		return 0, ErrNegativeSqrt(f)
	}
	
	x := f
	for i := 0; i < 10; i++ {
		x = (x + f/x) / 2
	}
	return x, nil



}

func main() {
	fmt.Println(Sqrt(2))
	fmt.Println(Sqrt(-2))
}

#44  练习:Map


package main

import (
	//"fmt"
	"strings"
	"bitbucket.org/mikespook/go-tour-zh/wc"
)

func WordCount(s string) map[string]int {
	result := map[string]int {}
	f := strings.Fields(s)
	for _, v := range f {
		result[v] += 1	
	}
	return result
}

func main() {
	wc.Test(WordCount)
}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值