请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

本课程常见的问题及解答[持续更新……]

Go语言的课程开设以来,同学们踊跃参与问答区的讨论,提出了很多高质量的问题。这里我总结了一些常见的问题,统一进行解答~希望同学们在提问题的时候,可以先看下常见问题总结,方便大家更高效、更及时的解决问题!

   1、请问会不会有反射的内容呢

       答:reflect我在本课程中故意没有安排。对初学者来说,reflect太强大太容易滥用。的确很多开源项目会用到,因为它们提供的是基础设施。而我们如果是做功能性的项目,就要尽量避免使用reflect。另一方面,如果我们觉得一定要用,那我们应该考虑下是否有开源的库已经为我们完成了这个需求。


2、问:我们在idea中运行时,发现panic的内容和正常输出的内容混在一起,如下图,这是为什么?

    //img1.sycdn.imooc.com//szimg/5ad0547e00016b0712200841.jpg


答:这是idea的原因。panic的内容是往stderr输出的,正常的输出时去到stdout。这是两个不同的输出目的地,idea在打印的时候有时会混在一起。使用命令行的话就不会。


3、问:老师推荐什么Go语言的包管理工具?

  答:Go语言的包管理工具现在没有一到两个业界比较公认的,相反,这样的工具有很多个。这里有一篇比较的文章https://studygolang.com/articles/10523,以及一个统计https://github.com/blindpirate/report-of-build-tools-for-java-and-golang 

那么我们如何推荐呢?我的建议是,首先,看你要依赖的包使用什么进行管理,那你也用什么。其次,根据自己的喜好,如果对某个工具有所了解,比如对gradle有所了解,那我们可以使用自己熟悉的。实在无从选择,我们选dep,虽然还不是正式版。

那么Go语言缺乏一个业界公认的包管理工具,是不是就不完整了呢,不是这样。包管理和语言,本身就是两个不同的项目。c/c++有make。java看似classpath是个很朴素的想法,你运行的时候告诉我类在哪里嘛,但实际上给人们也带来了很多痛苦,直到maven/gradle这样的方案。同样,python后来也才有了pip,anaconda等。我们看到依赖管理一般都滞后于语言本身。go语言现在也面临这样的情况。


4、问:我们运行gopm获取第三方包的时候,总是遇到网络不通,cannot find revision等各种错误

答:gopm目前的确处于挂掉的状态,我们只能采用https://www.golangtc.com/download/package里的方法进行手动下载。的确有些复杂,但是相信上了我的课后同学应该能够按照里面的步骤进行操作。


5、问:在Windows下,换行符是\r\n。老师的代码,比如在第12章读取迷宫内容,似乎只能正确处理\n的情况

答:Go语言的FScanf似乎有这样的bug。在Windows下,我们可以在读完一行内容后,加上fmt.Fscanln(file)来解决这个问题。这个bug目前处于open状态:https://github.com/golang/go/issues/23562


6、问:老师,我是跟着你一行一行敲的,可运行为啥还是不对呢?

答:既然是同学敲的,就是同学自己的代码。这里很可能在敲代码中隐藏了非常小的错误,但是又和我的代码非常相近,所以无法看出问题。这样的情况我们要尽量做到就好像没有我的代码,我们自己写了这些,然后来进行逻辑分析和排错。不到万不得已,大家不要去对比自己的代码和我的代码,因为很可能受到某种误导而无法看出问题来。另外,如果你已经能够访问我提供的标准代码,那我们可以运行一下,看看标准代码是否正确。如果正确的话,我们通过文件比较工具,而不是人肉检查,来看是否有不同。


7、问:如何查看本课程的代码,本课程ppt提供下载吗?

答:课程代码有两份,“项目栏”的代码为初始代码,购买课程后就可以下载。“同学栏”为最终代码,学习进度到40%后方可下载。因为涉及版权问题,所以ppt不提供下载。


8、问:我常看到你按一个快捷键,就能自动把表达式的值提取出来赋给变量。还能自动提取函数等。这些是什么快捷键。

答:我最常用的两个快捷键,一个叫Extract->Method,一个叫Extract->Variable,以及Rename。可以通过idea的配置里面,进到Keymap找到。

其中Extract->Variable最为有用。它可以选择表达式提取变量,也可以把函数调用后的返回值值赋给变量。

//img1.sycdn.imooc.com//szimg/5ad0557300015c3c08690910.jpg


正在回答 回答被采纳积分+3

8回答

提问者 ccmouse 2018-04-13 13:49:07

问:我常看到你按一个快捷键,就能自动把表达式的值提取出来赋给变量。还能自动提取函数等。这些是什么快捷键。

答:我最常用的两个快捷键,一个叫Extract->Method,一个叫Extract->Variable,以及Rename。可以通过idea的配置里面,进到Keymap找到。

其中Extract->Variable最为有用。它可以选择表达式提取变量,也可以把函数调用后的返回值值赋给变量。

https://img1.sycdn.imooc.com//szimg/5ad044850001b7cf06520962.jpg


1 回复 有任何疑惑可以回复我~
  • 请问老师~
    
    VS Code 有方法可以达成类似的效果吗?
    回复 有任何疑惑可以回复我~ 2021-06-07 14:08:46
  • 同问vscode有没有类似的方式
    回复 有任何疑惑可以回复我~ 2023-11-30 14:16:18
提问者 ccmouse 2018-04-13 14:41:48

问:请问会不会有反射的内容呢

