7.Go语言基础之函数

1.函数

1.1函数定义

Go语言中定义函数使用fun关键字,具体格式为
func 函数名(参数)(返回值){
    函数体
}

其中:
1.函数名:由字母,数字,下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名不能重名。
2.参数:参数由变量名和变量类型组成。
3.返回值:可以只写返回值类型,多个返回值必须用()包裹,并用,分隔。
4.函数体:实现指定功能的代码块。

定义一个求两个数和的函数:
func intSum(x int, y int) int {
    return x + y
}

函数的参数和返回值是可选的,我们也可以不传参也没有返回值。
func sayHello() {
    fmt.Println("Hello vita")
}

1.2函数的调用

定义了函数后,可以通过 函数名()的方式调用函数。
调用有返回值的函数时,可以不接收返回值。

package main

import "fmt"

func sayHello(){
    fmt.Println("hello vita")
}
func main() {
    sayHello()
}

结果:
hello vita

1.3参数

1.3.1类型简写

函数的参数中如果相邻变量的类型相同,则可以省略类型。

package main

func intSum(x,y int)int{
    return x+y
}
func main() {
    intSum(1,2)
}

intSum函数有两个参数,x,y的类型都是int,因此可以省略x的类型,因为y后面有类型说明。

1.3.2可变参数

可变参数即参数数量不固定。Go语言中的可变参数通过在参数后面加...来标识。
注意:可变参数通常要作为函数的最后一个参数。

package main

import "fmt"

func intSum(x ...int)int{
    fmt.Println(x)//x是一个切片
    sum:=0
    for _,value :=range x{
        sum+=value
    }
    return sum
}
func main() {
    sum1 := intSum(1,2,3,4,5)
    sum2 := intSum(1,2,3,4,5,6,7)
    sum3 := intSum(1,2,3,4,5,6,7,8,9)
    fmt.Println(sum1)
    fmt.Println(sum2)
    fmt.Println(sum3)

}

结果:
[1 2 3 4 5]
[1 2 3 4 5 6 7]
[1 2 3 4 5 6 7 8 9]
15
28
45

1.3.3固定参数搭配可变参数

可变参数放在固定参数的后面

package main

import "fmt"

func intSum(x int,y ...int)int{
    sum:=x
    for _,value :=range y{
        sum+=value
    }
    return sum
}
func main() {
    sum1 := intSum(1,2,3,4,5)
    sum2 := intSum(1,2,3,4,5,6,7)
    sum3 := intSum(1,2,3,4,5,6,7,8,9)
    fmt.Println(sum1)
    fmt.Println(sum2)
    fmt.Println(sum3)

}

结果:
15
28
45

1.4返回值

1.4.1多返回值

Go语言中支持多返回值,函数如果有多个返回值,必须使用()把所有返回值包裹起来。

package main

func calc(x,y int)(int,int){
    sum :=x+y
    sub:=x-y
    return sum,sub
}
func main() {
    calc(3,2)

}

1.4.2返回值命名

函数定义时,可以给返回值命名,并在函数体中直接使用这些变量,最后通过return关键字返回。
package main

func calc(x,y int)(sum int,sub int){
    sum =x+y
    sub=x-y
    return
}
func main() {
    calc(3,2)
}

2.函数进阶

2.1全局变量

全局变量是定义在函数外部的变量,他在程序整个运行周期内都有效。在函数中可以访问到全局变量。

package main

import "fmt"

var num int64=100
func testGlobalVar(){
    fmt.Printf("num=%d\n",num)
}
func main() {
    testGlobalVar() //num=100
}

2.2局部变量

函数内定义的变量,无法在函数外使用。
func testLocalVar() {
    //定义一个函数局部变量x,仅在该函数内生效
    var x int64 = 100
    fmt.Printf("x=%d\n", x)
}

func main() {
    testLocalVar()
    fmt.Println(x) // 此时无法使用变量x
}
如果局部变量和全局变量重名,优先访问局部变量。

package main

import "fmt"

//定义全局变量num
var num int64 = 10

func testNum() {
    num := 100
    fmt.Printf("num=%d\n", num) // 函数中优先使用局部变量
}
func main() {
    testNum() // num=100
}
语句块中定义的变量,通常我们会在if条件判断,for循环,switch语句上使用这种定义变量的方式。

func testLocalVar2(x, y int) {
    fmt.Println(x, y) //函数的参数也是只在本函数中生效
    if x > 0 {
        z := 100 //变量z只在if语句块生效
        fmt.Println(z)
    }
    //fmt.Println(z)//此处无法使用变量z
}
for循环语句中定义的变量,也只在for语句块中生效
func testLocalVar3() {
    for i := 0; i < 10; i++ {
        fmt.Println(i) //变量i只在当前for语句块中生效
    }
    //fmt.Println(i) //此处无法使用变量i
}

2.3定义函数类型

我们可以使用type关键字定义一个函数类型,具体格式如下:
type calculation func(int, int) int

上面语句定义了一个calculation类型,它是一种函数类型,接收两个int参数,返回值类型为int。

简单的说,凡是满足这个条件的函数都是calculation类型的函数,例如下面的add和sub是calculation类型。

func add(x, y int) int {
    return x + y
}

func sub(x, y int) int {
    return x - y
}

add和sub都能赋值给calculation类型的变量。
var c calculation
c = add

