加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 09:45:19 所属栏目:大数据 来源:网络整理
导读: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 = appen

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:golanggo_prosrcsafly> go run demo.go
runtime error: integer divide by zero
PS E:golanggo_prosrcsafly>

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:golanggo_prosrcsafly> 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:golanggo_prosrcsafly>

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:golanggo_prosrcsafly> 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:golanggo_prosrcsafly>

闭包

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读