go-questions icon indicating copy to clipboard operation
go-questions copied to clipboard

📖 Go 程序员面试笔试宝典 | 从问题切入,串连 Go 语言相关的所有知识,融会贯通。 https://golang.design/go-questions

Results 21 go-questions issues
Sort by recently updated
recently updated
newest added

go 源码 sizeclasses.go 文件中 class_to_size 源码内容有更新 Log: https://github.com/golang/go/commit/14c7caae5074fdf0d97a3ad995e20c63e4065cbf

## 问题描述 作者你好,想请问下,关于书中第 201 页以及其他一些函数中会用到一个 get_tls 方法。我能理解汇编可以通过 fs 段找到 m.tls,但是想问下这里为啥不能直接在 m 这个结构体上获取 g 呀?比如在这个 schedinit 函数中,m0 就是和他同一个包的全局变量,直接从它身上把 m0.tls 捞出来再去拿 g,这样会有什么问题么? 另外还想请问下,所谓的把 m 和主线程绑定,我理解本质上就是通过系统调用把 m.tls[1] 的地址存到 fs 段指向的内存,这个的目的除了是可以直接通过汇编的方式以 fs 寄存器找到当前的 m.tls(比如...

关于279页贴的Go仓库Issue

[{"_id":"63545221d297b6213230cb46","body":"\u611f\u8c22\u6307\u51fa\uff0c\u5e94\u8be5\u662f https:\/\/go.dev\/issue\/42430","issue_id":1660700178678,"origin_id":1186573508,"user_origin_id":5498964,"create_time":1658077556,"update_time":1658077583,"id":1666470433975,"updated_at":"2022-10-22T20:27:13.975000Z","created_at":"2022-10-22T20:27:13.975000Z"}] comment

