Go语言探险思考笔记
最近接触对象存储,国际上鼎鼎有名的Amazon S3还有Google Cloud Service在国内由于防火墙还有机房过远的问题,并不能投入生产使用。国内有名的对象存储,大家众所周知的七牛云,后台就是Go语言实现的。对于第一个敢吃螃蟹的人,我一直很佩服。于是抱着憧憬的心态走进Go语言的大门。
首先,接触一门语言,就从最啰嗦但是最不能缺少的基础语法和顺序变成开始。对于接触这些,我一般是从搭建好自己的编译构建环境开始,首先下载Go语言SDK,国内下载地址:我这里用的是最新的1.7.2,如果你要用IDEA 的go plugin进行编程,则需要用1.4.2,不能用高版本的。之后,下载LiteIDE,进行编码:我们打开LiteIDE,新建一个非GOPATH目录下的示例项目(我们这里吐槽下LiteIDE,他并不是一个很严谨,很好用,很完整的IDE,对于习惯了IDEA的懒人程序员,可能不太习惯。但是,回归原始也是很有好处的),命名为Gotest。
项目会自动生成目录和代码。我们只保留main.go就可以。Go语言有他智能的一面,首先摆上两个原则:对于每个项目,都需要配置GOPATH。为了能构建这个项目,需要把项目根目录加入到GOPATH,否则找不到这个项目内部的package。
Go根据项目目录结构自动构建,这里基本原则就是:需要一个main入口,自己新建应用或者一个代码包都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称,当然也允许多级目录,例如在src下面新建了目录$GOPATH/src/github.com/hashZhang/test那么这个包路径就是“github.com/hashZhang/test”,包名称是最后一个目录test变量定义Go语言兼顾了自由性和严谨性:首先,对于变量的定义,我们有三种方式,很自由。接着,没用的元素在编译时就不会通过。例如:没用的包引入,没用的变量定义,这些在编译时就会报错。
下面我们写一个小程序:我们在项目根目录新建pkg和src两个文件夹,src目录存放我们的源代码,pkg是给go编译器用的,会生成编译好的文件,其实就是编译好的库文件。根目录保留在src目录下新建fundamental文件夹,在fundamental文件夹新建variables.go。
编写源码(这里先提出一点Go语言不用分号分割,回车就可以):包如果没用,则会在编译时报错,这里用了标准输出函数,模块中要导出的函数,必须首字母大写。
变量如果没有用过,也会在编译时报错,初始化为默认值0注意小写s,初始化为默认值""数组,初始化为默认值动态数组,数组切片,初始化为默认值[]相当于C语言中的结构体,,初始化为默认值}指针,初始化为默认值为string,value为int,初始化为默认值定义为一个function,规定输入输出,初始化为默认值根据初始值自动判断类型第三种初始化}常规思路的交换,利用a+b-a和a+b-b来达到交换的目的)
}语言交换,因为函数可以返回多个值,而且支持类似于a,b=b,a的多重赋值语法)
},对于模块中不需要导出的函数,首字母不要大写。
}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 www.ymzxrj.com 561234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556我们总结下:1 变量有3种定义或初始化方式:1231232.变量类型非常自由,有C语言的结构体,也有像JavaScript那样的函数类型变量。
3.变量赋值很自由,对于其他语言,变量交换有两种方式:一种是中间变量,另一种是利用a+b-a和a+b-b来达到交换的目的。Go语言支持多重赋值,常规思路的交换,利用a+b-a和a+b-b来达到交换的目的)
}语言交换,因为函数可以返回多个值,而且支持类似于a,b=b,a的多重赋值语法)
}1234567891011121314151617181920211234567891011121www.sratchina.com314151617181920214.以上的多重赋值,也来源于Go语言的函数可以返回多个值。
,对于模块中不需要导出的函数,首字母不要大写。
}1231235.Go语言的var关键字和import关键字都支持括号内多个定义,例如:var()
123412346.对于包外部可见的function,function名称开头必须大写(就是说,利用开头字母大写的方法定义包外部可见可以调用的function)
这里我们可以调用的是Initialization(www.lafei333.cn),SwapDisplay1(www.feiyunfan.cn ),SwapDisplay2(www.yunfanfei.cn )方法,而swap方法不可以。
在main.go www.huafanyun.cn 中编写:)
,模块中要导出的函数,必须首字母大写。
,模块中要导出的函数,必须首字母大写,模块中要导出的函数,必须首字母大写}12345678910111213141234567891011121314编译运行:1234567891011121314151617181912345678910111213141516171819生成的文件:这里写图片描述如我们之前所说,在pkg目录下自动生成了.a库文件。在根目录下还生成了和项目名称一样的exe可执行文件。
常量定义Go语言的字面量是无类型的在fundamental文件夹下新建constants.go:包如果没用,则会在编译时报错,这里用了标准输出函数不用像其他语言那样指定是float还是double,末尾加上f,字面量常量都是无类型的,这里实际上是不用像其他语言那样指定是float还是double,末尾加上f,字面量常量都是无类型的,这里实际上是不指定类型也可以,会自动匹配成能容纳这个变量的浮点类型常量)
三种预定义常量,iota会在下一个const之前递增,但是,必须在不同赋值语句才能递增。
)
必须在不同赋值语句才能递增。
)
}12345678910111213141516171819202122232425262728293031321234567891011121314151617181920212223242526272829303132总结如下几点:1.Go语言的字面量是无类型的,对于浮点型,不用像其他语言那样指定是float还是double,末尾加上f,字面量常量都是无类型的不用像其他语言那样指定是float还是double,末尾加上f,字面量常量都是无类型的,这里实际上是不用像其他语言那样指定是float还是double,末尾加上f,字面量常量都是无类型的,这里实际上是12312www.yunfeizao.cn 32.在定义常量时,不指定类型也可以,会自动匹配成能容纳这个变量的浮点类型常量3.三种预定义常量(true,false,iota),iota会在下一个const之前递增,但是,必须在不同赋值语句才能递增。
三种预定义常量,iota会在下一个const之前递增,但是,必须在不同赋值语句才能递增。
)
必须在不同赋值语句才能递增。
)
123456789123456789类型布尔类型初始化为bool类型,默认为也可以表达式赋值,需要加上括号}1234567812345678总结:1. 布尔类型初始化,默认为2. 布尔类型不支持其它赋值或者强制转换,例如赋值为1
Go语言探险思考笔记的更多相关文章
- C语言细节总结笔记
C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...
- # C语言假期学习笔记——6
C语言假期学习笔记--6 数组 主要学习了一位数组和二维数组. 数组是一组具有相同类型的变量的集合.C语言程序通过元素的下标来访问数组中的元素.(下标从0开始) 一位数组 类型 数组名[元素个数] 二 ...
- R语言可视化学习笔记之添加p-value和显著性标记
R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline 上篇文章中提了一下如何通过ggpubr ...
- 二级C语言真题笔记
二级C语言真题笔记 1. 知识重点:数据类型.循环.数组.函数.指针.结构体与共同体 2. 求程序的运行结果 #include <stdio.h> main() { short i ...
- C/C++编程笔记:C语言入门知识点(三),请收藏C语言最全笔记!
今天我们继续来学习C语言的入门知识点,第一课:C/C++编程笔记:C语言入门知识点(二),请收藏C语言最全笔记! 21. 输入 & 输出 当我们提到输入时,这意味着要向程序填充一些数据.输入可 ...
- 《手把手教你学C语言》学习笔记(2)---学习C语言的目标和方法
一.学习C语言的目标主要是: 熟练掌握C语言的关键字,语法规则,程序控制等: 掌握基本的数据结构,数组.链表.栈和队列等: 掌握C语言中指针和内存.数组与指针.函数与指针.变量和指针.结构体和指针.硬 ...
- <JavaScript语言精粹>-读书笔记(一)
用object.hasOwnProperty(variable)来确定这个属性名是否为该对象成员,还是来自于原型链. for(my in obj){ if(obj.hasOwnProperty(my) ...
- swift语言的学习笔记
swift参考了OC,Rust,Haskell,Ruby,Python,C#等语言的特性.首先,学习这门语言是速学的,我不想浪费太多时间在笔记这门语言和其他语言的哪里不同,特性你自己亲自实践就知道了. ...
- Go语言--基础语法笔记
### 换了工作,好久没有添加新文章了,本来是想更新到github上的,想想还是在博客里放着,感觉以前的文章都没有很仔细,都只是问题处理的记录, 以后想新加一些整理的笔记也好 ### 主要内容 2.1 ...
随机推荐
- Centos6.4 openNebula
OpenNebula 是一套开源的云计算基础管理工具,用来方便管理员在数据中心统一部署.创建.分配和管理大量的虚拟机,企业数据中心可以利用这套工具搭建自己的私有云,为 自己内部提供 IaaS 服务,类 ...
- 35个jquery技巧[转]
人人都会的35个Jquery小技巧 2015-10-28 WEB开发者 收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 $(document).ready(fun ...
- java版本 ueditor 在线编辑器 配置
上传文件大小的配置 1. ueditor\dialogs\video\video.js 搜索 file_size_limit 修改这个数值 (这是前台 flash的限制) 2. ueditor ...
- backpropagate
http://blog.csdn.net/celerychen2009/article/details/8964753
- 服装销售系统数据库课程设计(MVC)
<数据库课程设计> 名称:Jia服装销售网站 姓名:陈文哲 学号:…… 班级:11软件工程 指导老师:索剑 目录 目录 1 需求分析 3 一:销售部门机构情况 3 二:销售部门的业务活动情 ...
- LabVIEW中的UDP通信
UDP(user datagram protoco1)提供向接收端发送信息的最简便的协议,与TCP不同,UDP不是面向连接的可靠数据流传输协议,而是面向操作的不可靠数据流传输协议.UDP在数据传输之前 ...
- Java基础知识强化之集合框架笔记64:Map集合之ArrayList嵌套HashMap
1. ArrayList集合嵌套HashMap集合并遍历. 需求: 假设ArrayList集合的元素是HashMap.有3个. 每一个HashMap集合的键和值都是字 ...
- Objective-C 内存管理与高级环境编程 阅读分享
常用的调试私有API uintptr_t objc_rootRetainCount(id obj) _objc_autoreleasePoolPrint();//查看自动释放池中的对象 LLVM cl ...
- linux64下安装swftools
在文档转换器中,需要在linux上安装swftools,经历了一番曲折过程终于安装成功.swftools安装包从http://www.swftools.org/download.html上面下载. 在 ...
- 学习java随笔第七篇:java的类与对象
类 同一个包(同一个目录),类的创建与调用 class Man{ String name; void GetMyName() { System.out.println(name); } } publi ...