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 ...
随机推荐
- Yii中Ajax的使用,如收藏功能
view中 <?php $cs=Yii::app()->clientScript; $cs->registerScriptFile('http://ajax.googleapis.c ...
- HttpURLConnection的流式输出的缺陷和解决方法
转自:http://www.mzone.cc/article/198.html 最近在用applet写文件上传控件的时候发现使用URLConnection来对服务器进行流式输出时的一些问题.我们通常要 ...
- mysql2redis
mysql2redis这个项目主要解决mysql数据跟redis数据同步的问题 目前在测试环境研究这方面的应用,以下是git上面的介绍 git入口 git安装入口 Dependencies pl ...
- How to easily concatenate text based on criteria in Excel? 如何将Excel中的文本按条件合并
To combine text with the unique ID numbers, you can extract the unique values first and then create ...
- 谷歌google搜索打不开、谷歌gmail邮箱及相关服务无法登录的解决的方法
歌打不开 google打不开,与中国大陆封杀有关,可是主要是由于近期googleserver在全球范围内又一次进行了布局调整. 解决的方法是仅仅要改动用户本地计算机hosts文件就能够了. 一.Win ...
- extjs_02_grid(显示本地数据,显示跨域数据)
1.显示表格 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- 深入分析 iBATIS 框架之系统架构与映射原理--转载
http://www.ibm.com/developerworks/cn/java/j-lo-ibatis-principle/ iBATIS 通过 SQL Map 将 Java 对象映射成 SQL ...
- (转载)myeclipse项目名称重命名
myeclipse项目名称重命名 实例1 今天晚上在做一个jsp唱片显示的实例,myeclipse项目名称原本想写music结果写成了musci.这就需要项目名称的重命名,单纯的使用 “重构--> ...
- WPF自定义窗体仿新毒霸关闭特效(只能在自定义窗体中正常使用)
比较简单的一个小功能,和新毒霸类似的效果. 效果代码: bool closeStoryBoardCompleted = false; DoubleAnimation closeAnimation1; ...
- Linux学习笔记总结--ssh认证登录
原理简介 SSH证书认证登录的基础是一对唯一匹配密钥: 私钥(private key)和公钥(public key).公钥用于对数据进行加密,而且只能用于加密.而私钥只能对使用所匹配的公钥,所加密过的 ...