注:题目来源均出自牛客网。
一、选择题
Map(集合)属于Go的内置类型,不需要引入其它库即可使用。
Go-Map_菜鸟教程
在函数声明中,返回的参数要么都有变量名,要么都没有。
C选项函数声明语法有错误,error是返回类型,但没有返回名。
go语言中字符串是UTF-8编码并存储的,它语言不定长的字节,所以它不支持下标操作,因为没一个下标操作代表的是固定长度的字节,所以不能对字符串中某个字符单独赋值。
Go-字符串_极客学院
由panic引发异常以后,程序停止执行,然后调用延迟函数(defer),就像程序正常退出一样。另外recover也是要写在延迟函数中的,如果发生异常延迟函数就不执行了,那就永远无法recover了。
本题考查对协程与进程的理解,B选项应该是协程比线程更轻量。
进程和线程、协程的区别
Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西。
Go语言的指针 & *
字符串只有两种直接表达的形式,一种是双引号,一种是反引号。
A选项中的反引号是中文符号,编译肯定会报错。
golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作;
在执行select语句的时候,运行时系统会自上而下地判断每个case中的发送或接收操作是否可以被立即执行(立即执行:意思是当前Goroutine不会因此操作而被阻塞);
select的用法与switch非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。与switch语句可以选择任何可使用相等比较的条件相比,select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作。
Go语言中 select 和 switch 的比较
基本思路:将引用的外部包的源代码放在当前工程的vendor目录下面,go 1.6以后编译go代码会优先从vendor目录先寻找依赖包。
它解决了避免项目代码外部依赖过多,迁移后需要多次go get 外包依赖包;而且通过go get 重新拉去的外部依赖包的版本可能和工程开发时使用的不一致导致编译错误的问题。
go vendor 介绍
布尔型变量应该赋值是true和false,正确答案应该是BCD。
Go编码规范指南
二、参考资料
Go的异常处理 defer, panic, recover
go语言之 panic, recover ——如何在go语言中优雅的处理错误
https://golang.org/pkg/builtin/
从例子中学习 go 语言 —— 基本语法
从例子中学习 go 语言 —— 数据结构、指针
Go语言中的指针运算
Go语言并发模型:使用 select
golang的select典型用法
https://github.com/golang/go/wiki/CodeReviewComments
The Go Programming Language Specification
三、总结
本次Go语言练习主要涉及到异常处理、集合、函数声明、对协程的理解、字符串连接、select机制、vendor和布尔型的编码规范。