《go 学习笔记之有意思的变量和不安分的常量.docx》由会员分享,可在线阅读,更多相关《go 学习笔记之有意思的变量和不安分的常量.docx(17页珍藏版)》请在金锄头文库上搜索。
1、go 学习笔记之有意思的变量和不安分的常量如果图片失效,请访问原文 https:/ 或者 https:/ Go 语言的爱好者至少拥有其他语言的编程经验,如果是完全零基础的小白用户,本教程可能并不适合阅读或尝试阅读看看,系列笔记的目标是站在其他语言的角度学习新的语言,理解 Go 语言,进而写出真正的 Go 程序.编程语言中一般都有变量和常量的概念,对于学习新语言也是一样,变量指的是不同编程语言的特殊之处,而常量就是编程语言的共同点.学习 Go 语言时尽可能站在宏观角度上分析变量,而常量可能一笑而过或者编程语言不够丰富,所谓的常量其实也是变量,不管怎么样现在让我们开始 Go 语言的学习之旅吧,本教
2、程涉及到的源码已托管于 github,如需获取源码,请直接访问 https:/ Hello World 程序学习编程语言的第一件事就是编写出 Hello World,现在让我们用 Go 语言开发出第一个可运行的命令行程序吧!环境前提准备可以参考 走进Goland编辑器新建 main 目录,并新建 hello_world.go 文件,其中文件类型选择 Simple Application ,编辑器会帮助我们创建 Go 程序骨架.外链图片转存失败(img-lffKvugo-1565600619719)(/images/go-base-grammar-new-go-application.png)首
3、先输入 fmt 后触发语法提示选择 fmt.Println ,然后会自动导入 fmt 包.外链图片转存失败(img-9dcrsgY1-1565600619720)(/images/go-base-grammar-go-application-prompt.png)完整内容如下,仅供参考:package mainimport fmtfunc main() fmt.Println(Hello World)点击左侧绿色启动按钮,可以直接运行程序或者利用程序自带的 Terminal 终端选项卡运行程序,当然也可以用外部命令行工具运行程序.外链图片转存失败(img-EcOyMfUW-1565600619
4、721)(/images/go-base-grammar-go-application-run.png)go run 命令直接运行,而 go build 命令产生可执行文件,两种方式都能如愿以偿输出 Hello World .外链图片转存失败(img-SfHLaBgt-1565600619722)(/images/go-base-grammar-go-application-build.png)知识点归纳Go 应用程序入口的有以下要求: 必须是 main 包 :package main 必须是 main 方法 : func main() 文件名任意不一定是 main.go,目录名也任意不一定是
5、 main 目录.以上规则可以很容易在编辑器中得到验证,任意一条不符合规则,程序都会报错提示,这也是使用编辑器而不是命令行进行学习的原因,能够帮助我们及时发现错误,方便随时验证猜想.总结来说,main 包不一定在 main 目录下,main 方法可以在任意文件中.这也意味着程序入口所在的目录不一定叫做 main 目录却一定要声明为 main 包,虽然不理解为什么这么设计,这一点至少和 Java 完全不一样,至少意味着 Go文件可以直接迁移目录而不需要语言层面的重构,可能有点方面,同时也有点疑惑?!外链图片转存失败(img-0pLgc2sG-1565600619722)(/images/go-b
6、ase-grammar-main-rule-surprise.png)main 函数值得注意的不同之处: main 函数不支持返回值,但可以通过 os.Exit 返回退出状态外链图片转存失败(img-WEyU7ViS-1565600619723)(/images/go-base-grammar-main-rule-return.png)main 函数,不支持返回值,若此时强行运行 main 方法,则会报错: func main must have no arguments and no return values外链图片转存失败(img-PfT7rpl6-1565600619724)(/ima
7、ges/go-base-grammar-main-rule-exit.png)main 函数可以借助 os.Exit(-1) 返回程序退出时状态码,外界可以根据不同状态码识别相应状态. main 函数不支持传入参数,但可以通过 os.Args 获取参数外链图片转存失败(img-SmS9TekE-1565600619726)(/images/go-base-grammar-main-rule-args.png)在 Terminal 终端选项卡中运行 go run hello_world.go snowdreams1006 命令 os.Args 输出命令路径和参数值.在测试用例中边学边练基础语法T
8、he master has failed more times than the beginner has tried计算机编程不是理科而是工科,动手亲自实践一遍才能更好地掌握知识技能,幸运的是,Go 语言本身内置提供了测试框架,不用加载第三方类库扩展,非常有利于学习练习.刚刚接触 Go 语言,暂时不需要深入讲解如何编写规范的测试程序,毕竟基础语法还没开始正式练习呢!但是,简单的规则还是要说的,总体来说,只有两条规则: 测试文件名以 _test 结尾 : XXX_test.go命令习惯和不同, Java 中的文件名一般是大驼峰命名法,相应的测试文件是 XXXTest 测试方法名以 Test 开
9、头 : TestXXX命名习惯和其他编程语言不同,Java 中的测试方法命名是一般是小驼峰命名法,相应的测试方法是 testXXX 测试方法有着固定的参数 : t *testing.T其他编程语言中一般没有参数,Java 中的测试方法一定没有参数,否则抛出异常 java.lang.Exception: Method testXXX should have no parameters新建 Go 文件,类型选择 Empty File ,文件名命名为 hello_world_test ,编辑器新建一个空白的测试文件.外链图片转存失败(img-PRA7z7Nw-1565600619727)(/imag
10、es/go-base-grammar-test-rule-file.png)此时编写测试方法签名,利用编辑器自动提示功能输入 t.Log 随便输出些内容,这样就完成了第一个测试文件.外链图片转存失败(img-VssEBwCW-1565600619747)(/images/go-base-grammar-test-rule-log.png)和 main 程序一样,测试方法也是可执行的,编辑器窗口的左侧也会出现绿色启动按钮,运行测试用例在编辑器下方的控制台窗口输出 PASS 证明测试逻辑正确!外链图片转存失败(img-i65ymFAL-1565600619748)(/images/go-base-
11、grammar-test-rule-pass.png)测试文件源码示例:package mainimport testingfunc TestHelloWorld(t *testing.T) t.Log(Hello Test)现在已经学习了两种基本方式,一种是把程序写在 main 方法中,另一种是把程序写在测试方法中.两种方式都可以随时测试验证我们的学习成果,如果写在 main 方法中,知识点一般要包装成单独的方法,然后再在 main 方法中运行该方法.如果写在测试方法中,可以单独运行测试方法,而不必在 main 方法中一次性全部运行.当然,这两种方式都可以,只不过个人倾向于测试用例方式.实现
12、 Fibonacci 数列形如 1,1,2,3,5,8,13,. 形式的数列就是斐波那契数列,特点是从三个元素开始,下一个元素的值就是前两两个元素值的总和,子子孙孙无穷尽也!记得学习初中历史时,关于昭君出塞的故事广为人知,王昭君的美貌不是此次讨论的重点,而此次关注点是放到了昭君的悲惨人生.汉朝和匈奴和亲以换取边境和平,汉朝皇帝不愿意自己的亲闺女远嫁塞北,于是从后宫中挑选了一名普通宫女充当和亲对象,谁成想这名宫女竟长得如此美貌,“沉鱼落雁闭月羞花”,堪称古代中国四大美女之一!昭君担负着和亲重任,从此开始了远离他乡的悲惨生活,一路上,黄沙飞扬,燥热忧伤,情之所至,昭君拿出随性的琵琶,演奏出感人泪下
13、的!“千载琵琶作胡语,分明怨恨曲中论”,可能情感过于哀伤,竟然连天上的大雁都忘记了飞翔,因此收获落雁之美!外链图片转存失败(img-rnPrRfO0-1565600619748)(/images/go-base-grammar-fibonacci-zhaojun.jpg)老单于这个肥波纳了个如花似玉的妾,做梦都能了醒吧,遗憾的是,命不久矣!如此一来,昭君却满心欢喜,异族老公死了,使命完成了,应该能回到朝思梦想的大汉朝故土了吧?命运弄人,匈奴文化,父死子继,肥波已逝,但还有小肥波啊,放到汉朝伦理纲常来看,都不能叫做近亲结婚了简直是乱伦好吗!小肥波+昭君=小小肥波 ,只要昭君不死,而昭君的现任老公
14、不幸先死,那么小小肥波又会继续纳妾生娃,理论上真的是子子孙孙无穷尽也!肥波纳妾故事可能长成这个样子: 肥波,昭君,小肥波昭君的第一任老公: 肥波+昭君=小肥波,此时昭君刚生一个娃 肥波,小肥波,昭君,小小肥波昭君的第二任老公: 小肥波+昭君=小小肥波,昭君的娃娶了自己的妈?难怪昭君苦楚悲惨,有苦难言,幸运的是,这次昭君没有生娃,两个女孩! 肥波,小肥波,小小肥波,昭君昭君的第三任老公,小小肥波+昭君=小小小肥波 ,兄终弟及,还是乱伦好吗,这辈分我是算不出来了.肥波纳妾系列,理论上和愚公移山有的一拼,生命不息,子承父业也好,兄终弟及也罢,数量越来越多,肚子越来越大.以上故事,纯属虚构,昭君出塞是一件伟大的事情,换来了百年和平,值得尊敬.回归正题,下面让我们用 Go 语言实现斐波那契数列吧!外链图片转存失败(img-cQRxzhqn-1565600619751)(/images/go-base-grammar-fibonacci-test.png)func TestFib(t *testing.T) var a = 1 var b = 1 fmt.Print(a) for i := 0; i 6; i+ fmt.Print( , b) temp := a a = b b = temp + b fmt.Println(