3.1 Go变量

变量是对内存中数据存储空间的表示,如同门牌号对应着房间,同样的,变量名字对应变量的值。

变量:本质就是一块内存空间。用于存储某个数值。该数值在运行时可以改变。

变量使用步骤

1.声明变量,定义变量
2.给与变量赋值
3.使用变量

实际案例

package main

import "fmt"

func main() {
var name string //声明变量名 name
name = "超哥" //给与变量赋值
fmt.Println("name的值是:", name) //使用变量
}

结果

name的值是: 超哥

变量使用过程

代码读取
变量加载到内存 name 指向 内存地址的值
1)变量含有名字,变量类型

1.1.1. 变量定义方式

变量作用域

如同天气预报,局部地区有雨,全国地区艳阳高照

局部变量:函数内部定义的变量,指的是该变量的作用范围
全局变量:函数外部,整体作用域

1)定义变量与类型,不赋值,含有默认值

语法:var 语句定义变量的列表,类型在后面,可以定义局部变量也可以,也可全局变量

var name string

var age int

声明多个变量

var num,num2 int

package main

import "fmt"

func main() {
var age int
fmt.Println("age的值是:", age) var name string
fmt.Println("name的值是:", name) var salary float64
fmt.Println("salary的值是:", salary) }

结果

age的值是: 0
name的值是:
salary的值是: 0

2)编译器类型推导,自行判断变量类型

var num = 10.1

一次性定义多个变量

var age,age2 = 10,11

package main

import "fmt"

func main() {
var num, num1 = 10, 11
fmt.Println(num, num1)
}

3)短声明,省略var,只能用在函数内部

package main

import "fmt"

func main() {
name := "超哥"
fmt.Println("name的值是:", name) //上述段声明等于如下方式
var name2 string
name2 = "超哥"
fmt.Println(name2)
}

4)多变量声明

golang支持一次性声明多个变量

支持平行赋值

多个局部变量

作用域只在函数体内,参数和返回值也是局部变量

package main

import "fmt"

func main() {
//一次性声明多个变量,int默认值
var n1, n2, n3 int
fmt.Println(n1, n2, n3) //声明多个变量,且赋值
//平行赋值
var c1, c2, c3 = "chaoge", 18, 99.99
fmt.Println(c1, c2, c3) //短声明多个变量
a1, a2, a3 := "yu", 17, 100.0
fmt.Println(a1, a2, a3)
}

5)一次性声明多个全局变量

package main

import "fmt"
//声明全局变量方式1
var n1 = 100
var n2 = 200
var n3 = 300
//声明全局变量方式2
var (
d1, d2, d3 = 1, 2, 3
)
//声明全局变量方式3
var (
c1 = 100
c2 = 200
c3 = 300
) func main() {
fmt.Println("这里是函数体内")
}

6)特殊变量,占位符 "_"

Go编译器要求变量必须被使用,"_"是一个只写的变量,不能读,等于舍弃,常用于接收函数的返回值

package main

import "fmt"

func Person(a1 int, n1 string) (int, string) {
return a1, n1
} func main() {
//丢弃变量
n1,n2,_:=1,2,3 _, name := Person(18, "好嗨哦")
fmt.Println(name)
}

7)常见数据类型变量默认值

默认值,某个变量没有给定具体的数值,称为默认值

package main

import "fmt"

func main() {
// 只声明变量,不赋值,只有默认值
var age int
var name string
var gender bool
var salary float64
fmt.Println("age默认值 :", age)
fmt.Println("name默认值 :", name)
fmt.Println("gender默认值 :", gender)
fmt.Println("salary默认值 :", salary)
}

输出结果

age默认值 : 0
name默认值 :
gender默认值 : false
salary默认值 : 0

2. Go常量

常量使用关键字 const 定义,用于存储不会改变的数据。常量不能被重新赋予任何值。 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义格式:const identifier [type] = value

常量代表只读的,不可修改的值,用const关键字定义。

如同用常量定义 "π"之类的常数。

常量如同变量一样,可以批量声明,或者一组相关的常量。

常量的计算都在编译期间完成,并非运行期间!减少运行时的工作。

未使用的常量不会引发编译错误。(这点和变量不一样哦~)

常量习惯用法,所有的字母全大写,代表变量可导出,私有则常量以小写开头即可

package main

