-
Go 没有类。不过你可以为结构体类型定义方法。方法就是一类带特殊的 接收者 参数的函数。func (v Vertex) Abs() float64 {
-
指针接收者,1.方法能够修改其接收者指向的值。2.这样可以避免在每次调用方法时复制该值。
-
接口类型 是由一组方法签名定义的集合。接口类型的变量可以保存任何实现了这些方法的值。空的接口 type AnyType interface {} 可以任何类型的变量。
-
接口与隐式实现,没有语法的显式声明,例如C++会显式表示继承那些接口。
-
在内部,接口值可以看做包含值和具体类型的元组。fmt.Printf("(%v, %T)\n", i, i)
-
类型断言 t, ok := i.(T)
-
类型的选择 switch v := i.(type) {
-
goroutine go
-
ch := make(chan int) 。 a := make([]int, 5) make 函数会分配一个元素为零值的数组并返回一个引用了它的切片。m = make(map[string]Vertex)。
-
带缓冲的信道 ch := make(chan int, 100)
-
信道的range和close。
-
select case语句可以使go routine等待多个通信操作。
-
tick := time.Tick(100 * time.Millisecond) select {
case <-tick:
fmt.Println("tick.") -
等价二叉树查找
package main import "golang.org/x/tour/tree" import "fmt" // Walk 步进 tree t 将所有的值从 tree 发送到 channel ch。 func Walk(t *tree.Tree, ch chan int) { if t.Left != nil { Walk(t.Left, ch) } ch <- t.Value if t.Right != nil { Walk(t.Right, ch) } } func WalkEnd(t *tree.Tree, ch chan int) { Walk(t,ch) close(ch) } // Same 检测树 t1 和 t2 是否含有相同的值。 func Same(t1, t2 *tree.Tree) bool { c1,c2 := make(chan int),make(chan int) go WalkEnd(t1, c1) go WalkEnd(t2, c2) for { v1,k1 := <-c1 v2,k2 := <-c2 fmt.Println(v1,v2) if v1 != v2 || k1 != k2 { return false } if k1 == k2 && k1== false { return true } } return true } func main() { //ch := make(chan int) /* go func() { Walk(tree.New(1), ch) close(ch) }() for v := range ch { fmt.Println(v) }*/ fmt.Println(Same(tree.New(1), tree.New(1))) fmt.Println(Same(tree.New(1), tree.New(2))) }
-
Go 标准库中提供了 sync.Mutex 互斥锁类型及其两个方法:Lock和Unlock
go-lang快速入门 二
猜你喜欢
转载自blog.csdn.net/huafable007/article/details/101568912
今日推荐
周排行