牛客网_Go语言相关练习_判断&选择题(6)
本文共34道题目
一、判断题
此题考查编码规范。
反射最常见的使用场景是做对象的序列化(serialization,有时候也叫Marshal & Unmarshal)。
例如:Go语言标准库的encoding/json、encoding/xml、encoding/gob、encoding/binary等包就大量依赖于反射功能来实现。
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
而golang没有相关的构造函数定义,只能通过new来创建构造函数。
Go语言中的map是无序的组合。
X字段在从结构体实例编码到JSON数据格式的时候,使用x作为名字,这可以看作是一种重命名的方式。
go语言的自动内存管理机制使得只要还有一个指针引用一个变量,那这个变量就会在内存中得以保留,因此在Go语言函数内部返回指向本地变量的指针是安全的。
序列化通常将类型结构传入标准库或第三方包,类型结构中没有大写的变量未导出,对第三方包不可见,无法进行任何操作,依旧是默认的零值。
指针是引用类型。主要引用对方的地址。
是目录名。
- 第一次分配资源失败,直接返回,这时并没有分配成功的资源;
- 第一次分配资源成功,第二次分配资源失败,函数返回,第二次和第三次的资源都未成功分配,此时err不为nil,第一次分配成功的资源通过defer释放;
- 第一二次资源分配成功,第三次资源分配失败,函数返回,第一二次分配成功的资源通过defer释放;

Cgo是C语言和Go语言之间的桥梁,原则上无法直接支持C++的类。Cgo不支持C++语法的根本原因是C++至今为止还没有一个二进制接口规范(ABI)。Cgo只支持C语言中值类型的数据类型,所以我们是无法直接使用C++的引用参数等特性的。
注:Cgo是调用C代码模块,静态库和动态库。
golang虽然没有显式的提供继承语法,但是通过匿名组合实现了继承。
实践代码:
package main import "fmt" func main(){
a := func(a,b int,z float64) bool{
return a*b < int(z)
}
fmt.Print(a(,,)) //false
}
匿名函数:由一个不带函数名的函数声明和函数体组成,它可以直接赋值给一个变量或直接执行。
二、选择题
如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。所以先执行fmt再执行if判断,答案依次输出“1”和“3”。
Add函数带入的是b而不是*b,所以只能在AC中选,但是i.(Integer)经过类型断言以后就是Integer类型了,无法自动转成*Integer,所以只能选A了。如果将题目改成sum := a.Add(b)则可以选AC。
If f is variadic with a final parameter p of type ...T, then within f the type of p is equivalent to type []T. If f is invoked with no actual arguments for p, the value passed to p is nil. Otherwise, the value passed is a new slice of type []T with a new underlying array whose successive elements are the actual arguments, which all must be assignable to T. The length and capacity of the slice is therefore the number of arguments bound to p and may differ for each call site.
Given the function and calls
func Greeting(prefix string, who ...string)
Greeting("nobody")
Greeting("hello:", "Joe", "Anna", "Eileen")
within Greeting, who will have the value nil in the first call, and []string{"Joe", "Anna", "Eileen"} in the second.
If the final argument is assignable to a slice type []T, it may be passed unchanged as the value for a ...T parameter if the argument is followed by .... In this case no new slice is created.
Given the slice s and call
s := []string{"James", "Jasmine"}
Greeting("goodbye:", s...)
within Greeting, who will have the same value as s with the same underlying array.
def是python定义函数的关键字,class是类型。
ABC,A为最完整的写法,指明了变量名,类型,初始值;B是简写法,没有指定变量类型,不过go提供了类型推断,其会根据初始值推断类型;C是快速模式,通过":="快速创建一个变量。

实现接口时,不需要提前导入,都是隐式默认的。
- init函数可以在任何包中有0个或1个或多个;
- 首先初始化导入包的变量和常量,然后执行init函数,最后初始化本包的变量和常量,然后是init函数,最后是main函数;
- main函数只能在main包中有且只有一个,main包中也可以有0或1或多个init函数;
- init函数和main函数都不能被显示调用;
Go语言中只有for循环。for后面的语句中不能有逗号分割的语句,各个语句必须都是平等的,使用分号分割。for后面可以有无数多个分号。
go语言中的++、--操作符都是后置操作符,必须跟在操作数后面,并且它们没有返回值,所以它们不能用于表达式。
D中add会把数组中元素转成int值变成多个参数。
一个类实现了一个接口中的所有方法,那么它就实现了这个类。可以用这个类的对象来初始化一个接口。通过接口可以实现多态,类似C++虚函数重载。
Make只用来创建slice,map,channel,其中map使用前必须初始化。append可直接动态扩容slice,而map不行。
map在使用前必须初始化。 var m map[string]int = make(map[string]int)
m["one"] =
//这样可以; var m map[string]int = map[string]int{"two", }
m["one"] =
//这样也可以; var m map[string]int
m["one"] =
//这样就不行。
main函数和init函数都没有参数和返回值的定义。
递归检测:go tool vet package1 package2。因此——go tool vet 才可以递归。

