√ 简单介绍一下Golang?
谷歌开发的一种系统编程语言;
它具有内置的垃圾收集机制;
支持高并发;
代码可以编译成单个可执行二进制文件,不需要添加库或运行时环境即可在服务器上执行;
√ Golang是否可以声明一个类?
可以,type Person struct{…}
TODO:复习面向对象的所有相关问题
√ Go是否支持泛型?(陷阱问题)
否,泛型是方便的,但是它们在类型系统和运行时的复杂性方面付出了代价。
Go语言的解决方案就是使用interface{}替代任意类型,简单有效;
TODO:拓展一下泛型的概念
√ 从GitHub或者bitbucket导入代码的命令是什么?
go get和go install命令
√ 比较一下go run/build/get/install几个命令的异同?
go run xxx.go:直接编译并运行go文件,产生的可执行程序在临时文件夹中;
go build xxx.go:在当前目录产生同名的可执行程序;
go get mypack:下载包源码到当前GOPATH/src目录下;
go install mypack:对指定包进行编译安装;
如果mypack是一个类库包,则在当前GOPATH/pkg下生成对应的包文件,
如果mypack是一个含有main主程序的包,则在当前GOPATH/bin下生成可执行程序;
√ 一个通过make()命令创建的缓冲区被分配了一块内存后。如何销毁缓冲区并收回内存?
buffer = nil
在运行时,buffer = nil将启动垃圾回收。
make()能创建的类型包括:切片,map,管道,三者都是引用类型;(追问:Go语言的引用类型)
引用类型的值的内存分配是在堆中的,栈中使用一个地址指向之;
需要回收时,将栈中的指针/引用指向即可nil;
TODO:拓展一下堆栈内存分配,复习值类型和引用类型
√ 什么是值传递和引用传递
Go语言中的引用类型:切片,map,管道,指针,接口;其它都是值类型;
在变量传递(函数传参)时,值类型是拷贝传递,引用类型是地址传递;
在函数传参中,如果是值传递,修改被传递的参数,不会影响原有变量,如果是引用传参,函数内修改参数会影响外界;
√ 切片和数组的显著差异是什么?
数组大小是固定的,切片大小不是。
切片在运行时可以动态地增加切片的大小,但数组不可以。
使用了内置的添加、复制功能对切片操作。
TODO:追问,切片的双倍扩容机理
√ cap()和len()函数的区别是什么?
len()返回切片中的元素个数。
cap()返回切片的容量即切片可以容纳的元素数量。
√ 哈希表或哈希映射允许快速查找。GO如何实现哈希映射?(陷阱问题)
哈希表在Golang中相当于map,也就是哈希映射。
hash_table := make(map[string]string)
常见问题FAQ
- 如果资源链接失效了怎么办?
- 本站用户分享的所有资源都有自动备份机制,如果资源链接失效,请联系本站客服QQ:2580505920更新资源地址。
- 如果用户分享的资源与描述不符怎么办?
- 如何分享个人资源获取赞助积分或其他奖励?
- 如果您发现了本资源有侵权行为怎么办?