Deen

Deen 查看完整档案

北京编辑  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑

软件硬件开发爱好者,golang粉,搞一搞存储、rpc。node跟风者,为electron写一些C++模块还不是美滋滋。细究过PHP底层,虽然现在很少写PHP但还是认为PHP是最好的语言。玩树莓派51单片机。曾经一度以前端自居,react+redux岂不是美哉,后因贵圈太乱而弃坑。在公司主要在推动golang工程化实践

个人动态

Deen 回答了问题 · 2019-02-20

Status Code: 400 Bad Request

你的请求有问题,是不是参数漏传了?或者对方要POST你是GET?可能情况很多,一句话就是你的请求和服务端预期的不一样

关注 4 回答 3

Deen 回答了问题 · 2017-06-10

解决golang slice 迭代值的地址为何不变?

for i,val := range x 可以等价看为:

var val int
var length = len(x)
for i:=0; i<length; i++ {
    val = x[i]
}

所以val的地址不变,而且val是值拷贝,修改它也不会影响原数组。

关注 4 回答 3

Deen 赞了回答 · 2017-06-10

golang 这段代码为什么会触发 panic ?

题主还是不明白nil,我用你的例子来给你介绍一下。
首先你在main函数里的

var e *Error

这里的e是一个Error类型的指针,而指针的自动初始化为nil,在这里e的确是nil没有错,e==nil

但是当你把e传入进checkError函数时,发生了变化,因为接受的形参是个error接口类型,所以形参err是一个接口值,而一个接口值实际上是包含了实际值和动态类型两个部分的。

err这个接口值大概是这样的(nil,*Error),这里后面的部分*Error表示它的动态类型。

你把err和外面的e做比较时,因为接口类型会断言,所以会相等,err==e

但是你把err和nil做比较时,nil实际上是(nil,nil)这种,比较结果自然是false err!=nil

你把nil用显示类型转换一下,变成了(nil,*Error)后就和err相同了, err==(*Error)(nil)

总而言之,就是你把一个拥有实际类型的指针传给了接口,那么这个接口值永远不可能是nil。

golang这个设计是因为接口值持有的类型必须是动态的。

关注 5 回答 4

Deen 回答了问题 · 2017-03-25

Go 居然可以通过 reflect 设置私有变量的值为零?

私有变量是改不了的,正如一楼所说,你那段代码实际上是new了一个新对象,而新对象的int字段的默认值就是0

关注 4 回答 5

Deen 回答了问题 · 2017-01-28

初学Go语言,对channel、并发的疑问

在goroutine中执行的代码,可能在任何一个语句后被调度。在test里向channel里塞数据,这个也是会被调度的,而且一定会被调度,因为你的channel没有buffer。所以channel一塞数据,调度到main去取数据。main取完数据,鬼知道它又会调度到哪个goroutine去执行。按你的输出,又调度到了塞数据的那个goroutine执行了。所以先打印出0 go也是可以的。后面的,可能就是塞完数据就一直阻塞,等value都打印完,才调度回去打印k go

关注 4 回答 6

Deen 关注了问题 · 2016-12-01

面试题:为什么要用闭包?

看了这个回答似乎也不是了解的很透彻啊

我是学Java的。今天在面试的时候面试官提及匿名类,我说Java8里面提供了Lamada式,在JS里也有闭包这个概念。面试官问什么是闭包?为什么要用闭包?

  • 我说:用来控制访问啊。内部可以访问外部,但是外部不能访问内部。

面试官似乎不是很满意这样的回答。不知各位大神对这个问题有什么看法?

关注 37 回答 13

认证与成就

  • 获得 35 次点赞
  • 获得 98 枚徽章 获得 8 枚金徽章, 获得 39 枚银徽章, 获得 51 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2014-07-31
个人主页被 1.1k 人浏览