Go学习笔记(五)

栏目: Go · 发布时间: 4年前

内容简介:本系列文章会参照函数是实现一些功能的代码块,可以提高应用的模块性和复用率。题外话,React的组件化也是为了代码复用,组件可以看作一个函数,Props是外部传参,state是函数内部状态或者内部变量。

本系列文章会参照 C语言中文网 的《Go语言教程》来写自己的心得体会

函数是实现一些功能的代码块,可以提高应用的模块性和复用率。

题外话,React的组件化也是为了代码复用,组件可以看作一个函数,Props是外部传参,state是函数内部状态或者内部变量。

普通函数需要先声明才能调用。同一个包内,函数不能同名。支持多返回值

包(package)是 Go 源码的一种组织方式,一个包可以认为是一个文件夹,在后续章节中将会详细讲解包的概念。

Go 语言的函数声明以 func 标识,后面紧接着函数名、参数列表、返回参数列表及函数体
func foo( a int, b string ){
    ... // 函数体
}
复制代码

参数列表中,如有多个参数变量,则以逗号分隔;如果相邻变量是同类型,则可以将类型省略

func add(a, b int) int {
    return a + b
}
// 函数可以有多个返回值
conn, err := connectToNetwork()
复制代码

闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。

Go语言支持可变参数特性,函数声明和调用时没有固定数量的参数.

func 函数名(固定参数列表, v … T)(返回参数列表){
    函数体
}
复制代码

Go 语言的 defer 语句会将其后面跟随的语句进行延迟处理。在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。压栈出栈的原因。

package main
import (
    "fmt"
)
func main() {
    fmt.Println("defer begin")
    // 将defer放入延迟调用栈
    defer fmt.Println(1)
    defer fmt.Println(2)
    // 最后一个放入, 位于栈顶, 最先调用
    defer fmt.Println(3)
    fmt.Println("defer end")
}
复制代码

Go语言函数处理思想

  • 一个可能造成错误的函数,需要返回值中返回一个错误接口(error)。如果调用是成功的,错误接口将返回 nil,否则返回错误
  • 在函数调用后需要检查错误,如果发生错误,进行必要的错误处理。

net.Dial() 是 Go 语言系统包 net 即中的一个函数,一般用于创建一个 Socket 连接。net.Dial 拥有两个返回值,即 Conn 和 error

func Dial(network, address string) (Conn, error) {
    var d Dialer
    return d.Dial(network, address)
}
复制代码

手动触发宕机

Go 语言可以在程序中手动触发宕机,让程序崩溃,这样开发者可以及时地发现错误,同时减少可能的损失

package main
func main() {
    panic("crash")
}

// 程序崩溃,输出内容如下
panic: crash

goroutine 1 [running]:
main.main()
    F:/src/tester/main.go:5 +0x6b

复制代码

Go语言提供宕机恢复功能,防止程序崩溃。Go 没有异常系统,其使用 panic 触发宕机类似于其他语言的抛出异常,那么 recover 的宕机恢复机制就对应 try/catch 机制


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Deep Learning

Deep Learning

Ian Goodfellow、Yoshua Bengio、Aaron Courville / The MIT Press / 2016-11-11 / USD 72.00

"Written by three experts in the field, Deep Learning is the only comprehensive book on the subject." -- Elon Musk, co-chair of OpenAI; co-founder and CEO of Tesla and SpaceX Deep learning is a for......一起来看看 《Deep Learning》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具