原文地址:Go面试看这里了~(一)
1、与其它语言相比,Go有何优点?
-
与其它作为学术实验开始的语言不同,Go设计是务实的,各功能和语法决策旨在让程序开发更加轻松。
-
Go针对并发进行优化,在规模上运行良好。
-
由于单一的标准代码格式,Go通常比其它语言有更好的可读性。
-
自动垃圾回收较Java、Python更有效,因为Go中垃圾回收与程序同时运行。
2、Go使用的数据类型?
-
Method(方法)。
-
Boolean(布尔)。
-
Numeric(数字)。
-
String(字符串)。
-
Array(数组)。
-
Slice(切片)。
-
Struct(结构体)。
-
Pointer(指针)。
-
Function(引用)。
-
Interface(接口)。
-
Map(集合)。
-
Channel(管道)。
3、Go包是什么?
包(pkg)为Go工作区中包含Go源文件或其它包的目录,源文件中各函数、变量和类型都存储在此链接包中,每个Go源文件都属于一个包,该包在文件顶部使用【package <packagename>】命令声明,也可用【import <packagename>】方式导入和导出包以重用导出的函数和类型。
Go标准包是fmt,包含格式化和打印功能,如Println、Printf。
4、Go支持何种形式的类型转换?
Go支持显式的类型转换,如下:
// 将整数转为浮点数
i := 1 // int
j := 1.1 // float64
sum := i + int(j) // j被转换成int
5、什么是goroutine,如何停止它?
goroutine是函数或方法的执行,比标准线程更轻量,如要创建goroutine,可在函数声明之前添加go关键字。
通过channel向goroutine发送一个信号来停止,goroutine只能在被告知检查时响应信号,因此需在逻辑处理时,包含查验步骤,如下:
package main
func main() {
quit := make(chan bool)
go func() {
for {
select {
case <-quit:
return
default:
return
}
}
}()
...
quit <- true
}
6、如何在运行时检查变量类型?
类型开关是在运行时检查变量类型的最佳方式,它按值的数据类型来评估变量,每个switch至少包含一个case用作条件语句,以及default case,如没有case为真,则指向default case。
可参考如下代码:
//SliceMapStringColumnSliceInt64 获取[]map 中指定列信息 类似php array_column()
//data 要获取的数据集
//val 作为返回结果中值的键名
//示例:res:=SliceMapStringColumnSliceInt64(data,"userid")
func SliceMapStringColumnSliceInt64(data []map[string]interface{}, val string) (result []int64) {
for k := range data {
if vVal, valOk := data[k][val]; valOk {
switch reflect.TypeOf(vVal).String() {
case "string":
v, _ := strconv.Atoi(vVal.(string))
result = append(result, int64(v))
case "int":
result = append(result, int64(vVal.(int)))
case "int64":
result = append(result, vVal.(int64))
default:
continue
}
}
}
return result
}
7、Go 两个接口之间可以存在什么关系?
如两接口有相同的方法列表,那就是等价的,可互相赋值,如A中方法是B的,那B可赋值给A,接口查询是否成功就需在运行时才可确认。
至此,本次分享就结束了,后期会慢慢补充。
以上仅为个人观点,不一定准确,能帮到各位那是最好的。
好啦,到这里本文就结束了,喜欢的话就来个三连击吧。
扫码关注公众号,获取更多优质内容。