go 笔记

简介: go 笔记deferdefer 的参数绑定是在 defer 时,而不是在执行时,和 go 是一样的。for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i)}会输出4 3 2 1 0make && newmake 只能应用于 slice,map,channel,返回的不是指针。

go 笔记

defer

defer 的参数绑定是在 defer 时,而不是在执行时,和 go 是一样的。

for i := 0; i < 5; i++ {
    defer fmt.Printf("%d ", i)
}

会输出4 3 2 1 0

make && new

make 只能应用于 slice,map,channel,返回的不是指针。
以 slice 为例,一个 slice 是引用 copy,但是每个 slice 结构体战三个字。

channel

range 用法,以及如何idiomatic的使用 closure

func handle(queue chan *Request) {
    for r := range queue {
        process(r)
    }
}

func Serve(queue chan *Request) {
    for req := range queue {
        req := req // Create new instance of req for the goroutine.
        sem <- 1
        go func() {
            process(req)
            <-sem
        }()
    }
}

panic

panic可以用作复杂的错误处理,但是如果是用作错误处理,不要把 panic 暴露到包外。

Useful though this pattern is, it should be used only within a package. Parse turns its internal panic calls into error values; it does not expose panics to its client. That is a good rule to follow.


// error is a method of *Regexp that reports parsing errors by
// panicking with an Error.
func (regexp *Regexp) error(err string) {
    panic(Error(err))
}

// Compile returns a parsed representation of the regular expression.
func Compile(str string) (regexp *Regexp, err error) {
    regexp = new(Regexp)
    // doParse will panic if there is a parse error.
    defer func() {
        if e := recover(); e != nil {
            regexp = nil    // Clear return value.
            err = e.(Error) // Will re-panic if not a parse error.
        }
    }()
    return regexp.doParse(str), nil
}
目录
相关文章
|
18天前
|
SQL 前端开发 Go
编程笔记 GOLANG基础 001 为什么要学习Go语言
编程笔记 GOLANG基础 001 为什么要学习Go语言
|
4天前
|
存储 关系型数据库 MySQL
|
4天前
|
JSON 自然语言处理 网络协议
【字节跳动青训营】后端笔记整理-2 | Go实践记录:猜谜游戏,在线词典,Socks5代理服务器
猜数字游戏也算是入门一门编程语言必写的程序了。通过这个程序,我们可以熟悉Go语言中的输入输出、流程控制与随机函数的调用。
18 2
|
4天前
|
存储 JSON Java
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(三)
在 Go 语言里,符合语言习惯的做法是使用一个单独的返回值来传递错误信息。
22 0
|
4天前
|
存储 Go C++
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(二)
Go 语言中的复合数据类型包括数组、切片(slice)、映射(map)和结构体(struct)。
28 0
|
5天前
|
Java 编译器 Go
【字节跳动青训营】后端笔记整理-1 | Go语言入门指南:基础语法和常用特性解析(一)
本文主要梳理自第六届字节跳动青训营(后端组)-Go语言原理与实践第一节(王克纯老师主讲)。
27 1
|
5天前
|
IDE 测试技术 Go
【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试
用于验证已经修改或新增功能后,软件的既有功能是否受到影响。
54 2
|
18天前
|
Go 开发工具 git
编程笔记 GOLANG基础 003 Go语言开发环境搭建
编程笔记 GOLANG基础 003 Go语言开发环境搭建
|
18天前
|
存储 Java Go
编程笔记 GOLANG基础 002 Go语言简介
编程笔记 GOLANG基础 002 Go语言简介
|
18天前
|
存储 编译器 测试技术
【3w字吐血总结 | 新手必看】全网最详细Go笔记
【3w字吐血总结 | 新手必看】全网最详细Go笔记
55 0