go的入坑之路-面向对象

2022-07-03  本文已影响0人  幻影翔

结构

结构的创建

root := TreeNode{value:3}
root.left = &TreeNode{}
root.right = &TreeNode{5,nil,nil}
root.right.left = new(TreeNode)
func createTreeNode(value int) *TreeNode {
    return &TreeNode{value: value}
}

root.left.right = createTreeNode(6)
// 为结构定义方法
func (node TreeNode) print() {
    fmt.Println(node.value)
}
// 使用指针作为方法接受者
func (node *TreeNode) setValue(value int) {
    node.value = value
}

值接受者 VS 指针接受者

封装

接口

duck typing

duck typing

go语言的duck typing

接口的定义

type Retriever interface {
    Get(url string) string
}

func download(r Retriever) string {
    return r.Get("http://www.imooc.com")
}

接口变量里面有什么

接口的组合

type RetrieverPoster interface {
    Retriever
    Poster
}

函数式编程

资源管理和出错管理

defer调用

func tryDefer() {
    for i :=0; i < 100; i++ {
        defer fmt.Println(i)
        if i == 30 {
            panic("printed too many")
        }
    }
}

错误处理

func tryError(filename string) {
    file, err := os.OpenFile(filename, os.O_EXCL|os.O_CREATE,0666)
    if err != nil {
        if pathError, ok := err.(*os.PathError); !ok {
            panic(err)
        } else {
            fmt.Printf("%s,%s,%s\n",
                pathError.Op,
                pathError.Path,
                pathError.Err)
        }
        return
    }
    defer file.Close()
}
上一篇 下一篇

猜你喜欢

热点阅读