原文页码:279页 问题:该页最后一行,关于Go内存问题的Issue是不是贴错了,书中写的是[#43430](https://github.com/golang/go/issues/43430)

## 实际描述 - 原文页码:go-questions/content/channel/7-操作 channel 的情况总结.md - 原文段落: ``` 读、写一个 nil channel 都会被阻塞。 ``` ## 预期描述 ``` 读、写一个 nil channel 未初始化的channel都会导致deadlock。 ``` ## 附图

## 实际描述 - 原文页码: - p290 p291 - 原文段落: 图14-16和图14-7 图14-16的Dijxxxx(C.ref3, C.ref2,ref1)的逗号应该变成点Dijxxxx(C.ref3, C.ref2.ref1) 图14-7的Yuasaxx(A.ref3,B)应该变成Yuasaxx(C.ref3,B) 还有这两幅图和你博客上的出入非常大,你可以仔细对比下,希望尽快纠正

切片作为函数参数这一章节,倒数第三段描述应该不准确

[{"_id":"664f670e4ecfda50de1a5395","body":"\u8fd9\u91cc\u7684\u63cf\u8ff0\u4e5f\u611f\u89c9\u6709\u70b9\u6b67\u4e49\u3002\r\n> \u679c\u771f\u6539\u53d8\u4e86\u539f\u59cb slice \u7684\u5e95\u5c42\u6570\u636e\u3002\u8fd9\u91cc\u4f20\u9012\u7684\u662f\u4e00\u4e2a slice \u7684\u526f\u672c\uff0c\u5728 f \u51fd\u6570\u4e2d\uff0cs \u53ea\u662f main \u51fd\u6570\u4e2d s \u7684\u4e00\u4e2a\u62f7\u8d1d\u3002\u5728f \u51fd\u6570\u5185\u90e8\uff0c\u5bf9 s \u7684\u4f5c\u7528\u5e76\u4e0d\u4f1a\u6539\u53d8\u5916\u5c42 main \u51fd\u6570\u7684 s\u3002\r\n\u4f46\u5c31\u7ed3\u679c\u6765\u770b\uff0c\u5bf9 f\u51fd\u6570\u5185s \u7684\u4f5c\u7528\u6539\u53d8\u4e86\u5916\u5c42 main \u51fd\u6570\u7684 s\u3002\r\n\u6211\u7406\u89e3\u5176\u5b9e\u4f20\u7684\u4e0d\u662fslice\u7684\u526f\u672c\uff0c\u800c\u662fslice\u6307\u9488\u7684\u526f\u672c\uff0c\u56e0\u4e3aslice\u672c\u8eab\u5c31\u662f\u5f15\u7528\u7c7b\u578b\u53d8\u91cf\uff0c\u6240\u4ee5\u5728f\u51fd\u6570\u4e2d\u4fee\u6539s\u7684\u503c\uff0cslice\u7684\u503c\u4e5f\u88ab\u4fee\u6539\u3002\r\n````go\r\nfunc main() {\r\n\tslice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}\r\n\tfmt.Printf(\"%p\\n\", slice)\r\n\tf(slice)\r\n}\r\nfunc f(s []int) {\r\n\tfmt.Printf(\"%p\\n\", s)\r\n}\r\n````\r\n\u8f93\u51fa\u7684\u7ed3\u679c\uff1a\r\n````\r\n0x1400001c0f0\r\n0x1400001c0f0\r\n````","issue_id":1660700178688,"origin_id":1407668939,"user_origin_id":39456731,"create_time":1675000248,"update_time":1675000963,"id":1716479758029,"updated_at":"2024-05-23T15:55:58.028000Z","created_at":"2024-05-23T15:55:58.028000Z"}] comment

## 问题描述 请在此描述你的问题,提问前请参考[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/master/README-zh_CN.md) 原文是这么说的: > myAppend 函数里,虽然改变了 s,但它只是一个值传递,并不会影响外层的 s,因此第一行打印出来的结果仍然是 [1 1 1]。 这个地方我在第一次看到的时候有点歧义,虽说slice是一个值传递,但是slice中是包含是指向数组的指针的。按理说,值传递的也是数组的指针。 经过验证,不影响的准确原因应该是append触发了slice的扩容,扩容会导致copy,也就是说slice结构体中指向数组的指针发生了变化。因此外层的s不会发生变化。 如果是直接修改slice元素,内外层都会改变 ```go func myAppend(s []int) []int { //s = append(s, 100) s[0] = 100 fmt.Printf("s point...

第三章:数据容器3.1.2-Page22

[{"_id":"63545bb9d297b6213230d274","body":"\u8c22\u8c22\uff0c\u60a8\u7684\u6765\u4fe1\u5df2\u7ecf\u6536\u5230\uff01\u795d\u8eab\u4f53\u5065\u5eb7\uff0c\u5929\u5929\u5f00\u5fc3\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\u00a0\u2014\u2014\u8d75\u8d85","issue_id":1660700178691,"origin_id":1149905691,"user_origin_id":25920906,"create_time":1654694346,"update_time":1654694346,"id":1666472889734,"updated_at":"2022-10-22T21:08:09.734000Z","created_at":"2022-10-22T21:08:09.734000Z"}] comment

## 实际描述 - 原文页码:P22 - 原文段落:从上至下第三段 ``` 再次向S2追加元素200: `s2 = append(s2, 100)` ``` ## 预期描述 ``` 再次向S2追加元素200: `s2 = append(s2, 200)`这里应该是200不是100 ``` ## 附图 必要时,请附上相关页面的照片或者截图

## 实际描述 - 原文页码:64 - 原文段落:图 4-3 ``` 缓冲区是否有数据? - 是 ... - 否 -> (返回true, true) -> 复制缓冲区元素 ``` ## 预期描述 ``` 缓冲区是否有数据? - 是 -> (返回true, true) ->...

## 实际描述 https://golang.design/go-questions/sched/when/ - 原文页码: - 原文段落: ``` 复制原文段落 ``` ![image](https://user-images.githubusercontent.com/10476131/169644572-f3bfc262-6b13-4d70-b9f5-9b014ae6818a.png) ## 预期描述 还包括 “函数调用”的时候,每个函数头都有一行栈检查代码。会有一个背景程序(来达到抢占式调度的目的)定时污染这个栈limit,导致程序进入runtime, 触发调度 参考 https://www.youtube.com/watch?v=-K11rY57K7k 52:24 function prologue ![image](https://user-images.githubusercontent.com/10476131/169644977-e199566f-68f9-47bd-816f-5e34c92a5581.png) 52:41 spoof stack limit 或者也可以参考 https://golangbyexample.com/goroutines-golang/ ![image](https://user-images.githubusercontent.com/10476131/169645065-44878955-d3a0-44c5-a38e-65c2c6a9e2f2.png) ```...

## 实际描述 B=5时 bucket num 由 hash 的低 5 位决定 - 原文页码:1-map - 原文段落:310-313 行 ``` go // 比如 B=5,那 m 就是31,二进制是全 1 // 求 bucket num 时,将 hash 与...