数据类型

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

各种数据类型的默认值

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

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

go变量声明方式

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

var num int //声明一个int类型的变量
var str string //声明一个string类型的变量num1 := 10 //声明并初始化一个int类型的变量,注意这里不写var
var 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语言的行末不需要加分号,但是加了分号也不会报错。

转载于:https://juejin.im/post/5a2b4a68f265da432d280619

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

  1. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  2. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  3. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  4. Java快速入门学习笔记3 | Java语言中的表达式与操作符

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  5. Java快速入门学习笔记2 | Java语言中的基本类型

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  6. 《深入解析ORACLE》学习笔记(3)---ORACLE中的DB_NAME,SERVICE_NAME,INSTANCE_NAME,ORACLE_SID,GLOBAL_DBNAME介绍

    [声明:本文是学习著名ORACLE DBA盖国强先生的大作<深入解析ORACLE--DBA 入门 进阶与诊断案例>的学习笔记与心得体会.在此声明,文中摘录了书中部分内容,非是出于抄袭目的, ...

  7. 【FPGA学习笔记】Verilog语言中的或(|和||)

    最近在学习过程中遇到if语句判断位宽不同的数相或的情况,就很迷惑,在询问同学后得到以下结论. 一.|和||的区别 |是按位或:将 a 的每个位与 b 相同的位进行相或 ||是逻辑或:a 或上 b,如果 ...

  8. Go语言开发学习笔记(持续更新中)

    Go语言开发学习笔记(持续更新中) 仅供自我学习 更好的文档请选择下方 https://studygolang.com/pkgdoc https://www.topgoer.com/go%E5%9F% ...

  9. C语言学习笔记Day3——持续更新中... ...

    上一篇文章C语言学习笔记Day2--持续更新中- - 八. 容器 1. 一维数组 1.1 什么是一维数组 当数组中每个元素都只带有一个下标(第一个元素的下标为0, 第二个元素的下标为1, 以此类推)时 ...

最新文章

  1. 安卓5.0API的特性,多了些什么
  2. java选择哪款eclipse_写java程序用哪一个版的eclipse比较好
  3. Java中NaN和-0.0f的比较问题
  4. rdd分片 spark_Spark分区
  5. requirements.txt一键安装项目所需要的的python包
  6. 如何读取tensorboard文件 展现可视化
  7. 云鲸扫拖一体机器人说明书_云鲸小白鲸扫拖一体机器人好用吗?真实的测评带你走进智能化家居时代...
  8. atitit 读书与获取知识资料的attilax的总结与心得 v6
  9. 第二课:电场与偶极子
  10. CentOS查找redis配置文件及防火墙相关命令
  11. AXI总线,AXI_BRAM读写仿真测试
  12. 切线空间(Tangent Space) 的计算与应用
  13. [Step By Step]SAP HANA PAL指数回归预测分析Exponential Regression编程实例FORECASTWITHEXPR(预测)...
  14. 【pytorch EarlyStopping】深度学习之早停法入门·相信我,一篇就够。
  15. 读源码(四)—— js Promise
  16. RNNoise超详细解析
  17. 很牛的求职经历(转)
  18. 深入理解Linux文件系统之文件系统挂载(下)
  19. AI视频超分升级版,720P转4K效果更赞!
  20. 如何使用asp.net开发一套完整的智慧小区物业系统

热门文章

  1. mysql5.7.11 linux_CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本教程详解...
  2. Postman常用方法
  3. pytest框架实现一些前后置(固件,夹具)的处理
  4. jdbc连接mysql登录注册_jdbc+mysql+servlet+jsp实现用户注册与登录功能
  5. 鸿蒙应用开发培训笔记02:应用开发入门
  6. 《天天数学》连载04:一月四日
  7. Python学习笔记:列表、字典与集合解析(List, Dict and Set Comprehensions)
  8. VB案例:DAO使用示例1
  9. 12.混淆——采样低频信号,采样高频信号_3
  10. 2017.10.8 志愿者招募 失败总结