import (
"fmt"
"unsafe"
) //常量定义且赋值
const World string = "世界" //多常量初始化
const x, y int = 1, 2 //常量类型推断,字符串类型
const s1 = "Hello golang" //常量组
const (
e = 2.71828182845904523536028747135266249775724709369995957496696763
pi = 3.14159265358979323846264338327950288419716939937510582097494459
b bool = true
) //常量组,可以除了第一个外其他的常量右边的初始化表达式可以省略
//如果省略初始化表达式,默认使用前面常量的表达式
//与上一个常量相同
const (
c1=1
c2
c3
c4="c44444"
c5
)
/*
输出结果
1
1
1
c44444
c44444
*/ //常量也可以定义函数的返回值
const (
f1="abc" //长度为3的字符串类型
f2=len(f1)//返回长度的函数结果
f3=unsafe.Sizeof(f2)//返回f2所占用的内存大小
/*
输出结果
abc
3
8
*/ func main() {
fmt.Println(f1)
fmt.Println(f2)
fmt.Println(f3)
}

3. Go常量之iota常量生成器

iota用于生成一组相似规则初始化的常量,在const常量声明的语句中,第一个常量所在行,iota为0,之后每一个常量声明加一。

例如time包的例子,一周7天,每天可以定义为常量,1~6,周日为0,这种类型也称为枚举

package main

import (
"fmt"
) const (
Sunday = iota
Monday //通常省略后续行表达式
Tuesday
Wednesday
Thursday
Friday
Saturday
) func main() {
fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
}

如果iota表达式被打断,需要显示恢复

package main

import (
"fmt"
) const (
A = iota //初始0
B // +1
C = "c" //iota枚举被打断 ,为 c
D // c,与上 相同。
E = iota // 4,显式恢复。注意计数包含了 C、D 两个,此时为4 。
F // 恢复iota 加一,此时为5
) func main() {
fmt.Println(A, B, C, D, E, F)
}

输出结果

0 1 c c 4 5
 

3.1Go变量的更多相关文章

  1. 6 小时 Python 入门

    6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...

  2. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  3. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  4. Shell特殊变量

    $ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...

  5. Java多线程基础——对象及变量并发访问

    在开发多线程程序时,如果每个多线程处理的事情都不一样,每个线程都互不相关,这样开发的过程就非常轻松.但是很多时候,多线程程序是需要同时访问同一个对象,或者变量的.这样,一个对象同时被多个线程访问,会出 ...

  6. Js 变量声明提升和函数声明提升

    Js代码分为两个阶段:编译阶段和执行阶段 Js代码的编译阶段会找到所有的声明,并用合适的作用域将它们关联起来,这是词法作用域的核心内容 包括变量声明(var a)和函数声明(function a(){ ...

  7. PHP源码分析-变量

    1. 变量的三要素变量名称,变量类型,变量值 那么在PHP用户态下变量类型都有哪些,如下: // Zend/zend.h #define IS_NULL 0 #define IS_LONG 1 #de ...

  8. JavaScript var关键字、变量的状态、异常处理、命名规范等介绍

    本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...

  9. shell变量

    定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...

随机推荐

  1. 【<meta name="" content=">】的作用

    一.语法: <meta name="name" content="string"/> 二.参数解析: 1.name项:常用的选项有keywords( ...

  2. 设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

    忙,真忙 点赞再看,养成习惯,微信搜索『程序通事』,关注就完事了! 点击查看更多精彩的文章 这两个星期真是巨忙,年前有个项目因为各种莫名原因,一直拖到这个月才开始真正测试.然后上周又接到新需求,马不停 ...

  3. 曹工力荐:调试 jdk 中 rt.jar 包部分的源码(可自由增加注释,修改代码并debug)

    背景 大家知道,jdk安装的目录下,一般会有个src.zip包,这个包基本对应了rt.jar这个包.rt.jar这个包里面,就放了jdk中,jdk采用java实现的那部分类库代码,比如java.lan ...

  4. 10倍处理能力 阿里云推云上首个支持12层4K非编NAS产品

    5月23日,阿里云在2017云栖大会·成都峰会上正式推出了云上首个支持广电级非编的文件存储产品------NAS Plus,作为阿里云文件存储NAS的升级款,NAS Plus提供高达200Gbps的吞 ...

  5. Centos7网络配置( 网关、dns、ip地址配置)

    0.前提:设置VMware的虚拟网络编辑器 子网和网关设置   虚拟网络编辑器 1.配置DNS(可忽略) $vim /etc/resolv.conf nameserver 192.168.0.1 2. ...

  6. C++ 模板(template) 的定义

    定义: 模板(template)是实现代码重用机制的一种工具,它可以实现类型参数化,把类型定义为参数(模板元编程),从而实现了真正的代码可重用性. 模板是用来批量生成功能和形式都几乎相同的代码的.编译 ...

  7. MySQL必知必会1-20章读书笔记

    MySQL备忘 目录 目录 使用MySQL 检索数据 排序检索数据 过滤数据 数据过滤 用通配符进行过滤 用正则表达式进行搜索 创建计算字段 使用数据处理函数 数值处理函数 汇总数据 分组数据 使用子 ...

  8. 题目分享M

    题意: 其实就是找到AB+min(AC,BC)的最大值 分析:刚看到这道题,很容易往AB为树的直径方向上去想,C就可以遍历每个点,最后求出对于每个点为C时的最大值 那AB到底是不是树的直径或者为什么A ...

  9. JavaScript toFixed() 实现四舍五入保留两位小数

    const num = 18.186; let result; result = num.toFixed(2) console.log(result) // 18.19 注意,返回值为String类型

  10. 再谈 PHP 未来之路

    前段时间我写过一篇博文<phper:敢问路在何方>,分析了 PHPer 的困境以及 PHP 程序员的学习.进阶突破之路.同时我在知乎上也发过类似的提问.从大家的评论和回答看,大体分为以下几 ...