Golang面试题总结

面试题纠错

  1. 数组作为参数传递是,传递的是值,但切片作为参数传递时,传递的是地址值,所以数组中的值是不可更改的,但是切片中的值可以修改。
    func changes(i []int) []int{
    	i[0]=0
    	return i
    }
    
    func changea(i [3]int) [3]int{
    	i[0]=0
    	return i
    }
    func main(){
    	a:=[3]int{1,2,3} //数组a
    	s:=[]int{4,5,6}  //切片s
    	changea(a)
    	fmt.Println(a)
    	changes(s)
    	fmt.Println(s)
    }
    
    输出结果:
    [1 2 3]
    [0 5 6]
    
    Process finished with exit code 0
    

     
  2. golang中的map是hash的表现,每次遍历的顺序可以不一样
  3. Go中可以抛出一个panic异常,然后再defer中通过recover()捕获这个异常,然后正常处理,如果同时有多个defer,那么异常会被最近的recover()捕获并正常处理。recover必须在derfer函数中运行,多层嵌套依然无效,必须在defer函数中直接调用才有效。
    package main
    
    import (
        "fmt"
    )
    
    func main() {
        defer_call()
    }
    
    func defer_call() {
    
        defer func() {
            fmt.Println("打印前")
        }()
    
        defer func() { // 必须要先声明defer,否则recover()不能捕获到panic异常
            if err := recover();err != nil {
                fmt.Println(err) //err 就是panic传入的参数
            }
            fmt.Println("打印中")
        }()
    
        defer func() {
    
            fmt.Println("打印后")
        }()
    
        panic("触发异常")
    }
    输出内容为:
    
    打印后
    触发异常
    打印中
    打印前
    
    Process finished with exit code 0

     

  4. init()方法在任何包中都可以出现,建议保重只含一个init()函数比较好,容易理解,但是main()只能出现在Package main中,go程序会自动调用init和main。
  5. golang中的方法和函数是不一样的,官方解释:方法是包含了接收者的函数
    函数的固定格式:func+函数名+(参数)(可选)+返回值(可选)+{}
    方法在func之后是接受着而不是函数名: func (p *myint/p myint) mydouble() int {}
    接收者好比一个类,这些方法是他的成员函数
  6. golang中的引用类型包括,切片,map,channel和interface
  7. main 不能带参数,没有返回值必须在main包,可以使用flag包获取和解析命令行参数
  8. 当为变量赋nil值时,变量必须有类型,interface{} error都行,string为空是"",不是nil
  9. s:={1,2,3,     换行一定要加,否则报错
          4,5,5,}
  10. golang中没有前置自增自减++i、--i,只可以后置自增自减
  11. 源文件为slice.go,那么测试文件名为:slice_test.go,go test 要求测试函数前缀必须为Test
  12. golang中的闭包问题,先来解释下什么是闭包
    闭包:闭包是指可以包含自由(未绑定特定对象)变量的代码块:这些变量不是这个代码块内或者任何全局上下文中定义的,而是在定义代码块中的环境中定义的(局部变量)
    在一个for range循环中如果你不带参数传值的话,那么取得值为循环的最后一个值,如果传递了值,则会输出处理之后的每个迭代中的值,但并不一定是按照顺序输出。例子可以查看关于golang闭包中所谓的“坑”,
  • 1
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值