Go语言_函数学习篇

这里要说一下是Go函数和一些其他语言不一样的地方

1 函数格式不同


1

2

3

4

5

6

func GetMsg(i int) (r string) {

    fmt.Println(i)

    r = "hi"

    return r

 

}

func说明这个是个函数

GetMsg是函数名

(i int) 函数接收一个int参数

(r string) 函数返回一个string类型返回值

2 函数可以返回多个返回值

这点和c,php都不一样,和lua是一样的


1

2

3

4

5

6

7

func GetMsg(i int) (r string, err string) {

    fmt.Println(i)

    r = "hi"

    err = "no err"

    return r,err

 

}

3 defer的使用

defer的意思是"在函数退出时调用",特别用于对文件进行读写操作的时候,需要在open之后要调用close操作,将close操作使用defer

func ReadFile(filePath string)(){

    file.Open(filePath)

    defer file.Close()

     

    if true {

        file.Read()

    } else {

        return false

    }

 

}

这样写的意思是在file.Open后不立即调用close,当return false的时候调用file.Close().这样就有效避免了C语言中的内存泄露问题。

4 比较难理解的:panic,recover和defer

推荐看这篇博客:

http://blog.golang.org/2010/08/defer-panic-and-recover.html

defer的作用上一节说得很清楚了。

Panic和Recover我们就将他们看成是其他语言中的throw和catch

下面这个例子:

package main

 

import "fmt"

 

func main() {

    f()

    fmt.Println("Returned normally from f.")

}

 

func f() {

    defer func() {

        if r := recover(); r != nil {

            fmt.Println("Recovered in f", r)

        }

    }()

    fmt.Println("Calling g.")

    g(0)

    fmt.Println("Returned normally from g.")

}

 

func g(i int) {

    if i > 3 {

        fmt.Println("Panicking!")

        panic(fmt.Sprintf("%v", i))

    }

    defer fmt.Println("Defer in g", i)

    fmt.Println("Printing in g", i)

    g(i + 1)

}

返回了:


1

2

3

4

5

6

7

8

9

10

11

12

Calling g.

Printing in g 0

Printing in g 1

Printing in g 2

Printing in g 3

Panicking!

Defer in g 3

Defer in g 2

Defer in g 1

Defer in g 0

Recovered in f 4

Returned normally from f.

Panic抛出了信息,并且跳出函数。Recover接受到了信息,并且继续处理。

这个例子理解了基本就掌握了Recover和Panic

时间: 2024-10-29 17:58:21

Go语言_函数学习篇的相关文章

Go语言_基础学习篇

GO文件目录结构 该图是go-windows的目录结构   如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹 src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序 bin文件夹:go的每个项目生成的二进制可执行程序.windows下会生成.exe文件,linux下会生成可执行文件.Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),

C语言程序编辑学习篇 编程者说之C语言

谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是"让我欢喜让我忧."欢喜的是,C语言功能非常强大.应用广泛,一旦掌握了后,你就可以理直气壮地对他人说"我是电脑高手!",而且以后若是再自学其他语言就显得轻而易举了.忧虑的是,C语言犹如"少林武功"一般博大精深,太难学了.其实就笔者认为C语言并非是"difficult(困难)"的,只要你能理清思路,掌握它的精髓,那么自学C语言是一件非常容易且又其乐无穷的事.今天本人就与大家

Swift语言中的函数学习教程_Swift

函数是一个组织在一起语句集合,以执行特定任务.Swift 函数类似于简单 C 函数以及复杂的 Objective C 语言函数. 它使我们能够通过函数调用内部的局部和全局参数值. 像其他任何语言一样 swift 函数也遵循相同的步骤. 函数声明:它告诉编译器有关的函数的名称,返回类型和参数. 函数定义:它提供函数的实际主体. Swift 函数包含参数类型和返回类型. 函数定义在Swift 语言中函数是由 "func" 关键字来定义.当一个新定义函数时,它可能需要一个或几个值作为函数输入

拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历):说到底还是一个学习能力的问题.就这一点,从我的经历看来(曾到多家企业培训新人),培训出身的技术人员大体而言确实没有科班出身的学得更快准狠一些.学习能力这个东西其实比较虚,它并没有一个直观的考量方式,所以企业一般都会简单粗暴的使用学历.专业.项目经验来衡量.这之间反映了你的计算机知识框架是否完善.基

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.4 软件程序运行

0.4 软件程序运行 鸟哥的Linux 私房菜 基础学习篇(第三版) 鸟哥在上课时经常会开玩笑地问:"我们知道没有插电的计算机是一堆废铁,那么插了电的计算机是什么?"答案是"一堆会电人的废铁."这是因为没有软件的运行,计算机的功能就无从发挥了.就好像没有了灵魂的躯体也不过就是行尸走肉,重点在于软件/灵魂.所以下面咱们就得要了解一下"软件"是什么. 一般来说,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序.但鸟哥认为我们还是得要了

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——第1章 Linux是什么 1.1Linux是什么

第1章 Linux是什么 众所皆知,Linux的内核原型是1991年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出Linux这个操作系统?为什么他要选择386的计算b机来开发?为什么Linux的开发可以这么迅速?又为什么Linux是免费的?以及目前为何有这么多的Linux版本(distributions)呢?了解这些后,我们才能够知道为何Linux可以免除专利软件之争,并且了解到Linux为何可以同时在个人计算机与大型主机上面大放光彩.所以,在进入Linux的世界之前,

php字符串函数学习之strstr()

 这篇文章主要介绍了php字符串函数学习之strstr(),本文讲解了它的定义和用法.参数描述.提示和注释以及多个使用示例,需要的朋友可以参考下       代码如下: <?php /* 定义和用法 strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. 语法 string strstr ( string, search)   参数 描述 string 必需.规定被搜索的字符串. search 必

php字符串函数学习之substr()

 这篇文章主要介绍了php字符串函数学习之substr(),本文讲解了它的定义和用法.参数描述.提示和注释以及多个使用示例 ,需要的朋友可以参考下     <?php /* 定义和用法 substr() 函数返回提取的子字符串, 或者在失败时返回 FALSE. 语法 substr(string,start,length) 参数 描述 string 必需.规定要返回其中一部分的字符串. start 必需.规定在字符串的何处开始. 非负数 - 从 string 的 start 位置开始,从 0 开始

《鸟哥的Linux 私房菜 基础学习篇(第三版)》——1.4 重点回顾

1.4 重点回顾 鸟哥的Linux 私房菜 基础学习篇(第三版) ◆ 计算机主要以二进制作为单位,而目前常用的磁盘容量单位为B,其单位换算为1B = 8bit,其他的以1024为其倍数,如1GB=1024MB等. ◆ 操作系统(Operation System)主要用于管理与驱动硬件,因此必须要能够管理内存.管理设备.负责进程管理以及系统调用等.因此,只要能够让硬件准备妥当(Ready)的情况,就是一个很棒的操作系统了. ◆ 操作系统重点仅在驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或