首页 > 代码库 > Go语言探险思考笔记

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语言探险思考笔记