
Go
文章平均质量分 88
小白debug
这个作者很懒,什么都没留下…
展开
-
动图图解,怎么让goroutine跑一半就退出?
光看标题,大家可能不太理解我说的是啥。我们平时创建一个协程,跑一段逻辑,代码大概长这样。package main import ( "fmt" "time")func Foo() { fmt.Println("打印1") defer fmt.Println("打印2") fmt.Println("打印3")} func main() { go Foo() fmt.Println("打印4") time.Sleep(1000*ti原创 2021-11-21 15:21:27 · 727 阅读 · 1 评论 -
i/o timeout , 希望你不要踩到这个net/http包的坑
文章持续更新,可以微信搜一搜「golang小白成长记」第一时间阅读,回复【教程】获golang免费视频教程。本文已经收录在GitHub https://github.com/xiaobaiTech/golangFamily , 有大厂面试完整考点和成长路线,欢迎Star。问题我们来看一段日常代码。 1packagemain 2 3import( 4"bytes" 5"encoding/json" 6"fmt" 7"io/iouti...原创 2021-04-20 10:47:00 · 1630 阅读 · 0 评论 -
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jp1TlBFy-1617862011452)(http://qh1adizvv.hn-bkt.clouddn.com/nil%E5%88%87%E7%89%87%E5%92%8C%E7%A9%BA%E5%88%87%E7%89%87%E5%B0%81%E9%9D%A2.png)]连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。问题package mainimport ( "fmt" "re原创 2021-04-08 14:07:09 · 1476 阅读 · 0 评论 -
【吐血整理】超全golang面试题合集+golang学习指南+golang知识图谱+成长路线 一份涵盖大部分golang程序员所需要掌握的核心知识。
由于外链问题,完整版可【点击】阅读原文或到 github项目 中,欢迎关注。目录(善用Ctrl+F)基础入门新手Golang开发新手常犯的50个错误数据类型连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。golang面试题:字符串转成byte数组,会发生内存拷贝吗?golang面试题:翻转含有中文、数字、英文字母的字符串golang面试题:拷贝大切片一定比小切片代价大吗?map不初始化使用会怎么样map不初始化长度和初始化长度的区别map承载多大,..原创 2021-01-11 12:37:38 · 5418 阅读 · 4 评论 -
resp.Body.Close() 引发的内存泄漏goroutine个数
resp.Body.Close() 引发的内存泄漏goroutine个数。问题package mainimport ( "fmt" "io/ioutil" "net/http" "runtime")func main() { num := 6 for index := 0; index < num; index++ { resp, _ := http.Get("https://www.baidu.com") _, _ = ioutil.ReadAll(resp.Bo.原创 2020-11-24 12:52:23 · 2015 阅读 · 2 评论 -
昨天那个在for循环里append元素的同事,今天还在么?
昨天那个在for循环里append元素的同事,今天还在么?问题package mainimport "fmt"func main() { s := []int{1,2,3,4,5} for _, v:=range s { s =append(s, v) fmt.Printf("len(s)=%v\n",len(s)) }}这个代码会造成死循环吗?怎么答不会死循环,for range其实是golang的语法糖,在循环开始前会获取切片的长度 len(切片),然后再执行le.原创 2020-09-22 09:09:00 · 380 阅读 · 0 评论 -
golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?
golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?问题for循环select时,如果通道已经关闭会怎么样?如果select中的case只有一个,又会怎么样?怎么答for循环select时,如果其中一个case通道已经关闭,则每次都会执行到这个case。如果select里边只有一个case,而这个case被关闭了,则会出现死循环。解释1.for循环里被关闭的通道c通道是一个缓冲为0的通道,在main开始时,启动一个协程对c通.原创 2020-07-14 08:46:58 · 3527 阅读 · 2 评论 -
golang面试题:对已经关闭的的chan进行读写,会怎么样?为什么?
问题对已经关闭的的chan进行读写,会怎么样?为什么?怎么答读已经关闭的chan能一直读到东西,但是读到的内容根据通道内关闭前是否有元素而不同。如果chan关闭前,buffer内有元素还未读,会正确读到chan内的值,且返回的第二个bool值(是否读成功)为true。如果chan关闭前,buffer内有元素已经被读完,chan内无值,接下来所有接收的值都会非阻塞直接成功,返回 channel 元素的零值,但是第二个bool值一直为false。写已经关闭的chan会panic举例1.原创 2020-06-25 08:22:09 · 4415 阅读 · 0 评论 -
golang面试题:对未初始化的的chan进行读写,会怎么样?为什么?
问题对未初始化的的chan进行读写,会怎么样?为什么?怎么答读写未初始化的chan都会阻塞。举例1.写未初始化的chanpackage main// 写未初始化的chanfunc main() { var c chan int c <- 1}// 输出结果fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan send (nil chan)]:main.main() /U.原创 2020-06-21 13:29:34 · 2372 阅读 · 0 评论 -
golang面试题:reflect(反射包)如何获取字段tag?为什么json包不能导出私有变量的tag?
问题json包里使用的时候,会结构体里的字段边上加tag,有没有什么办法可以获取到这个tag的内容呢?举例tag信息可以通过反射(reflect包)内的方法获取,通过一个例子加深理解。package mainimport ( "fmt" "reflect")type J struct { a string //小写无tag b string `json:"B"` //小写+tag C string //大写无tag D string `js.原创 2020-06-15 06:44:35 · 2099 阅读 · 0 评论 -
golang面试题:json包变量不加tag会怎么样?
问题json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?怎么答如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。如果变量首字母大写,则为public。不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。加了tag,从struct转json的时候,json的字段名就是tag里的字段名,原字段名已经没用。举例通过一个例子加深理解。package mainimport ( "encod.原创 2020-06-14 09:02:15 · 1557 阅读 · 0 评论 -
golang面试题:拷贝大切片一定比小切片代价大吗?
问题拷贝大切片一定比小切片代价大吗?怎么答并不是,所有切片的大小相同;三个字段(一个 uintptr,两个int)。切片中的第一个字是指向切片底层数组的指针,这是切片的存储空间,第二个字段是切片的长度,第三个字段是容量。将一个 slice 变量分配给另一个变量只会复制三个机器字。所以 拷贝大切片跟小切片的代价应该是一样的。解释SliceHeader是切片在go的底层结构。type SliceHeader struct { Data uintptr Len int Cap int.原创 2020-06-02 13:02:51 · 1472 阅读 · 0 评论 -
golang面试题:怎么避免内存逃逸?
问题怎么避免内存逃逸?怎么答在runtime/stubs.go:133有个函数叫noescape。noescape可以在逃逸分析中隐藏一个指针。让这个指针在逃逸分析中不会被检测为逃逸。 // noescape hides a pointer from escape analysis. noescape is // the identity function but escape analysis doesn't think the // output depends on the input.原创 2020-06-08 09:59:12 · 1345 阅读 · 0 评论 -
高频golang面试题:简单聊聊内存逃逸?
问题知道golang的内存逃逸吗?什么情况下会发生内存逃逸?怎么答golang程序变量会携带有一组校验数据,用来证明它的整个生命周期是否在运行时完全可知。如果变量通过了这些校验,它就可以在栈上分配。否则就说它 逃逸了,必须在堆上分配。能引起变量逃逸到堆上的典型情况:在方法内把局部变量指针返回 局部变量原本应该在栈中分配,在栈中回收。但是由于返回时被外部引用,因此其生命周期大于栈,则溢出。发送指针或带有指针的值到 channel 中。 在编译时,是没有办法知道哪个 goroutine 会在 c.原创 2020-06-03 08:40:16 · 749 阅读 · 1 评论 -
golang面试题:翻转含有`中文、数字、英文字母`的字符串
问题翻转含有中文、数字、英文字母的字符串"你好abc啊哈哈"代码实现package mainimport"fmt"func main() { src := "你好abc啊哈哈" dst := reverse([]rune(src)) fmt.Printf("%v\n", string(dst))}func reverse(s []rune) []rune { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i].原创 2020-06-02 13:01:58 · 1364 阅读 · 0 评论 -
golang面试题:能说说uintptr和unsafe.Pointer的区别吗?
问题能说说uintptr和unsafe.Pointer的区别吗?怎么答unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象, uintptr 类型的目标会被回收;unsafe.Pointer 可以和 普通指针 进行相互转换;unsafe.Pointer 可以和 uintptr 进行相互转换。举例通过一个例子加深理解,接下来尝试用指针的.原创 2020-06-02 12:59:05 · 902 阅读 · 0 评论 -
go module使用教程:使用go mod的方法.报错go: cannot determine module path for source directory E:\tttttt (outside
使用go mod的方法单独从大工程里拷出小文件想新建新文件工程时,部分文件路径名报红,出现报错go: cannot determine module path for source directory E:\tttttt (outside GOPATH, no import comments)1.在src 目录下新建 go.mod文件2. go.mod中第一行加入一行内容 module ...原创 2019-03-11 17:14:02 · 22922 阅读 · 3 评论