微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

golang基础-new_make、recover_panic、append、闭包

append

append:用来追加元素到数组、slice中

package main

import("fmt"
    // "errors"
)


func main() {
    //new函数
    j:= new(int)
    fmt.Println(j)
    *j = 100
    fmt.Println(*j)

    //append函数
    var b []int 
    b = append(b,10,30)
    fmt.Println(b)
    b = append(b,b...)
    fmt.Println(b)
}

输出如下:

0xc04203a1c0
100
[10 30]
[10 30 10 30]

recover处理异常

package main

import("fmt"
    "errors"
)


func main() {
    //recover捕获错误
    defer func(){
        err:= recover()
        if err!=nil{
            fmt.Println(err)
        }
    }()

    a:=0
    b:=100/a
    fmt.Println(b)
}

输出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
runtime error: integer divide by zero
PS E:\golang\go_pro\src\safly>

panic:用来做错误处理

package main

import(
    // "fmt"
    "errors"
)


func main() {
    //panic:用来做错误处理
    err:= initError()
    if err != nil{
        panic(err)
    }
}

func initError()error{
    return errors.New("init error")
}

输出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
panic: init error

goroutine 1 [running]:
main.main()
        E:/golang/go_pro/src/safly/demo.go:14 +0x8b
exit status 2
PS E:\golang\go_pro\src\safly>

new_make

new:用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针
make:用来分配内存,主要用来分配引用类型,比如chan、map、slice

package main

import(
    "fmt"

)


func main() {
    //返回一个slice
    s2 := make([]int,10)
    fmt.Println(s2)
    s2[0] = 10
    fmt.Println(s2)

    //返回一个地址
    s1 :=new([]int)
    fmt.Println(s1)

    *s1 = make([]int,5)
    (*s1)[0] = 10

    fmt.Println(s1)
    fmt.Println(*s1)
}

输出如下:

PS E:\golang\go_pro\src\safly> go run demo.go
[0 0 0 0 0 0 0 0 0 0]
[10 0 0 0 0 0 0 0 0 0]
&[]
&[10 0 0 0 0]
[10 0 0 0 0]
PS E:\golang\go_pro\src\safly>

闭包

闭包:一个函数和与其相关的引用环境组合而成的实体

package main

import(
    "fmt"

)


func main() {
    //闭包函数
    method := closure()
    fmt.Println(method(1,3))
    //匿名函数1
    sum:= func(a int,b int) int {
        return a + b
    }(2,3)
    fmt.Println(sum)
    //匿名函数2
    sum1:= func(a,b int)(sum int){
        sum = a+ b
        return 
    }

    fmt.Println(sum1(1,3))
    fmt.Println(returnMethod1(2,4))
    fmt.Println(returnMethod2(2,4))
}

//利用方法返回匿名函数
func returnMethod1(a,b int)int{
    return func(int,int)int{
        return a + b
    }(a,b)
}
//利用方法返回匿名函数运算结果
func returnMethod2(a,b int)int{
    resutlTemp:= func(int,int)int {
        return a+b
    }
    return resutlTemp(a,b)
}

//无参数闭包
func closure( ) func(int,int ) int {
    return func(a int,b int )int {
        return a + b
    }
}

输出如下:

4
5
4
6
6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