600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【Go学习笔记2】go语言中的基本数据类型和包的介绍(一)

【Go学习笔记2】go语言中的基本数据类型和包的介绍(一)

时间:2022-04-17 06:47:51

相关推荐

【Go学习笔记2】go语言中的基本数据类型和包的介绍(一)

数据类型

go语言的数据类型非常丰富,包括int,string,boolean,byte,array,切片,映射等数据类型。当然用户还可以自定义数据类型。

各种数据类型的默认值

从这里我们总结一下go语言中各种类型变量的默认值:

int类型,默认值为0string类型,默认值为空字符串boolean类型,默认值为falsebyte类型,默认值为0指针类型,默认值为nil(以后讨论)引用类型,默认值为每一个属性对应的类型的默认值

go变量声明方式

go语言中采用类似js的方式来声明变量,看下面的代码:

var num int //声明一个int类型的变量var str string //声明一个string类型的变量num1 := 10 //声明并初始化一个int类型的变量,注意这里不写varvar num2 int = 11 //声明并初始化int类型的变量复制代码

看下面的代码:

package mainimport "fmt"func main(){var num int = 10num1 := 11var str string = "hello";fmt.Println("num=",num);fmt.Println("num1=",num1);复制代码

输出结果:

到现在,我们应该知道,怎么来声明一个变量。

变量的作用域

在上面例子中,在main函数钟声明的变量,都属于-局部变量。

既然有局部变量,那就会有全局变量,在go语言里面,因为每一个程序都会属于一个包,在这个包里面定义的变量,可以在变量所属包的里面任何位置使用。 例如:

package mainimport "fmt"var globalVar int = 20func main(){fn()fmt.Println("globalVar=",globalVar)}func fn(){//这里也可以访问到globalVarvar temp int = globalVar + 1fmt.Println("globalVar+1=",temp)}复制代码

这样看,好像go语言里面的作用域和js(es5之前)中的差不多,在函数中定义的变量只能在函数中使用,在包里面定义的变量可以在包里的任意位置使用。

那么,在go语言里面有没有包级别的私有变量呢,也就是说只有在变量定义的包内能访问,而在其他的包里面,访问不了。答案是有的,来看下面的例子:

包的使用和包级别的私有变量

首先看下目录结构:

这里我们新建一个新的目录p,用来存储p这个包下面的所有文件,注意,在同一个目录下的文件的package必须一致,否则会报错。

p1.go

package pimport "fmt";//这个外界可以访问var PVar int = 10//这个是包私有的,外界不能访问var str string = "hello zhongzhong"//这个外界也可以访问func Fn(){fmt.Println("from p package")}复制代码

main.go

package mainimport ("fmt""./p")func main(){fmt.Println("p.PVar=",p.PVar)// fmt.Println("p.str=",p.str);p.Fn();}复制代码

上面的输出结果:

可以看到,我们可以在main.go里面通过import导入我们自定义的包,然后使用里面的函数和变量。

如果去掉上面的main函数中的注释,再次执行main.go,会出现以下的错误:

可以看到,错误信息提示,不能引用未导出的名称p.str,接着下面就提示了说p.str未定义。

通过上面的代码,你应该已经猜到,go语言中是如何来处理包级别的私有变量了吧。

在go语言中,如果在一个包中定义的变量或者函数需要在别的包中使用,则需要将变量名或者函数名的首字母大写,如果不想被其他的包访问的话则使用首字母小写的方式。

总结

在go语言中,我们可以看到类似js的var的声明变量的方式,但是go是强类型的语言。在go语言中,我们可以通过包来组织我们的代码结构,并且go语言支持包级别的私有变量,这在js中,我们需要通过闭包等手段来模拟的私有变量在go语言 中得到了支持。go语言的行末不需要加分号,但是加了分号也不会报错。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。