• go进阶语法10问


    1.说说go语言中的for循环

    for 循环支持 continue 和 break 来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环 for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。
    2.Array 类型的值作为函数参数
    在 C/C++ 中,数组(名)是指针。将数组作为参数传进函数时,相当于传递了数组内存地址的引用,在函数内部会改变该数组的值。
    在 Go 中,数组是值。作为参数传进函数时,传递的是数组的原始值拷贝,此时在函数内部是无法更新该数组的。

    2.Array 类型的值作为函数参数

    在 C/C++ 中,数组(名)是指针。将数组作为参数传进函数时,相当于传递了数组内存地址的引用,在函数内部会改变该数组的值。
    在 Go 中,数组是值。作为参数传进函数时,传递的是数组的原始值拷贝,此时在函数内部是无法更新该数组的。

    // 数组使用值拷贝传参
    func main() {
     x := [3]int{1,2,3}
    
     func(arr [3]int) {
      arr[0] = 7
      fmt.Println(arr) // [7 2 3]
     }(x)
     fmt.Println(x)   // [1 2 3] // 并不是你以为的 [7 2 3]
    }
    

    想改变数组,直接传递指向这个数组的指针类型。

    // 传址会修改原数据
    func main() {
     x := [3]int{1,2,3}
    
     func(arr *[3]int) {
      (*arr)[0] = 7 
      fmt.Println(arr) // &[7 2 3]
     }(&x)
     fmt.Println(x) // [7 2 3]
    }
    
    

    直接使用 slice:即使函数内部得到的是 slice 的值拷贝,但依旧会更新 slice 的原始数据(底层 array)

    // 错误示例
    func main() {
     x := []string{"a", "b", "c"}
     for v := range x {
      fmt.Println(v) // 1 2 3
     }
    }
    
    
    // 正确示例
    func main() {
     x := []string{"a", "b", "c"}
     for _, v := range x { // 使用 _ 丢弃索引
      fmt.Println(v)
     }
    }
    
    

    3.说说go语言中的switch语句

    单个 case 中,可以出现多个结果选项。只有在 case 中明确添加 fallthrough关键字,才会继续执行紧跟的下一个 case。

    4.说说go语言中有没有隐藏的this指针

    方法施加的对象显式传递,没有被隐藏起来。

    golang 的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达方法施加的对象不需要非得是指针,也不用非得叫 this。

    5.go语言中的引用类型包含哪些

    切片(slice)、字典(map)、通道(channel)、接口(interface)。

    6.说说go语言的main函数

    main 函数不能带参数;main 函数不能定义返回值。main 函数所在的包必须为 main 包;main 函数中可以使用 flag 包来获取和解析命令行参数。

    7.go语言触发异常的场景有哪些

    空指针解析

    下标越界

    除数为0

    调用 panic 函数

    8.说说go语言的beego框架

    beego 是一个 golang 实现的轻量级HTTP框架

    beego 可以通过注释路由、正则路由等多种方式完成 url 路由注入

    可以使用 bee new 工具生成空工程,然后使用 bee run 命令自动热编译

    9.说说go语言的goconvey框架

    goconvey 是一个支持 golang 的单元测试框架

    goconvey 能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面

    goconvey 提供了丰富的断言简化测试用例的编写

    10.GoStub的作用是什么

    GoStub 可以对全局变量打桩

    GoStub 可以对函数打桩

    GoStub 不可以对类的成员方法打桩

    GoStub 可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为

  • 相关阅读:
    Vue+SpringBoot打造考研专业课程管理系统
    自学前端到什么程度,可以去找工作呢?
    彻底解决Win11锁屏界面黑屏或者图片不变化
    Dart 2.17 正式发布
    使用send给生成器注入数据
    Springboot整合RocketMq
    python基础教程(15)元组的解包方法
    图像像素值统计&图像几何形状的绘制&随机数与随机颜色
    1300*C. Coin Rows(枚举&模拟)
    Vue中的混入(mixin)
  • 原文地址:https://blog.csdn.net/jzpfbpx/article/details/141070667