您的位置:首页 > 编程语言 > Go语言

go语言学习总结1

2017-04-17 09:58 309 查看
由于要写智能合约所以好好的学习了下go语言;我是学java的首先说一下区别:1.变量go语言变量的声明:var number int=520
或者
var number :=520
java声明变量;int number= 520;可以看到go的变量声明,修饰变量的类型在变量的后面,而且是以var关键字开头。最后面的变量值可以在声明的时候忽略,这样变量就有一个默认的值,称之为零值。零值是个统称以类型而定,ps:int的零值为0,string为空字符串。2.常量:go:
const number=10//没有声明类型,它可以根据类型推导出来等效于const number int =10
java:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: