当前位置: 首页 > news >正文

Go-变量-var

什么是变量?

  一种抽象,计算机用来保存现实数据的容器,通过这个变量抽象可以写入现实数据到计算机中,并且可以读取变量取到保存到计算机中的现实数字化数据

Go-变量定义

  关键字  var

  关键符号  :=

import "fmt"

var country  = "China"

func main() {
	var name = "beimenchuixue"
	var (
		age = 18
		school = "huGong"
	)

	work := "student"
	fmt.Println(name, age, school, work)
}

  观察发现,有以下特性

    1. 定义变量类型的时候,大多数情况下不要写变量类型,Go解释器会自动推断,特殊情况还是要加上变量类型

    2. 每句语句后面都没有分号,但是解释器在编译的时候会自动加上

    3. 定义包变量的时候只能使用 var方式定义,不能使用 := 方式

    4. := 解释器会解释为两步,先var声明类型,然后再赋值

    5. 包变量可以不使用不报错,函数变量必须使用,但我们可以通过 _ 来忽略某个不想要的变量

    6. 定义多个变量的时候通过 var() 方式

    7. Go定义变量时候,变量名在前,变量类型在后,这和其他语言变量定义风格相反

Go-变量类型    8bit=1byte

  有符号整形    int8,16,32,64

  无符号整形    uint8,16,32,64

  浮点数      float32,64

  布尔型      bool

  复数       complex64,128

  字符串      string    双引号

  单个字节字符   byte      单引号

  单个字符     rune      单引号

  错误类型     error

Go-命名规范

  1. 遵循C语言命名规范,不能以数字开头,以大小写字母、下划线、数字组成

  2. 不能是关键字,不推荐使用内置函数名

  3. 首字母大写表示包外可以访问,首字母小写表示包外不可访问

  4. 以首字母大写区分不同单词

  5. 变量名、函数名、结构体名、接口名都遵守以上规范

Go变声明时候会给初始值

  1. 数字类型 int float byte rune 为 0

  2. string 为空字符串

  3. complex 为 (0+0i)

  4. bool类型问 false

  5. error类型为 <nil>

package main

import "fmt"

func main() {
	var a int8
	var b int64
	var c float32
	var d float64
	var e bool
	var f complex64
	var g string
	var h byte
	var j rune
	var k error
	fmt.Println(a, b, c, d, e, f, g, h, j, k)
}

 以上这些基础数据类型,只能满足存放一个数据的需求

Go变量作用域(生命范围)

  1. 定义在和 package import关键字同级,为包变量,作用于包全局,包内可以访问并可以直接修改

package main

import "fmt"

var country = "China"

func PrintCountry()  {
	fmt.Println(country)
	country = "Russia"
}

func main() {
	PrintCountry()
	fmt.Println(country)
	country = "American"
	fmt.Println(country)
}

 

  2. 定义在函数内,为函数变量,作用于这个函数,函数内可以访问,函数外不可访问并且失效

package main

import "fmt"


func PrintCountry()  {
	var country = "China"
	fmt.Println(country)
}

func main() {
	PrintCountry()
}

 

  3. 定义在循环分支中,为循环分支变量,只能循环分支中可以访问,出循环分支外不可访问并且失效

package main

import "fmt"

func Count()  {
	start := 0
	for i := 0; i<=100 ; i ++ {
		start = i
		fmt.Println(start)
	}
	fmt.Println(start)
	//fmt.Println(i)
}

func main() {
	Count()
}

 

  4. 形式上看,每对 {}形成一个作用域,都可以很轻松修改掉能访问到的外部作用域变量并做出修改,但是外部作用域不能访问内部作用域变量

转载于:https://www.cnblogs.com/2bjiujiu/p/9036153.html

相关文章:

  • 复习mysql
  • 【转载】C/C++内存对齐
  • linux运维、架构之路-MHA高可用方案
  • 线索二叉树实例(前序创建,中序遍历)--2018.5.15
  • vuex填坑记录
  • 多版本并发控制
  • Unity4-用户输入
  • Java Web基础教程(二)开发基础
  • ActiveMq启动后,输入网址出现HTTP ERROR: 503错误的问题
  • 好代码是管出来的——浅谈.Net Core的代码管理方法与落地(更新中...)
  • win10应用程序添加到开机启动项的两种解决办法
  • SSL-ZYC 2432 面积最大
  • 剑指offer-用两个栈实现队列
  • 简单介绍帧动画
  • 浮动菜单
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【笔记】你不知道的JS读书笔记——Promise
  • java正则表式的使用
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • spring boot 整合mybatis 无法输出sql的问题
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • WePY 在小程序性能调优上做出的探究
  • windows下如何用phpstorm同步测试服务器
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 免费小说阅读小程序
  • 使用agvtool更改app version/build
  • 使用putty远程连接linux
  • 7行Python代码的人脸识别
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (Note)C++中的继承方式
  • (Python第六天)文件处理
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (九)信息融合方式简介
  • (力扣)1314.矩阵区域和
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (十六)一篇文章学会Java的常用API
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)socket Aio demo
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Framework杂记
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET和.COM和.CN域名区别
  • .NET开发不可不知、不可不用的辅助类(一)
  • @Autowired 与@Resource的区别
  • @javax.ws.rs Webservice注解
  • @RestController注解的使用
  • @selector(..)警告提示
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [<事务专题>]
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Android] Implementation vs API dependency