异常处理、数组

前言

这里总结的Golang 笔记只适合有点编程基础的人看,比如Java

错误处理

golang之中的错误处理与Java之中异常处理有异曲同工之妙,Java之中是try…catch…finally,go语言之中defer…panic…recover。go语言之中抛出一个painc的异常,然后在defer之中通过recover捕获这个异常,然后正常处理。

错误处理demo

func main() {
	test()
}

func test()  {
	var i = 10
	var j = 0
	defer func(){
		err := recover()
		if err != nil{
			fmt.Println("err:", err)
		}
	}()
	res := i / j
	fmt.Println(res)
}

处理结果:
在这里插入图片描述

自定义错误处理

painc遇见问题 painc会终止程序,你没有在程序中添加任何其他措施的话,就打印painc的详细或者内容,然后程序停止运行。但是前面无论产生什么错误都不会影响到defer的执行。

painc使用

func main() {
	defer func() {
		fmt.Println("hello1")
		panic("defer panic")
		fmt.Println("hello2")
	}()
	fmt.Println("hello3")
	panic("outer panic")
	fmt.Println("hello4")
}

在这里插入图片描述
从如上的结果可以看出来,这里先是打印了3,在出现panic之后程序即将终止,但是会执行defer语句块,然后打印1,最后打印panic外部,最后打印了内部的panic。

自定义错误

使用error.New() 和 panic 一起实现

func main() {
	// painc 内置函数,接收一个interface值(任何值),可以接受error类型的变量,输出错误信息,并退出程序
	err := compute(1, 2)
	if err != nil {
		panic(err)
	}

	fmt.Println("正常执行")
}

func compute(i int, j int)(error error)  {
	if i + j < 10{
		return errors.New("ij的值太小了")
	}
	return nil
}

在这里插入图片描述
打印出错误信息,当ij的值大于10的时候返回一个nil打印正常执行。

数组

定义

数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。Golang之中数组是一个值类型与java之中数组还是有区别,java之中是引用类型。

var 数组变量名 [元素数量]Type
数组变量名 := [...]Type{元素}
var 数组变量名 = [...]Type{元素}// 不写...就变成切片了

数组遍历

打印索引和元素

func main() {
	var arrs = [3]int {3, 2, 1}
	for index, val := range arrs{
		fmt.Printf("第%d个元素的值为:%d\n", index, val)
	}
}

仅打印元素

func main() {
	var arrs = [3]int {3, 2, 1}
	for i:=0; i<len(arrs); i++ {
		fmt.Println(arrs[i])
	}
}

数组基本数据类型

Java之中数组之中是引用类型,在传递过程之中拷贝了数组第一个元素的地址,然后对其数组做变更,数据会发生变化。从以下的代码可以看出golang数组和java数组的区别。

public class TestArray {
    public static void main(String[] args) {
        int[] arr = new int[6];
        for(int i = 0; i < arr.length; i++){
            arr[i] = i+1;
        }
        System.out.println("arr[0]: " + arr[0]);
        TestArray testArray = new TestArray();
        testArray.swap(arr);
        System.out.println("arr[0]: " + arr[0]);
    }

    public void swap(int[] arr){
        arr[0] = 0;
    }
}

在这里插入图片描述
golang数组是基本数据类型,在进行值传递的时候,只是拷贝这个数组的值,然后修改数组,原数组中值不发生变化,是一个新的数组。

package main

import "fmt"

func main() {
	var arr [6]int
	for i:=0;i<len(arr);i++{
		arr[i] = i + 1
	}
	fmt.Println()
	fmt.Printf("arr[0]: %d", arr[0])
	swap(arr)
	fmt.Println()
	fmt.Printf("arr[0]: %d", arr[0])
}

func swap(arr [6]int)  {
	arr[0] = 0
}

在这里插入图片描述
从如上结果可以看出索引为0这个位置元素的值未发生变化。但是如果想要修改数组的话可以根据指针进行修改。

数组内存布局

golang一般会在栈区开辟一段连续的空间为数组的空间。
在这里插入图片描述
如果文章内容有错误,还请大佬们指导,防止误人子弟。继续冲冲冲!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值