Go
go日常工作学习与实战内容汇总
云梦优选
云梦优选致力于在校大学生计算机前沿技术复合型才培养,让每位IT学子从校园走上工作岗位时能无缝连接。
展开
-
golang面试-day105
参考答案及解析:D。加锁后复制变量,会将锁的状态也复制,所以 mu1 其实是已经加锁状态,再加锁会死锁。参考答案及解析:B。能正确输出,不过主协程会阻塞 f() 函数的执行。原创 2024-08-18 09:20:55 · 304 阅读 · 0 评论 -
golang面试-day104
参考答案及解析:D。WaitGroup 在调用 Wait() 之后不能再调用 Add() 方法的。参考答案及解析:ABC。原创 2024-08-17 20:43:19 · 277 阅读 · 0 评论 -
golang面试-day103
参考答案及解析:输出 0 40 50。知识点:defer 语句与返回值。函数的 return value 不是原子操作,而是在编译器中分解为两部分:返回值赋值 和 return。参考答案及解析:D。当写锁阻塞时,新的读锁是无法申请的(有效防止写锁饥饿),导致死锁。原创 2024-08-16 17:51:04 · 443 阅读 · 0 评论 -
golang面试-day102
参考答案及解析:第一个是声明无缓存通道,第二个是声明缓存为 1 的通道。无缓存通道需要一直有接收者接收数据,写操作才会继续,不然会一直阻塞;而缓冲为 1 则即使没有接收者也不会阻塞,因为缓冲大小是 1 ,只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。注意这两者还是有区别的。参考答案即解析:D。使用 Lock() 加锁后,不能再继续对其加锁,直到利用 Unlock() 解锁后才能再加锁。原创 2024-08-16 17:50:33 · 444 阅读 · 0 评论 -
golang面试-day101
关于循环语句,下面说法正确的有?参考答案及解析:CD。原创 2024-08-16 17:49:53 · 276 阅读 · 0 评论 -
golang面试-day100
参考答案即解析:在执行 Get() 方法时可能报错。虽然可以使用 sync.Mutex 做写锁,但是 map 是并发读写不安全的。map 属于引用类型,并发读写时多个协程是通过指针访问同一个地址,即访问共享变量,此时同时读写资源存在竞争关系,会报错 “fatal error: concurrent map read and map write”。参考答案即解析:按字母无序输出。知识点:遍历 map 是无序的。原创 2024-08-15 12:23:30 · 221 阅读 · 0 评论 -
golang面试-day99
参考答案即解析:编译通过。true 是预定义标识符可以用作变量名,但是不建议这么做。参考答案即解析:100。知识点:变量作用域和defer 返回值。原创 2024-08-14 10:02:28 · 660 阅读 · 0 评论 -
golang面试-day98
参考答案及解析:1。知识点:变量的作用域。注意 for 语句的变量 a 是重新声明,它的作用范围只在 for 语句范围内。参考答案即解析:编译错误。知识点:变量的作用域。编译错误信息:ret is shadowed during return。原创 2024-08-14 10:01:49 · 244 阅读 · 0 评论 -
golang 面试-day97
参考答案及解析:输出 0。使用值类型接收者定义的方法,调用的时候,使用的是值的副本,对副本操作不会影响的原来的值。如果想要在调用函数中修改原值,可以使用指针接收者定义的方法。参考答案及解析:A。知识点:map 的使用。可以查看《Go Map》原创 2024-08-14 10:01:07 · 448 阅读 · 0 评论 -
golang面试-day96
参考答案及解析:get() 函数返回的切片与原切片公用底层数组,如果在调用函数里面(这里是 main() 函数)修改返回的切片,将会影响到原切片。参考答案及解析:输出 [{1 2} {3 4}]。知识点:for range 循环。range 循环的时候,获取到的元素值是副本,就比如这里的 p。原创 2024-08-13 09:15:09 · 247 阅读 · 0 评论 -
golang面试-day95
参考答案及解析:false true true。这道题唯一有疑问的地方就在第一个比较,Go 语言里没有引用变量,每个变量都占用一个惟一的内存位置,所以第一个比较输出 false。这个知识点在《Go 语言没有引用传递》有介绍。参考答案及解析:1、2随机输出。原创 2024-08-13 09:14:29 · 125 阅读 · 0 评论 -
golang面试-day94
参考答案及解析:C() 函数不能通过编译。C() 函数的 default 属于关键字。string 和 len 是预定义标识符,可以在局部使用。nil 也可以当做变量使用,不过不建议写这样的代码,可读性不好,小心被接手你代码的人胖揍。参考答案及解析:a。Go 语言里面 ^ 表示按位异或,而不是求幂。原创 2024-08-13 09:13:52 · 279 阅读 · 0 评论 -
golang面试-day93
关于 main() 函数,下面说法正确的是?参考答案及解析:ABCD。原创 2024-08-13 09:13:14 · 194 阅读 · 0 评论 -
golang面试-day92
参考答案及解析:编译失败。init() 函数不能被其他函数调用,包括 main() 函数。参考答案即解析:利用 copy() 函数的功能:切片复制,并且返回两者长度的较小值。原创 2024-08-13 09:12:42 · 372 阅读 · 0 评论 -
golang面试-day91
参考答案及解析:Unnamed Type 不能作为方法的接收者。参考答案及解析:第二段代码能通过编译。除 init() 函数之外,一个包内不允许有其他同名函数。原创 2024-08-11 09:43:09 · 524 阅读 · 0 评论 -
golang面试-day90
我们将这两道题目放到一块做一个解析,第一题不能通过编译,第二题可以通过编译。我们知道不同类型的值是不能相互赋值的,即使底层类型一样,所以第一题编译不通过;对于底层类型相同的变量可以相互赋值还有一个重要的条件,即至少有一个不是有名类型(named type)。Unnamed Type 是基于已有的 Named Type 组合一起的类型,例如:struct{}、[]string、interface{}、map[string]bool 等。原创 2024-08-11 09:42:34 · 425 阅读 · 0 评论 -
golang 面试-day89
参考答案及解析:能编译通过,输出 [1 2 3 0 1 2]。for 循环开始的时候,终止条件只会计算一次。参考答案及解析:C。指针变量指向相同的地址。原创 2024-08-11 09:41:46 · 410 阅读 · 0 评论 -
golang 面试-day88
参考答案及解析:false。在 Go 语言里面,^ 作为二元运算符时表示按位异或:对应位,相同为 0,相异为 1。例如,有我们熟悉的组合(3,4,5)、(6、8、10)等。1+6=7,这当然是相等的。你来试试分解下第二段代码的数学表达式。问题来了,下面代码输出什么,请简要说明。参考答案及解析:AD。原创 2024-08-09 08:52:32 · 302 阅读 · 0 评论 -
golang 面试-day87
参考答案及解析:false。在 Go 语言里面,^ 作为二元运算符时表示按位异或:对应位,相同为 0,相异为 1。例如,有我们熟悉的组合(3,4,5)、(6、8、10)等。1+6=7,这当然是相等的。你来试试分解下第二段代码的数学表达式。问题来了,下面代码输出什么,请简要说明。参考答案及解析:AD。原创 2024-08-09 08:51:45 · 224 阅读 · 0 评论 -
golang面试-day86
参考答案及解析:118。Go 语言里面,八进制数以 0 开头,十六进制数以 0x 开头,所以 Decade 表示十进制的 8。参考答案及解析:43200 hours and 600 seconds。知识点:运算符优先级。和 % 的优先级相同,从左向右结合。原创 2024-08-09 08:50:36 · 159 阅读 · 0 评论 -
golang面试-day85
参考答案及解析:输出空字符。这是一个大多数人遇到的坑,TrimRight() 会将第二个参数字符串里面所有的字符拿出来处理,只要与其中任何一个字符相等,便会将其删除。想正确地截取字符串,可以参考 TrimSuffix() 函数。参考答案及解析:输出 []。copy(dst, src) 函数返回 len(dst)、len(src) 之间的最小值。如果想要将 src 完全拷贝至 dst,必须给 dst 分配足够的内存空间。或者直接使用 append()原创 2024-08-08 20:48:59 · 155 阅读 · 0 评论 -
golang面试-day84
参考答案及解析:B。由 panic 引发异常以后,程序停止执行,然后调用延迟函数(defer),就像程序正常退出一样。原创 2024-08-08 20:48:20 · 135 阅读 · 0 评论 -
golang面试-day83
参考答案及解析:A。一个文件夹下只能有一个包,可以多个.go文件,但这些文件必须属于同一个包。结构体类型 data 没有实现接口 printer。参考答案及解析:编译报错。原创 2024-08-08 20:47:02 · 146 阅读 · 0 评论 -
golang面试-day82
参考答案及解析:0 1 1 2。知识点:iota 的使用。这道题易错点在 bzero、bone 的值,在一个常量声明代码块中,如果 iota 没出现在第一行,则常量的初始值就是非 0 值。参考答案及解析:4。当 i 的值为 0、128 是会发生相等情况,注意 byte 是 uint8 的别名。原创 2024-08-08 20:46:28 · 363 阅读 · 0 评论 -
golang面试-day81
参考答案及解析:A。Go语言的内存回收机制规定,只要有一个指针指向引用一个变量,那么这个变量就不会被释放(内存逃逸),因此在 Go 语言中返回函数参数或临时变量是安全的。参考答案即解析:运行时错误。原创 2024-08-08 20:45:50 · 297 阅读 · 0 评论 -
golang面试-day80
参考答案及解析:AD。全局变量要定义在函数之外,而在函数之外定义的变量只能用 var 定义。短变量声明 := 只能用于函数之内。原创 2024-08-08 20:45:09 · 149 阅读 · 0 评论 -
golang面试-day78
参考答案及解析:可以编译通过,输出:true。知识点:Go 代码断行规则。参考答案及解析:AC。原创 2024-08-08 20:44:23 · 296 阅读 · 0 评论 -
golang面试-day77
参考答案即解析:ABD。参考答案及解析:A。可变函数是指针传递。原创 2024-08-08 20:43:28 · 154 阅读 · 0 评论 -
golang面试-day76
知识点:类型断言,结构体嵌套。结构体 S2 嵌套了结构体 S1,S2 自己没有实现 g() ,调用的是 S1 的 g()。参考答案及解析:协程里面,使用 wg.Add(1) 但是没有 wg.Done(),导致 panic()。原创 2024-08-08 07:47:37 · 212 阅读 · 0 评论 -
golang 面试-day75
参考答案及解析:recover:1。知识点:panic、recover()。当程序 panic 时就不会往下执行,可以使用 recover() 捕获 panic 的内容。参考答案及解析:defer 语句应该放在 if() 语句后面,先判断 err,再 defer 关闭文件句柄。原创 2024-08-08 07:46:48 · 117 阅读 · 0 评论 -
golang 面试-day74
参考答案及解析:2、3正确。知识点:简短变量声明。参考答案及解析:for {} 独占 CPU 资源导致其他 Goroutine 饿死。引自《Go语言高级编程》原创 2024-08-08 07:46:02 · 121 阅读 · 0 评论 -
golang 面试-day73
参考答案及解析:{5}。这道题容易忽视的点是,String() 是指针方法,而不是值方法,所以使用 Println() 输出时不会调用到 String() 方法。参考答案及解析:312。对比昨天的第二题,本题的 s.Add(1).Add(2) 作为一个整体包在一个匿名函数中,会延迟执行。原创 2024-08-07 20:16:19 · 132 阅读 · 0 评论 -
golang面试-day72
所以可以循环调用方法 Add();2.defer 函数的参数(包括接收者)是在 defer 语句出现的位置做计算的,而不是在函数执行的时候计算的,所以 s.Add(1) 会先于 s.Add(3) 执行。,对于有符号的整数来说,是按照补码进行取反操作的(快速计算方法:对数 a 取反,结果为 -(a+1) ),对于无符号整数来说就是按位取反。参考答案及解析:132。这一题有两点需要注意:1.Add() 方法的返回值依然是指针类型。,它返回一个每个 bit 位都取反的数。从参考答案及解析:错。原创 2024-08-07 20:15:36 · 119 阅读 · 0 评论 -
golang面试-day70
参考答案及解析:BD。知识点:单引号、双引号和字符串连接。在 Go 语言中,双引号用来表示字符串 string,其实质是一个 byte 类型的数组,单引号表示 rune 类型。参考答案及解析:43。原创 2024-08-07 20:15:00 · 415 阅读 · 0 评论 -
golang-面试69
参考答案及解析:100 110。知识点:闭包引用相同变量。原创 2024-08-07 20:14:20 · 198 阅读 · 0 评论 -
golang面试-day68
参考答案及解析:22222。知识点:defer()、for-range。for-range 虽然使用的是 :=,但是 v 不会重新声明,可以打印 v 的地址验证下。参考答案及解析:goto 不能跳转到其他函数或者内层代码。原创 2024-08-07 20:13:36 · 112 阅读 · 0 评论 -
golang面试-day67
参考答案及解析:9 [{0} {9}]。知识点:for-range 切片。for-range 切片时使用的是切片的副本,但不会复制底层数组,换句话说,此副本切片与原数组共享底层数组。参考答案及解析:9 [{3} {9}]。知识点:for-range 切片。参考前几道题的解析,这道题的答案应该很明显。原创 2024-08-07 20:12:56 · 171 阅读 · 0 评论 -
golang 面试-day66
参考答案及解析:9 [{0} {9}]。知识点:for-range 数组指针。for-range 循环中的循环变量 t 是原数组元素的副本。如果数组元素是结构体值,则副本的字段和原数组字段是两个不同的值。参考答案及解析:0 [{0} {9}]。知识点:for-range 循环数组。此时使用的是数组 ts 的副本,所以 t.n = 3 的赋值操作不会影响原数组。原创 2024-08-07 14:02:14 · 153 阅读 · 0 评论 -
golang面试-day65
参考答案及解析:12。相关知识点请看 第64天 题目解析。参考答案及解析:BCD。原创 2024-08-07 14:01:38 · 175 阅读 · 0 评论 -
golang面试-day64
参考答案及解析:21。recover() 必须在 defer() 函数中调用才有效,所以第 9 行代码捕获是无效的。在调用 defer() 时,便会计算函数的参数并压入栈中,所以执行第 6 行代码时,此时便会捕获 panic(2);此后的 panic(1),会被上一层的 recover() 捕获。原创 2024-08-07 14:00:58 · 183 阅读 · 0 评论