2.4函数类型变量

我们可以声明函数类型的变量并且为该变量赋值:
func main() {
    var c calculation               // 声明一个calculation类型的变量c
    c = add                         // 把add赋值给c
    fmt.Printf("type of c:%T\n", c) // type of c:main.calculation
    fmt.Println(c(1, 2))            // 像调用add一样调用c

    f := add                        // 将函数add赋值给变量f1
    fmt.Printf("type of f:%T\n", f) // type of f:func(int, int) int
    fmt.Println(f(10, 20))          // 像调用add一样调用f
}

原文地址:https://blog.51cto.com/10983441/2457939

时间: 2024-10-13 07:51:56

7.Go语言基础之函数的相关文章

Go语言基础之函数

函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数定义 Go语言中定义函数使用func关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母.数字.下划线组成.但函数名的第一个字母不能是数字.在同一个包内,函数名也称不能重名(包的概念详见后文). 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔. 返回值:返回

魏兆辉的IOS基础学习笔记之四 C语言基础-04 函数

1. 数组作为函数参数 函数是我们学习程序设计语言最基本的东西了,我在此不再赘述.只讨论一种特殊情况,就是数组作为函数的参数传递. 我们都知道,其实在传递数组的时候,实际上是传递了数组首元素的指针.明确了这一点之后,我们就可以思考下面的问题. 既然他只是传递了数组首元素的指针,那么他必然无法知道整个数组的大小,因此,我们如果希望在函数中用到数组的长度,必须要进行显式传递. int Sum(int a[],int size){ int i ,sum=0; for(i=0;i<size;i++) {

C语言基础(13)-函数

一. 函数的原型和调用 在使用函数前必须定义或者声明函数. double circle(double r); int main() { double length = circle(10); printf("length = %f\n", length); return 0; } double circle(double r) { return 2 * 3.14 * r; } 二. 函数的形参和实参 在调用函数的时候,函数大多数都有参数,主调函数和被调用函数之间需要传递数据. 在定义函

黑马程序员&mdash;&mdash;【黑马视频笔记】OC语言基础之函数与方法

方法 1.对象方法都是以减号 - 2.对象方法的声明必须写在@interface和@end之间    对象方法的实现必须写在@implementation和@end之间 3.对象方法只能由对象来调用 4.对象方法归类\对象所有 函数 1.函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有 2.函数调用不依赖于对象 3.函数内部不能直接通过成员变量名访问某个对象的成员变量   1: #import <Foundation/Foundation.h> 2:   3

黑马程序员&mdash;&mdash;【黑马视频笔记】C语言基础之函数

.   1.什么情况下定义函数: 添加一个常用的新功能   2.函数的定义格式 返回值类型  函数名(形式参数列表) {    函数体 }   3.定义函数需要明确的东西 1> 起一个有意义的函数名 2> 函数参数与返回值的选用   4.参数的注意点   1: 1.形式参数:定义函数时函数名后面中的参数,简称形参 2: 2.实际参数:调用函数式传入的具体数据,简称实参 3: 3.实参个数必须等于形参个数 4: 4.函数体内部不能定义和形参一样的变量 5: 5.如果是基本数据类型作为函数形参,纯

C语言基础之函数和流程控制

函数和流程控制也是每个编程语言的基本概念,函数是划分模块的最小单位,良好的函数规划能直接提升软件的质量,C语言的流程控制主要由以下几个语句组成,条件分支语句.选择语句.循环语句.goto语句.return语句等. 函数的定义 一个函数包含返回值.函数名和参数列表,如下定义了一个返回值为 int 函数名为show拥有一个int类型参数的函数 int show(int param) {     printf("这是一个名为show的函数");     return 0; } 再来定义个没有

c语言基础 - printf函数

一 printf函数的介绍 printf函数是一个标准库函数,能够以精确的格式输出程序运算的结果. printf函数的调用格式为: printf("格式控制字符串",输出项列表); 如:printf("%d,%d",a,b); 格式字符串 是由格式字符(包括:转换说明符.标志.域宽.精度)和普通字符组成,转换说明符和百 分号(%)一起使用,用来说明输出数据的数据类型.标志.长度和精度 输出项列表 可以是常量.变量和表达式,也可以没有输出项,这些输出项必须与格式控制字

C语言基础_函数指针

一.函数  实现某特定功能的代码 1)函数名与数组名一样是地址 2)函数指针 指向函数的指针 可以通过函数指针调用指向的函数 3)返回值类型 (*函数指针名)(参数类型)  = 函数名 int maxValue(int a,int b){ return a > b ? a : b; } int (*p)(int,int) = maxvalwe; printf("%d\n",p(3,4)); //用指针去调用函数 4) 示例代码 int maxValue(int a,int b){

iOS开发之c语言基础Lesson-11 函数指针 上课笔记 与 试题练习

main.m 文件 9 #import <Foundation/Foundation.h> 10 #import "Pointer.h" 11 ////////////////Lesson 11 函数指针 课堂笔记 与 习题练习//////////// 12 13 14 //函数指针:指向函数的指针叫做函数指针,用来存储函数的地址 15 //函数名代表函数的入口地址 16 17 18 //回调函数; 函数指针变量,存储对应的函数的地址 19 //给函数指针类型,取一个新的名