## 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是非同步的