golang面试题001
## 1. Golang语言的优势
1. 不同于研发类的编程语言,目的驱动的go让go程序员更加的轻松在使用的时候
2. golang 的 先天并发性能优势
3. golang 的 语法 格式化 代码 让程序的易读性更好
4. golang 在处理内存回收的方式 相比 java和python效率更加的搞笑
---
## 2. Golang的数据类型
- Boolean
- Numeric
- Array
- Struct
- Pointer
- Method
- string
- slice
- map
- interface
- Function
- Channel
## 3. Go 程序中的包是什么?
>包pkg是Go工作区中包含Go 源文件或其他包的目录.
原文件中的每个函数,便来能和类型都存储在链接包中
> 换句话说: 你可以在同一个包中的任意位置访问到其他的变量和函数
> 每个Go源文件都属于一个包,该包在文件顶部使用一下命令声明:
```go
package <packagename>
```
你可以使用以下方法导入和导出包 以重用导出的函数或者类型:
```go
import <packagename>
```
golang的标准包是fmt, 其中包格式化和打印功能,如Println().
## 4、Go支持什么形式的类型转换?将整数转换为浮点数。
Go支持显式类型转换以满足其严格的类型要求。
```go
i :=55 // int
j :=67.8 //float64
sum := i + int(j) // j is converted to int
```
## 5. 什么事Goroutine ? 你如何停止它
> 一个Goroutine 是一个函数或者方法执行同时,旁边其他任何构成采用了特殊的Goroutine线程.
Goroutine线程比标准线程更清凉级,大多数Golang程序 同时使用数千个g,Goroutine
> 要创建,情使用`go`关键字 在函数声明之前添加关键字???
>
>
`go f(x,y,z)`
这里不应该是 在函数调用的时候去 加上`go`关键字的么
> 你可以通过向Goroutine 发送一个信号通道来停止它.
> Goroutine 只能在呗告知检查的时候响应信号,因此您需要在逻辑位置(例如for循环顶部)包含检查
```go
package main
func main() {
quit := make(chan bool)
go func() {
for {
select {
case <-quit:
return
default:
// …
}
}
}()
// …
quit <- true
}
```
说白了就是啥呢
写个匿名函数,里面套着这个for循环
而这个匿名函数直接就执行并在前面加上`go`关键在开启携程
在for里面不断监听一个 空的信道 `channel`
当 quit这个chan被 放入true的时候,就停止for循环了
> 这样就相当于进行了 go 携程之间的通讯
## 6. 如何在运行时检查变量的类型
>类型开关是在运行时检查变量类型的最佳方式
类型开关按照类型而不是值来评估变量.
>
> 每个switch至少包含一个case,用作条件语句,和一个defaultcase,如果没有一个case为真,则执行
>
## 7. Go两个接口之间可以存在什么关系
>如果两个接口有相同的方法列表,n那么他么就是等价的,可以相互赋值
> (在这一点上go语言的设计十分的灵活).
> 如果接口A的方法列表是接口B的方法列表的自己,那么接口B可以赋值接口A
> 接口查询是否成功,要在运行期才能够确定
>
## 8. Go当中t同步锁有什么特点?作用是什么
>当一个Goroutine(携程) 获得了Mutex后,其他的Goroutine只能乖乖的等待
除非该Goroutine释放了该MutexRWMutex在读锁占用的情况下,
> 会阻止写,但不组织读RWMutex在写锁占用情况下,会阻止任何其他goroutine
> 无论读和写进来,整个锁相当于由该goroutine独占
>
> 同步锁的作用是保证资源在使用是的独有性,不会因为并发而导致数据错乱,
> 保证系统的稳定性.
>
## 9.Go语言当中 Channel(管道) 有什么特点 ,需要注意什么
>如果给一个nil的channel发送数据,会造成永远阻塞如果从一个nil的channel中接收数据,也会作
> 造成永久阻塞,给一个已经关闭的channel发送数据,会引起 panic 从一个已经关闭的channel接收数据,
>
> 如果缓冲区中为空,则返回一个零值
>
## 10. Go语言中Channel缓冲有什么特点?
无缓冲的channel是同步的,而有缓冲的channel是非同步的