go基础语法50问,来看看你的go基础合格了吗?( 四 )


// 错误示例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) }}23.说说go语言中的switch语句单个 case 中,可以出现多个结果选项 。只有在 case 中明确添加 fallthrough关键字 , 才会继续执行紧跟的下一个 case 。
24.说说go语言中有没有隐藏的this指针方法施加的对象显式传递,没有被隐藏起来 。
golang 的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达方法施加的对象不需要非得是指针 , 也不用非得叫 this 。
25.go语言中的引用类型包含哪些切片(slice)、字典(map)、通道(channel)、接口(interface) 。
26.说说go语言的main函数main 函数不能带参数;main 函数不能定义返回值 。main 函数所在的包必须为 main 包;main 函数中可以使用 flag 包来获取和解析命令行参数 。
27.go语言触发异常的场景有哪些

  • 空指针解析
  • 下标越界
  • 除数为0
  • 【go基础语法50问,来看看你的go基础合格了吗?】调用 panic 函数
28.说说go语言的beego框架
  • beego 是一个 golang 实现的轻量级HTTP框架
  • beego 可以通过注释路由、正则路由等多种方式完成 url 路由注入
  • 可以使用 bee new 工具生成空工程,然后使用 bee run 命令自动热编译
29.说说go语言的goconvey框架
  • goconvey 是一个支持 golang 的单元测试框架
  • goconvey 能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面
  • goconvey 提供了丰富的断言简化测试用例的编写
30.GoStub的作用是什么
  • GoStub 可以对全局变量打桩
  • GoStub 可以对函数打桩
  • GoStub 不可以对类的成员方法打桩
  • GoStub 可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为
31.go语言编程的好处是什么
  • 编译和运行都很快 。
  • 在语言层级支持并行操作 。
  • 有垃圾处理器 。
  • 内置字符串和 maps 。
  • 函数是 go 语言的最基本编程单位 。
32.说说go语言的select机制
  • select 机制用来处理异步 IO 问题
  • select 机制最大的一条限制就是每个 case 语句里必须是一个 IO 操作
  • golang 在语言级别支持 select 关键字
33.解释一下go语言中的静态类型声明静态类型声明是告诉编译器不需要太多的关注这个变量的细节 。
静态变量的声明,只是针对于编译的时候, 在连接程序的时候,编译器还要对这个变量进行实际的声明 。
34.go的接口是什么
  • 在 go 语言中,interface 也就是接口,被用来指定一个对象 。接口具有下面的要素:
  • 一系列的方法
  • 具体应用中并用来表示某个数据类型
  • 在 go 中使用 interface 来实现多态
35.Go语言里面的类型断言是怎么回事类型断言是用来从一个接口里面读取数值给一个具体的类型变量 。类型转换是指转换两个不相同的数据类型 。
36.go语言中局部变量和全局变量的缺省值是什么全局变量的缺省值是与这个类型相关的零值 。
37.go语言编程的好处是什么
  • 编译和运行都很快 。
  • 在语言层级支持并行操作 。
  • 有垃圾处理器 。
  • 内置字符串和 maps 。
  • 函数是 go 语言的最基本编程单位 。
38.解释一下go语言中的静态类型声明静态类型声明是告诉编译器不需要太多的关注这个变量的细节 。静态变量的声明,只是针对于编译的时候, 在连接程序的时候,编译器还要对这个变量进行实际的声明 。
39.模块化编程是怎么回事模块化编程是指把一个大的程序分解成几个小的程序 。这么做的目的是为了减少程序的复杂度,易于维护,并且达到最高的效率 。
40.Golang的方法有什么特别之处函数的定义声明没有接收者 。
方法的声明和函数类似,他们的区别是:方法在定义的时候,会在func和方法名之间增加一个参数,这个参数就是接收者,这样我们定义的这个方法就和接收者绑定在了一起,称之为这个接收者的方法 。
Go语言里有两种类型的接收者:值接收者和指针接收者 。使用值类型接收者定义的方法,在调用的时候,使用的其实是值接收者的一个副本 , 所以对该值的任何操作,不会影响原来的类型变量 。——-相当于形式参数 。

推荐阅读