go语言学习总结1
2017-04-17 09:58
309 查看
由于要写智能合约所以好好的学习了下go语言;我是学java的首先说一下区别:1.变量go语言变量的声明:var number int=520或者
var number :=520java声明变量;int number= 520;可以看到go的变量声明,修饰变量的类型在变量的后面,而且是以var关键字开头。最后面的变量值可以在声明的时候忽略,这样变量就有一个默认的值,称之为零值。零值是个统称以类型而定,ps:int的零值为0,string为空字符串。2.常量:go:
const number=10//没有声明类型,它可以根据类型推导出来等效于const number int =10java:
public static final int number =10;3.包:
import ("log""strconv""fmt")对于导入多个包使用一堆括号包含的导入块,每个包独占一行。现在我导入了包,那么编译的时候,go编译器去什么位置找他们呢?这里就要介绍下Go的环境变量了。Go有两个很重要的环境变量GOROOT和GOPATH,这是两个定义路径的环境变量,GOROOT是安装Go的路径,比如c:/go;GOPATH是我们自己定义的开发者个人的工作空间,比如d:/mygo。编译器会使用我们设置的这两个路径,再加上import导入的相对全路径来查找磁盘上的包,比如我们导入的fmt包,编译器最终找到的是如c:/go/fmt这个位置。值得了解的是:对于包的查找,是有优先级的,编译器会优先在GOROOT里搜索,其次是GOPATH,一旦找到,就会马上停止搜索。如果最终都没找到,就报编译异常了。对了go与java不一样,go导包导的是路径。4.mapmap类型,Java里是Map接口,go里叫做字典,因为其常用,在go中,被优化为一个语言上支持的结构,原生支持,就像一个关键字一样,而不是java里的要使用内置的sdk集合库,比如HashMap等。ages := make(map[string]int)ages["aa"] = 20ages["bb"] = 30fmt.Print(ages["aa"])go里要创建一个map对应,需要使用关键字make,然后就可以对这个map进行操作。map的结构也非常简单,符合KV模型,定义为map[key]value, 方括号里是key的类型,方括号外紧跟着对应的value的类型,这些明显和Java的Map接口不同。如果在go中我们要删除map中的一个元素怎么办?使用内置的delete函数就可以,如下代码删除ages这个map中,key为michael的元素。
delete(ages,"bb")如果我们想遍历map中的KV值怎么办?答案是使用range风格的for循环,可比Java Map的遍历简洁多了。
for name,age := range ages { fmt.Println("name:",name,",age:",number) }range一个map,会返回两个值,第一个是key,第二个是value.5.函数方法在go中,函数和方法是不一样的,我们一般称包级别的(直接可以通过包调用的)称之为函数,比如fmt.Println();把和一个类型关联起来的函数称之为方法,如下示例:
package libimport "time"
type Person struct { age int name string
}
func (p Person) GetName() string {
return p.name}
func GetTime() time.Time{
return time.Now()}其中GetTime()可以通过lib.GetTime()直接调用,称之为函数;而GetName()则属于Person这个结构体的函数,只能声明了Person类型的实例后才可以调用,称之为方法。不管是函数还是方法,定义是一摸一样的。而在这里,最可以讲的就是多值返回,也就是可以同时返回多个值,这就大大为我们带来了方便,比如上个遍历map的例子,直接可以获取KV,如果只能返回一个值,我们就需要调用两次方法才可以。
func GetTime() (time.Time,error){ return time.Now(),nil}多值返回也很简单,返回的值使用逗号隔开即可。如果要接受多值的返回,也需要以逗号分隔的变量,有几个返回值,就需要几个变量,比如这里:
now,err:=GetTime()如果有个返回值,我们用不到,不想浪费一个变量接收怎么办?这时候可以使用空标志符_,这是java没有的。
now,_:=GetTime()
6.指针:
var number int = 520var p *int = &number*p = 521fmt.Println(number)输出:521
相关文章推荐
- [GoLang学习总结]Go语言中的Slice
- Go语言总结和学习指南
- 21世纪的编程语言--Go语言学习资料总结
- Go语言中的Slice学习总结
- 学习go语言的第6天(总结昨天)
- Go/Golang 语言学习笔记总结
- Go语言学习总结
- 基于8086cpu的汇编语言学习总结
- Go语言学习札记—— 第二章 Go编程环境(1)
- go语言学习笔记之并发编程
- 黑马程序员——java语言基础——总结一下学习过的类
- Java 语言学习总结
- C#语言----对象和类型(学习总结)
- go语言学习-在ubuntu上安装golang
- go语言学习-golang的基本数据类型
- 总结一下自己学习过的语言
- 用c/c++语言写的一个小的“爬虫”程序学习过程总结
- C#语言----继承(学习总结)
- GO语言学习备注