三、参考资料
四、总结
本次练习把牛客网最后的34道Go语言练习题全部搞完了。涉及构造函数、GoConvey框架、反射、vet指令、序列化、main函数概念、错误设计、init函数、add函数、接口、匿名函数、Cgo、defer表达式等。
不断迭代,不断更新,不断尝试并不断进步。
后期将着重学习Go语言的框架和项目实践学习。
牛客网_Go语言相关练习_判断&选择题(6)的更多相关文章
- 牛客网_Go语言相关练习_判断&选择题(4)
题目来源于牛客网 一.判断题 成员变量或者函数的首字母表示是否对外部可见. switch后面的声明语句和表达式语句都是可以选择的.例如: //可以什么都不加 switch: break; 错误指的是可 ...
- 牛客网_Go语言相关练习_判断&选择题(5)
一.判断题 defer应该在if后面,如果文件为空,close会崩溃. package main import ( "os" "fmt" ) func main ...
- 牛客网_Go语言相关练习_选择题(1)
声明:题目源自牛客网. 一.单项选择题 解析:作为形参时,可以要求单向,只读或只写. 解析:Go语言的内存回收机制规定,只要有一个指针指向引用一个变量,那么这个变量就不会被释放(内存逃逸),因此在Go ...
- 牛客网_Go语言相关练习_选择题(3)
题目来源于牛客网 一.选择题 Go语言自带垃圾回收机制. 如果是值传递的话子函数对map修改不会影响父函数中的map,如果是地址传递则会影响. go语言编译器会自动在以标识符.数字字面量.字母字面量. ...
- 牛客网_Go语言相关练习_选择题(2)
注:题目来源均出自牛客网. 一.选择题 Map(集合)属于Go的内置类型,不需要引入其它库即可使用. Go-Map_菜鸟教程 在函数声明中,返回的参数要么都有变量名,要么都没有. C选项函数声明语法有 ...
- 关于牛客网C语言结构体位域(bit-fields)的一道题
题目链接地址: https://www.nowcoder.com/questionTerminal/f4e20747a2dd4649bac0c028daa234f4 来源:牛客网 低地址字节 Byte ...
- 牛客网 --java问答题
http://www.nowcoder.com/ 主要是自己什么都不怎么会.在这里可以学习很多的! 第一天看题自己回答,第二天看牛客网的答案! 1 什么是Java虚拟机?为什么Java被称作是“平台无 ...
- 【转自牛客网】C++类职位校招
作者:./a.out链接:https://www.nowcoder.com/discuss/14022来源:牛客网 话说在牛客网上混迹了半年,也没啥拿的出手的贡献.现在基本上自己的校招生涯要告一段落, ...
- 牛客网 - vivo2020届春季
牛客网 - vivo2020届春季 1.[编程题]手机屏幕解锁模式 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M 现有一个 3x3 规格的 Android ...
随机推荐
- Markdown 的离线编辑工具推荐:Sublime Text3 or Typora?我推荐Typora
最新版Sublime Text3 通过插件的方式,可以完美支持Markdown文档的编写,但是,唯一不完美的是实时预览的缺陷.可能各位看官要喷了,谁说Sublime Text3 不能实时预览的?你看: ...
- (转)我是一个java class
前言:本文主要想讲一下Java虚拟机的故事, 可能有点偏门,不妥之处欢迎留言交流. 第一回 陌生警察 我出生在C盘下面一个很深层次的目录下, 也不知道是谁把我放到这里的. 我一直在睡觉,外边的日出日落 ...
- Set集合架构和常用实现类的源码分析以及实例应用
说明:Set的实现类都是基于Map来实现的(HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的). (01) Set 是继承于Collection的接口.它是一个不允许 ...
- selenium3 文件系列之------读取properties文件
一个eclipse工程会有很多配置文件,有的配置文件是写在properties里,也有写在xml文件里的.这个总结一下是自动化测试是如何读取properties文件. 一.准备config.prope ...
- linux命令之kill篇
作业四:查询firewall进程,然后杀死 [root@localhost 桌面]# ps -aux |grep firewall root 772 0.0 2.0 327912 2 ...
- poj3276 Face The Right Way(反转问题,好题)
https://vjudge.net/problem/POJ-3276 首先意识到,对一个区间进行两次及以上的反转是没有意义的,而且反转次序不影响最终结果. 有点像二分搜索时用的逐个试的方法,每次翻的 ...
- poj3280 Cheapest Palindrome(回文串区间dp)
https://vjudge.net/problem/POJ-3280 猛刷简单dp第一天第三题. 这个据说是[求字符串通过增减操作变成回文串的最小改动次数]的变体. 首先增减操作的实质是一样的,所以 ...
- HTML5 学习06——Geolocation(地理定位)
HTML5 Geolocation(地理定位) HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的. HTML ...
- JSP解决:Attempt to clear a buffer that's already been flushed错误(jsp:forward标签跳转空白)
[摘要:本日正在开辟过程当中发明一个题目:正在页里中应用了jsp:forward扔错Attempt to clear a buffer that's already been flushed!! 百思 ...
- SpringCloud无废话入门04:Hystrix熔断器及监控
1.断路器(Circuit Breaker)模式 在上文中,我们人为停掉了一个provider,在实际的生产环境中,因为意外某个服务down掉,甚至某一层服务down掉也是会是有发生的.一旦发生这种情 ...