一、Go
1、nil是否一定相等
package main
import (
"fmt"
)
func main(){
var x *int =nil
var y interface{} =x
fmt.Println(x==y) //true
fmt.Println(x==nil) //true
fmt.Println(y==nil) //false
}
2、Go会不会回收线程
package main
import (
"fmt"
"net"
"runtime/pprof"
"sync"
)
var threadProfile = pprof.Lookup("threadcreate")
func main() {
fmt.Printf("协程执行之前的线程数:%d\n", threadProfile.Count())
var wg sync.WaitGroup
wg.Add(100)
for i := 0; i < 100; i++ {
go func() {
defer wg.Done()
//runtime.LockOSThread() //强制回收线程
for j := 0; j < 100; j++ {
_, err := net.LookupHost("www.baidu.com")
if err != nil {
fmt.Println("err=", err)
}
}
}()
}
wg.Wait()
fmt.Printf("协程执行之后的线程数:%d\n", threadProfile.Count())
}
结果:
协程执行之前的线程数:6
协程执行之后的线程数:108
暂时不会回收,go还没解决此问题
难留少年时,总有少年来!
无论你是年轻还是年长,所有程序员都需要记住:时刻努力学习新技术,否则就会被时代抛弃!