zoukankan      html  css  js  c++  java
  • go语言基础二 函数 ,递归函数 ,指针

    函数的定义:

    func 函数名(参数列列表)(返回参数列列表){
        //函数体
    }
    func funcName (parametername type1, parametername type2...)(output1 type1, output2 type2...) {
        / / 逻辑代码
        // 返回多个值
        return value1, value2...
    }

    函数定义解析:

       func:函数关键字。 函数由 func 开始声明

      funcName:函数名。 函数名和参数列列表⼀一起构成了了函数签名。 函数名由字⺟母、数字和下划线组成。函数名的第⼀一个字⺟母不不能为 数字。在同⼀一个包内,函数名称不不能重名。               parametername type:参数列列表。 参数就像⼀一个占位符,定义函数时的参数叫做形式参数,形参变 量量是函数的局部变量量;当函数被调⽤用时,你可以将值传递给参数, 这个值被称为实际参数。 参数列列表指定的是参数类型、顺序、及参数个数。 参数是可选的,也就是说函数也可以不不包含参数。 参数类型的简写 在参数列列表中,如果有多个参数变量量,则以逗号分隔;如果 相邻变量量是同类型,则可以将类型省略略。 例例如:func add (a , b int) {} Go语⾔言的函数⽀支持可变参数。接受变参的函数是有着不不定数量量的 参数的。 func myfunc(arg ...int) {} arg ...int告诉Go这个函数接受不不定数量量的参数。注意,这 些参数的类型全部是int。在函数体中,变量量arg是⼀一个int的 slice。

      output1 type1, output2 type2:返回值列列表。 返回值返回函数的结果,结束函数的执⾏行行。 Go语⾔言的函数可以返回多个值。 返回值可以是:返回数据的数据类型,或者是:变量量名+变量量类 型的组合。 函数声明时有返回值,必须在函数体中使⽤用return语句句提供返回 值列列表。 如果只有⼀一个返回值且不不声明返回值变量量,那么可以省略略包括返 回值的括号。 return后的数据,要保持和声明的返回值类型、数量量、顺序⼀一 致。 如果函数没有声明返回值,函数中也可以使⽤用return关键字,⽤用 于强制结束函数。 函数体:函数定义的代码集合,是能够被重复调⽤用的代码⽚片段

    案例:

    // 递归函数

    package main import
    "fmt" func main() { i := get(3) fmt.Println(i) } func get(num int) int { if num ==1||num ==2 { return 1 } return get(num-1)+get(num-2) }
    //多参,多返回值函数

    func main() { i :
    = get(3) fmt.Println(i) i2, s := gets(1, 2) fmt.Println(i2,s) } func get(num int) int { if num ==1||num ==2 { return 1 } return get(num-1)+get(num-2) } func gets(num,num1 int) (int,string) { return num+num1,"s" }
    //可变参数函数
    package main import
    "fmt" func main() { i := get(3) fmt.Println(i) i2, s := gets(1, 2) fmt.Println(i2, s) num1 := []int{1, 2, 3} i3 := geta(num1...) fmt.Println(i3) } func get(num int) int { if num ==1||num ==2 { return 1 } return get(num-1)+get(num-2) } func gets(num,num1 int) (int,string) { return num+num1,"s" } func geta(num ...int) int { nums :=0; for _ ,v:= range num { nums +=v } return nums }

    2 指针

      指针是存储另一个变量的内存地址的变量。
      变量是一种使⽤用⽅便的占位符,变量都指向计算机的内存地址。
        一个指针变量可以指向任何一个值的内存地址。

      那么怎么获取呢:

    func main() {
    // 声明实际变量
    var a int = 120
    // 声明指针变量
    var ip *int
    // 给指针变量赋值,将变量量 a 的地址赋值给 ip
    ip = &a
    // 打印 a 的类型和值
    fmt.Printf("a 的类型是%T,值是%v 
    ", a, a)
    // 打印 &a 的类型和值
    fmt.Printf("&a 的类型是%T,值是%v 
    ", &a, &a)
    // 打印 ip 的类型和值
    fmt.Printf("ip 的类型是%T,值是%v 
    ", ip, ip)
    // 打印变量量 *ip 的类型和值
    fmt.Printf("*ip 变量量的类型是%T,值是%v 
    ", *ip, *ip)
    // 打印变量量 *&a 的类型和值
    fmt.Printf("*&a 变量量的类型是%T,值是%v 
    ", *&a, *&a)
    fmt.Println(a, &a, *&a)
    fmt.Println(ip, &ip, *ip, *(&ip), &(*ip))
    }
    import "fmt"
    
    func main() {
        a :=2
        i := &a
        var b *int
        fmt.Println(i)
        fmt.Println(b)
    }
  • 相关阅读:
    Azkaban的使用
    Azkaban安装
    Kafka 启动失败,报错Corrupt index found以及org.apache.kafka.common.protocol.types.SchemaException: Error reading field 'version': java.nio.BufferUnderflowException
    Kafka 消费者设置分区策略及原理
    Kafka利用Java API自定义生产者,消费者,拦截器,分区器等组件
    zookeeper群起总是有那么几个节点起不来的问题解决
    flume 启动agent报No appenders could be found for logger的解决
    Flume 的监控方式
    Flume 自定义 组件
    Source r1 has been removed due to an error during configuration java.lang.IllegalArgumentException: Required parameter bind must exist and may not be null & 端口无法连接
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/12260850.html
Copyright © 2011-2022 走看看