• 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 可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为

  • 相关阅读:
    python基础语法回顾
    多线程&并发篇---第四篇
    数据结构(五):哈希表及面试常考的算法
    动态追踪技术之BTrace
    恶意软件实现原理解析
    go语言编译过程概述
    ImmunoChemistry艾美捷总细胞毒性试验试剂盒方案
    word交叉引用的使用
    CSS|02 基本选择器
    函数题21 习题8-2 在数组中查找指定元素 浙大版《C语言程序设计(第4版)》题目集
  • 原文地址:https://blog.csdn.net/jzpfbpx/article/details/141070667