设为首页 加入收藏

TOP

Golang基础之函数(二)
2019-03-03 20:07:58 】 浏览:251
Tags:Golang 基础 函数
定义,但是自定义函数类型的定义必须在使用这个自定义函数类型的前面

    举例说明

      不使用自定义函数 

func  myfunc(funcvar  func(int,int) int ,num int) int {   //没有使用自定义函数类型时,函数类型作为形参在参数列表时需要写很长

return funcvar(num)

}

    使用自定义函数类型

    

type  myfunctype  func(int,int) int

func  myfunc(funcvar  myfunctype ,num int) int {  //自定义函数类型后,函数作为形参,在参数列表不用写很长

return funcvar(num)

}

  (12) Go语言支持对函数返回值命名

    优点:不用一个一个在return中对应的写返回的值

    举例说明

    

package main

import “fmt”

func main(){

n := 12

m := 4

sum ,sub :=myfunc(n,m)

}

func  myfunc(n int , m int)(sum int,sub int) {   //把返回的值定义好

sum = n + m   //直接使用=等号赋值就行

sub = n-m

return      //返回时不用填任何返回数据,并且返回时不用担心对应关系,只需在接收时对应好就行

}

  (13) 使用_下划线标识符忽略返回值

package main

import “fmt”

func main(){

n := 12

m := 4

sum ,_:=myfunc(n,m)   //忽略返回值sub

}

func  myfunc(n int , m int)(sum int,sub int) {   

sum = n + m   

sub = n-m

return     

 }

(14) Go语言函数支持可变参数

基本语法:

func  sum(args... int) sum int {

//代码

}

func sum(n1 int,args... int) sum int {

//代码

}

    使用注意

      args其实是一个slice切片,通过args[index]可以访问到各个值,如果一个函数形参列表有可变参数,和其他参数,那么可变参数要放在最后,否则报错

    案例演示

    

package main

import “fmt”

func main(){

n := sum(3,1,2,3,4,5,6)

fmt.Println(n)

}

func sum(n int , args... int ) int {

s := 0

for i := 0 ; i < len(args) ; i++ {

if args[i] == n {

break

}

s += args[i]

}

return s

}

 

运行结果

3

  (15) 如果在函数的形参列表中,两个或者多个形参的数据类型一样,那么可以省略前面几个,最后写一个就行 

func  sum(n , m , b ,c int) int {

//代码

}

8、包的使用和使用原理

  包的使用原理

    包的本质其实就是创建不同的文件夹来存放程序文件

  包的相关说明

  使用注意

    导入包时,路径必须从src下的某个目录开始算,比如,src文件夹下有一个utils文件,utils文件下有一个utils.go文件,那么,在main.go中导入utils包下的utils.go的某个变量或者函数的路径是:import utils

9、使用包的注意事项

  1)在给一个文件打包时,该报对应一个文件夹。文件的包通常和文件所在的文件夹名是一直的,一般为小写

  2)当一个文件要使用其他包的函数或者变量时,需要先引入对应的包

    引包方式1import  包名

    引包方式2import (

      “包名1”

      “包名2”

      )

  3)package指令在文件第一行,然后接着是import导包命令

  4)import包时,路径从计算机环境变量$GOPATH下的src目录开始算,不用带src目录,编译器会自动从src开始引入

  5)为了让其他包可以访问到本包的函数或者变量,则该函数或者变量的首字母必须大写

  6)在访问其他包的函数或者变量时,语法是:包名.函数名或者包.变量

  7)如果包名过长,Go语言支持跟包名取别名,如果取了别名,那么原来的包名就不能用

  8)在同一个包下面不能有重复的变量名,否则包重复定义

    说明:如果包取了别名,则必须使用别名来访问包中的函数或者变量

  9)如果两个.go文件打了同一个包,并且这两个文件都有同一个名字的函数或者变量,这样都会报错,因为同一个包下只能有一个函数名或者变量名,即使这个两个函数名被定义在两个不同的但是打了同一个包的文件

  10)在一个go程序中,main包只能有一个

  函数中return语句使用注意

    注意:对于函数的返回值,如果函数返回多个值,但是你只需要某个值,那么不需要的值可以使用下划线接受,例如:  _ , a := getSum(a,b)

10、函数之递归调用

  基本介绍

    一个函数体内调用了本身,我们称为递归调用

  案例演示

func  test( a  int ) {

if   a > 2 {

a--

test(a)

}

fmt.Println(a)

}

func  main(){

test(4)

}

运行结果:

2

2

3

 执行流程

  

   使用注意

    ① 递归每执行一个函数时,就创建一个新的受保护的独立的空间,也可以说是一个新的函数栈

    ② 函数的局部变量是独立的,不会相互影响

    ③ 递归必须向退出递归的条件逼近,否则就是无限递归

    ④ 当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁。执行完毕时,或者返回时,该函数栈会被销毁

  (1) 书写递归的重要思想就是:寻找出路

11、递归之解决斐波那契数列

  (2) 比如有一个数列:1 1 2 3 5 7 12 19.......

  (3) 实现思路

    1、当数列在12位置时值为1

    2、数列的前一个数和后一个数相加等于第三个数

  (4) 实现代码

package main

import “fmt”

func main{

//1  1  2  3  5 ....

n := 0

fmt.Print("请输入你要查找的数:")

fmt.Scanln(&n)

a := fibonaqi(n)

fmt.Println(a)

 

}

  //求斐波那契第n个位置的值

func  fibonaqi(n int) int {

if  n == 1 || n == 2 {

return 1

}

return fibonaqi(n-1)+fibonaqi(n-2)

}

运行结果:

 

12、求函数值

   已知f(1)=3,f(n)=2*f(n-1)+1,请使用递归求出n为任意数的值

  解题

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇linux基础之bash特性 下一篇slice扩容

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目