答:reflect我在本课程中故意没有安排。对初学者来说,reflect太强大太容易滥用。的确很多开源项目会用到,因为它们提供的是基础设施。而我们如果是做功能性的项目,就要尽量避免使用reflect。另一方面,如果我们觉得一定要用,那我们应该考虑下是否有开源的库已经为我们完成了这个需求。


0 回复 有任何疑惑可以回复我~
  • 很好奇啊,想学。可以出一个进阶课程专门讲讲这个内容吗?然后带大家看别人源码,搞清楚它的强大点和使用场景。
    回复 有任何疑惑可以回复我~ 2020-04-01 12:53:54
  • 提问者 ccmouse 回复 Curious1990 #2
    这是个好建议。同学可以先看一下json.Unmarshal这块的源码来学习一下。具体主要在这两处:
    
    https://github.com/golang/go/blob/8e6a8d9e282a6f9aeab5635c75c223129f5ab61f/src/encoding/json/decode.go#L170
    
    https://github.com/golang/go/blob/8e6a8d9e282a6f9aeab5635c75c223129f5ab61f/src/encoding/json/decode.go#L920
    回复 有任何疑惑可以回复我~ 2020-04-01 21:01:46
提问者 ccmouse 2018-04-13 14:40:41

问:我们在idea中运行时,发现panic的内容和正常输出的内容混在一起,如下图,这是为什么?

https://img1.sycdn.imooc.com//szimg/5ad050910001ddd212270870.jpg

答:这是idea的原因。panic的内容是往stderr输出的,正常的输出时去到stdout。这是两个不同的输出目的地,idea在打印的时候有时会混在一起。使用命令行的话就不会。

0 回复 有任何疑惑可以回复我~
提问者 ccmouse 2018-04-13 14:36:02

问:老师推荐什么Go语言的包管理工具?

答:Go语言的包管理工具现在没有一到两个业界比较公认的,相反,这样的工具有很多个。这里有一篇比较的文章https://studygolang.com/articles/10523,以及一个统计https://github.com/blindpirate/report-of-build-tools-for-java-and-golang 

那么我们如何推荐呢?我的建议是,首先,看你要依赖的包使用什么进行管理,那你也用什么。其次,根据自己的喜好,如果对某个工具有所了解,比如对gradle有所了解,那我们可以使用自己熟悉的。实在无从选择,我们选dep,虽然还不是正式版。

那么Go语言缺乏一个业界公认的包管理工具,是不是就不完整了呢,不是这样。包管理和语言,本身就是两个不同的项目。c/c++有make。java看似classpath是个很朴素的想法,你运行的时候告诉我类在哪里嘛,但实际上给人们也带来了很多痛苦,直到maven/gradle这样的方案。同样,python后来也才有了pip,anaconda等。我们看到依赖管理一般都滞后于语言本身。go语言现在也面临这样的情况。

0 回复 有任何疑惑可以回复我~
提问者 ccmouse 2018-04-13 14:25:11

问:我们运行gopm获取第三方包的时候,总是遇到网络不通,cannot find revision等各种错误

答:gopm目前的确处于挂掉的状态,我们只能采用https://www.golangtc.com/download/package里的方法进行手动下载。的确有些复杂,但是相信上了我的课后同学应该能够按照里面的步骤进行操作。

0 回复 有任何疑惑可以回复我~
提问者 ccmouse 2018-04-13 14:22:01

问:在Windows下,换行符是\r\n。老师的代码,比如在第12章读取迷宫内容,似乎只能正确处理\n的情况

答:Go语言的FScanf似乎有这样的bug。在Windows下,我们可以在读完一行内容后,加上fmt.Fscanln(file)来解决这个问题。这个bug目前处于open状态:https://github.com/golang/go/issues/23562

0 回复 有任何疑惑可以回复我~
提问者 ccmouse 2018-04-13 13:56:56

问:老师,我是跟着你一行一行敲的,可运行为啥还是不对呢?

答:既然是同学敲的,就是同学自己的代码。这里很可能在敲代码中隐藏了非常小的错误,但是又和我的代码非常相近,所以无法看出问题。这样的情况我们要尽量做到就好像没有我的代码,我们自己写了这些,然后来进行逻辑分析和排错。不到万不得已,大家不要去对比自己的代码和我的代码,因为很可能受到某种误导而无法看出问题来。另外,如果你已经能够访问我提供的标准代码,那我们可以运行一下,看看标准代码是否正确。如果正确的话,我们通过文件比较工具,而不是人肉检查,来看是否有不同。

0 回复 有任何疑惑可以回复我~
提问者 ccmouse 2018-04-13 13:51:42

问:如何查看本课程的代码,本课程ppt提供下载吗?

答:课程代码有两份,“项目栏”的代码为初始代码,购买课程后就可以下载。“同学栏”为最终代码,学习进度到40%后方可下载。因为涉及版权问题,所以ppt不提供下载。



0 回复 有任何疑惑可以回复我~
  • wlxz #1
    “同学栏”在哪里?
    回复 有任何疑惑可以回复我~ 2020-02-01 00:19:31
  • 提问者 ccmouse 回复 wlxz #2
    现在应该就是在“下载”里面,是一个慕课网的git仓库,具体地址为 
     https://git.imooc.com/coding-180/?location=https%3A%2F%2Fgit.imooc.com%2Fcoding-180%2F
    回复 有任何疑惑可以回复我~ 2020-02-02 16:44:30
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信