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 ...
随机推荐
- man命令
man,这个命令,非常好!后续,更新
- JSBinding+Bridge:逻辑代码中操作二进制数据
以这2个函数为例 class File { public static byte[] ReadAllBytes(string path); public static void WriteAllByt ...
- ActiveForm
ActiveForm要和Model一起使用 我想在你的控制器的action中,至少应该这么写: /*action*/ $model = new Comments(); //实例化 Comments m ...
- LINUX下解决netstat查看TIME_WAIT状态过多问题
来源:多3度热爱 的BLOG 查看连接某服务端口最多的的IP地址 netstat -nat |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c ...
- mysql 配置参数
mysql JDBC Driver 常用的有两个,一个是gjt(Giant Java Tree)组织提供的mysql驱动,其JDBC Driver名称(JAVA类名)为:org.gjt.mm.mysq ...
- python 用pdb调试
简单调试 Python 程序 在 Python 中也可以像 gcc/gdb 那样调试程序,只要在运行 Python 程序时引入 pdb 模块(假设要调试的程序名为 d.py): $ vi d.py ...
- Chapter 4 - How to Fire some Bullets
Now, we want to let the hero fire some bullets to kill the enemies, add the codes below to set the l ...
- java String的比较,BOX装箱拆箱,以及面向对象的小代码
package cn.hncu.day2; public class StringDemo { public static void main(String[] args) { String str1 ...
- pnd_4
10多天没碰代码了,刚有点精神,调了下,消除部分的逻辑都OK了! 可以做表格到DATA的部分了! 先PYTHON:excel -> xml 再tinyxml: xml -> data
- 超过2T,磁盘分区
MBR:MBR分区表(即主引导记录)大家都很熟悉.所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区 GPT: GPT(即GUID分区表).是源自EFI标准的一种较新的磁 ...