`

Go语言函数

 
阅读更多

函数是Go语言里面的核心设计,它通过func来声明,函数可以有一个或者多个参数,每个参数后面都要带有类型,通过“,”分隔,可以返回多个值,函数的格式为:

func funcName(input1 type1, input2 type2)(output1 type1, output2 type2){
    //处理逻辑代码
    //返回值
    return value1, value2
}

返回值声明了两个变量output1和output2,如果不想声明也可以,但是要保留两个类型声明

如果只有一个返回值且不声明返回值变量,可以省略“包括返回值”的括号 

如果没有返回值就直接省略最后的返回信息

一个实际应用函数的例子(用来计算最大值)

package main

import "fmt"

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}
func main() {
	x := 3
	y := 4
	z := 5
	max_xy := max(x, y) //调用函数 max(x, y)
	max_xz := max(x, z)
	fmt.Printf("max(%d,%d) = %d\n", x, y, max_xy)
	fmt.Printf("max(%d,%d) = %d\n", x, z, max_xz)
	fmt.Printf("max(%d,%d) = %d\n", y, z, max(y, z)) //直接调用
}

多个返回值

例子:

package main

import "fmt"

//返回A+B和A*B
func sub(A, B int) (int, int) {
	return A + B, A * B
}
func main() {
	x := 3
	y := 4
	xPLUSy, xTIMESy := sub(x, y) //调用函数 sub(x, y)
	fmt.Printf("xPLUSy(%d,%d) = %d\n", x, y, xPLUSy)
	fmt.Printf("xTIMESy(%d,%d) = %d\n", x, y, xTIMESy)
}

变参

Go语言支持变参,接受变参的函数有不定数量的参数,为了做到这一点,首先需要定义函数使其接受变参。

func myfunc(arg ...int) {}

arg ...int 告诉我们Go语言这个函数接受不定数量的参数。注意,这些参数的类型全部时int。在函数体中,变量arg时一个int的slice

for _, n := arg {
    fmt.Printf("And the number is: %d\n", n)
}

 

传值与指针

函数的普通传值只是传值的copy,而实参不会变化,比如

package main

import "fmt"

func add(a int) int {
	a = a + 1
	return a
}
func main() {
	x := 3
	fmt.Printf("x = %d\n", x)    //输出x=3
	x1 := add(x)                 //调用函数
	fmt.Printf("x+1 = %d\n", x1) //输出x+1=4
	fmt.Printf("x = %d\n", x)    //继续输出x,应该为x=3
}

如果想真正的传 x 本身的话就需要指针了,变量在内存中是存放于一定的地址上,修改变量实际是修改变量地址处的内存。

例子

package main

import "fmt"

func add(a *int) int {
	*a = *a + 1 //修改了a的值
	return *a   //返回新值
}
func main() {
	x := 3
	fmt.Printf("x = %d\n", x)    //输出x=3
	x1 := add(&x)                //调用函数 传x的内存地址
	fmt.Printf("x+1 = %d\n", x1) //输出x+1=4
	fmt.Printf("x = %d\n", x)    //继续输出x,应该为x=4
}

这样就达到了修改x的目的。传指针的好处:可以使多个函数能操作同一个对象,可以传递体积大的结构体

 

defer延迟语句

当你进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露:

func ReadWrite() bool {
    file.Open("file")
    defer file.Close()
    if failureX {
        return false
    }
    if failureY {
        return false
    }
    return true
}

如果有很多调用defer,那么defer采用后进先出模式

 

 


发布于:http://www.golune.com/blog/content/c45ae5ed3c92d1277173d43fafba4a4b8652f

分享到:
评论

相关推荐

    Go语言教程:Go语言函数介绍

    ### Go语言函数详解 #### 一、函数的基本概念与作用 在Go语言中,函数是程序的基本构建单元之一,主要用于封装一系列的操作或计算步骤。它能够帮助开发者将复杂的任务分解成更小、更易于管理的部分。Go语言至少...

    go语言-Go语言函数-day03.rar

    go语言 Go语言函数 defer与异常 Go语言数组 Go语言结构体 日期与时间 非类型安全指针 Go语言切片

    go语言中文手册,标准库手册,教程,圣经打包下载(更新)

    html格式,带全文搜索. 在学习go的过程中需要查询各种资料和书籍 手册....包括以下书籍(html): go标准库文档 Go语言标准库 go指南 go_web编程 Go_基础教程 go语言圣经 Go入门指南 Go...Go 语言(Golang).pdf 学习go语言.pdf

    linux命令行的go语言函数版本_gnetstat.zip

    linux命令行的go语言函数版本_gnetstat

    Go语言基础、进阶、提高课程第四节 Go语言函数,游戏关卡策划讲解1

    第四节 Go 语言函数 21、函数的定义 22、Go 方法 63、实现游戏服务器日志函数 84、课后作业—难度: 95、深度分析塔防游戏关卡设计 106、微信公

    Go语言学习笔记.pdf 共174页

    Go语言学习笔记.pdf 共174页是一本关于Go语言的详细学习笔记,涵盖了Go语言的基础知识、函数、数组、Maps、Structs、接口、并发、程序结构、标准库等方面的内容。本笔记共分为三大部分:Go语言基础、标准库和扩展库...

    go语言电子书.zip

    Go语言,又称为Golang,是由Google公司开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它由Robert Griesemer、Rob Pike及Ken Thompson三位开发者设计,旨在提高软件的构建效率和可维护性,特别...

    学习 Go 语言(Golang)

    Go 语言,也被称为 Golang,是由 Google 的 Robert Griesemer、Rob Pike 和 Ken Thompson 在 2007 年设计的一种静态类型的编程语言。它旨在提供高效的开发体验,同时保持简洁的语法和内置的并发支持。Go 语言在...

    Go语言底层原理剖析.pdf

    函数调用是Go语言中非常重要的一部分,函数调用规范是Go语言设计的核心之一。Go语言中函数调用可以分为两种:同步调用和异步调用。同步调用是指函数调用者等待函数返回结果,而异步调用是指函数调用者不等待函数返回...

    Go 语言课程和项目源码

    Go语言函数 defer与异常 Go语言数组 Go语言结构体 日期与时间 非类型安全指针 Go语言切片 作业 Day04 重点知识回顾与答疑 Day05 字符串 Go语言Map Go语言接口 错误处理 空接口与类型断言 函数式编程 面向对象 面向...

    go语言 思维导图 基础、函数

    Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。它的设计目标是提高开发效率,同时保持程序的高性能和可靠性。Go语言的基础和函数是其核心特性,让我们...

    Go语言圣经,golang学习入门到精通

    Go语言,又称Golang,是由Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的语言。它旨在提高编程效率,简化并发编程,并强调简洁的编程哲学。Go语言的设计受到了多门经典编程语言的影响,如C语言、...

    go语言中文教程及手册.pdf

    Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。Go语言的设计目标是提高程序员的工作效率,它具有高表达力、简洁、清晰和高效的特性。Go语言的一个显著特点...

    韩顺平_Go语言核心编程完整版笔记.zip

    2. **函数与方法**:讲解Go语言的函数定义、参数传递和返回值,以及面向对象编程中的方法和接口。 3. **包与导入**:阐述Go语言的模块化设计,包括包的组织、导入选项以及如何使用标准库和其他外部包。 4. **并发...

    Go语言学习笔记.pdf

    Go语言还提供了内置的并发安全的类型和函数,比如sync包中的Mutex、WaitGroup等,这使得在多线程环境下进行数据同步和线程间通信变得安全和简单。 综上所述,Go语言学习笔记通常涵盖了语言的起源、设计哲学、语法...

    go语言圣经 .pdf

    Go语言,又称为Golang,是由Google公司推出的编程语言。其主要开发者包括肯·汤姆逊(Ken Thompson)、罗布·派克(Rob Pike)和罗伯特·格里泽默(Robert Griesemer)三位业界知名的大师级人物。以下是这三位开发者的简要...

    go语言编程,Go语言程序设计(英文版),学习 Go 语言(Golang),golang-china读书笔记

    Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。自2009年发布以来,Go语言因其简洁的语法、高效的性能以及对并发编程的良好支持,受到了广大开发者的欢迎...

    go 语言 入门

    Go语言,通常被称为Golang,是由Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。它具有简洁、快速、安全和现代的特点。Go语言设计团队的初衷是为了让编程更加简单、高效,同时能够应对...

    Go语言函数学习教程

    Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、并发型且具有垃圾回收功能的编程语言。本教程将深入讲解Go语言函数的基本概念和特性,包括函数的格式、定义、多返回值、`defer`、`panic` 和 `...

    GO 语言学习辅导共220页.pdf

    在Go语言的学习中,理解其基本数据类型、控制结构(如if、for、switch)、函数以及包的导入和导出是非常重要的。同时,掌握如何使用goroutine和channel实现并发编程,是成为Go语言开发者的关键技能。Go语言的工具链...

Global site tag (gtag.js) - Google Analytics