Go语言变量

news2024/11/27 20:59:43

Go语言变量

参考资料主要来源于菜鸟教程。

参考链接:https://blog.51cto.com/u_15230485/2821028

  变量来源于数学,是计算机语言中能存储计算结果或能表示值抽象概念。

  变量可以通过变量名访问。

  Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。

  声明变量的一般形式是使用var关键字:

var identifier type

  可以一次声明多个变量:

var identifier1, identifier2 type
package main

import "fmt"

func main() {
	//test.New()   //包信息
	//fmt.Println("main")


	//var stockcode = 123
	//var enddate = "2020-12-31"
	//var url = "Code= %d & endDate = %s"
	//fmt.Printf(url,stockcode,enddate)

	var a string = "test"
	fmt.Println(a)

	var b,c int = 1, 2
	fmt.Println(b,c)
}

输出结果:

test
1 2

变量声明

  第一种,指定变量类型,如果没有初始化,则变量默认为零值。

var name type
name = value

  零值就是变量没有做初始化时系统默认设置的值。

package main

import "fmt"

func main() {
	var a = "test"
	fmt.Println(a)

	var b int
	fmt.Println(b)

	var c bool
	fmt.Println(c)
}

输出结果:

test
0
false
  • 数值类型(包括complex64/128)为0

  • 布尔类型为false

  • 字符串为""(空字符串)

  • 以下几种类型为nil:

    var a *int
    var a []int
    var a map[string] int
    var a chan int
    var a func(string) int
    var a error //error 是接口
    

实例:

package main

import "fmt"

func main() {
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n",i,f,b,s)
}

输出结果是:

0 0 false ""

  第二种,本剧值自行判定变量类型。

var name = value

实例:

package main
import "fmt"
func main() {
    var d = true
    fmt.Println(d)
}

输出结果:

true

  第三种,如果变量已经使用var声明过了,再使用:=声明变量,就会产生编译错误。

TIPS:这种不带声明格式的只能在函数体中出现

name := value

例如:

var intVal int
intVal := 1 //这时会产生编译错误,因为intVal已经声明,不需要重新声明

将上述改成如下语句即可:

intVal := 1 //此时不会产生编译错误,因为有声明新的变量,:=是一个声明语句

  intVal := 1相当于:

var intVal int
intVal = 1

  即可以将var f string = ”test"简写为 f := “test”。

多变量声明

//类型相同的多个变量,非全局变量
var name1,name2,name3 type
name1,name2,name3 = v1,v2,v3

var name1,name2,name3 = v1,v2,v3 //和python很像,不需要显式声明类型,否则会导致编译错误

name1,name2,name3 := v1,v2,v3 //出现:=左侧的变量不应该是已经被声明过的,否则会导致编译错误

//这种因式分解的写法一般用于声明全局变量
var (
    name1 type
    name2 type
)

实例:

package main

import "fmt"

var x,y int
var (
	a int
	b bool
)

var c,d int = 1,2
var e,f = 123, "hello"

func main() {
	g,h := 123,"world"

	fmt.Println(x, y, a, b, c, d, e, f, g, h)
}

输出结果:

0 0 0 false 1 2 123 hello 123 world

值类型和引用类型

  与C/C++类似。

  • 值类型:基本数据类型 int 系列, float 系列, bool, string 、数组和结构体struct,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值通常存储在中。
  • 引用类型:指针、slice切片、map、管道chan、interface 等都是引用类型

栈和堆

  在内存中分成两大块:栈和堆。值类型的变量通常存储在栈区,引用类型通常存储在堆区。在Go中,有可能值类型也存储在堆区,反过来也有可能引用类型存储在栈区。

效果图

简短形式,使用:=赋值操作符

  我们知道可以在变量的初始化时省略变量的类型而由系统自动判断,声明语句写上var关键字其实是显得有些多余,因此我们可以将它们简写为a:=50或者b:=false。

  a和b的类型(int和bool)将由编译器自动推断。

  这是使用变量的首选形式,但是它只能被用在函数内,而不可以用于全局变量的声明与赋值。使用操作符:=可以高效地创建一个新的变量,称之为初始化声明。

注意事项

  如果在相同的代码块中,不可以再次对相同名称的变量使用初始化声明,例如:a:=20就不被允许使用,编译器会提示错误,但是a=20可以,这相当于给相同的变量赋予一个新的值。

  如果在定义变量a之前使用它,会得到一个编译错误。

  如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误。

  但是全局变量是允许声明但不使用的。同一类型的多个变量可以声明在同一行,如:

var a, b, c int

  多变量也可以在用一行进行赋值,如:

var a, b int
var c string
a, b, c = 5, 7, "abc"

  上面这行假设变量a,b和c都已经被声明,否则的话应该这样使用:

a, b, c := 5, 7, "abc"

  右边的这些以享用的顺序赋值给左边的变量,所以a的值是5,b的值是7,c的值是“abc”。

  这被称为并行同时赋值。

  如果发你想要交换两个变量的值,则可以简单地使用a,b = b,a,两个变量的类型必须是相同。

  空白标识符_也被用于抛弃值,如值5在:_ , b = 5, 7中被抛弃。

  _实际上一个只写变量,不能得到它的值,这样做是因为Go语言中必须使用所有被声明的变量,但有时候并不需要使用从一个函数得到的所有返回值。

  并行赋值也别用于当一个函数返回多个返回值是,比如这里的val和错误err是通过调用Func1 函数同时得到的:val, err = Fun1(var1)。

空白标识符在函数返回时的使用

package main

import "fmt"

func numbers()(int,int,string){
	a,b,c := 1,2,"str"
	return a,b,c
}

func main() {
	_,num,strs := numbers()
	fmt.Println(num,strs)
}

输出结果:

2 str

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vector和ArrayList对比

本文会对ArrayList和Vector进行分析,为什么会关注这两个类,主要是因为他们拥有相同的继承结构,接下来就来探索下这两个类实现和效率的异同。 继承结构 可以看到,Vector和ArrayList都实现了List和RandomAccess接口,都继…

C语言——常用字符串库函数的介绍

文章目录常用字符串库函数介绍1.1关于字符串简介1.2:[strlen库函数](https://legacy.cplusplus.com/reference/cstring/strlen/?kwstrlen)1.2.1strlen函数的功能1.2.2strlen函数的参数和返回类型1.2.3strlen函数使用注意事项1.2.4strlen的使用1.2.5模拟实现strlen函数1.3:[str…

喜讯!酷开科技荣获中国国际广告节三项殊荣!

近日,由中国广告协会主办的第29届中国国际广告节AD Fair媒企交易会在厦门国际会展中心隆重举行。其中备受瞩目的三大盛典:广告主金伙伴盛典、广告主盛典、媒企盛典,是广告业必不可少的荣誉殿堂,他们不仅是对中国广告传媒业各方主体…

【C++升级之路】第七篇:STL简介

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【C学习与应用】 ✒️✒️本篇内容:从整体上对STL进行粗略介绍 🚢🚢作者简介:计算机海洋的新进船长一枚&…

GTD之初总结

思维导图 GTD:GTD是“Getting Things Done”的缩写,是由效率管理专家戴维艾伦(David Allen)开创的一套完整个人时间管理系统 既高效地处理工作事务,又能品味生活的快乐滋味,达到心如止水的轻松感 GTD工作…

docker中基础内容

docker中的核心概念 1、镜像: Image 定义:一个镜像就代表一个软件,比如:mysql 镜像、redis 镜像、es镜像等等2、容器: Container 定义:一个镜像运行一次就会生成一个容器,容器就是一个运行的软…

托普云农在创业板IPO过会:拟募资约3亿元,前三季度利润下滑8%

近日,深圳证券交易所披露的信息显示,浙江托普云农科技股份有限公司(下称“托普云农”)获得创业板上市委会议通过。据贝多财经了解,托普云农于2022年6月24日递交招股书并获得受理。 本次冲刺创业板上市,托普…

分享36个C源码,总有一款适合您

C源码 分享36个C源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接:https://pan.baidu.com/s/1WTLgtQ2J5gfZdj-LMEYnEA?pwdnimr 提取码…

Swagger使用

SpringBoot继承Swagger <!--swagger依赖--> <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version> </dependency> <!--swagger ui--> <dependen…

列表元素的查找,插入和删除

1&#xff0c;查找列表元素&#xff1a; 语法格式&#xff1a;ls.index(x) 其中&#xff0c;ls是要进行元素查找操作对象&#xff0c;x为要查元素值&#xff0c;返回值是ls中第一个值为x的元素的位置。例如&#xff1a;ls[1,2,3,6]#创建一个列表 print&#xff08;ls值为6的元…

Linux操作系统进程状态Linux内核进程状态

目录 Linux操作系统进程状态 1. 新建 2. 运行 3. 阻塞 4. 挂起 Linux内核进程状态 进程状态查看 Linux操作系统进程状态 1. 新建 即字面意思&#xff0c;将进程资源(PCB)加载到内存,运行状态之前就是新建。 2. 运行 进程正在运行或者task_struct 结构体在队列中排队&…

leetcode 1813. 句子相似性 III【python3双指针的实现思路及过程整理】

题目 一个句子是由一些单词与它们之间的单个空格组成&#xff0c;且句子的开头和结尾没有多余空格。比方说&#xff0c;“Hello World”&#xff0c;“HELLO”&#xff0c;"hello world hello world"都是句子。每个单词都只包含大写和小写英文字母。 如果两个句子 s…

【数据结构】图的案例引入及类型定义

6.2 案例引入 六度空间理论 六度空间理论验证 6.3 图的类型定义 图的抽象数据类型定义如下 ADT Graph {数据对象V&#xff1a;具有相同特性的数据元素的集合&#xff0c;称为顶点集。数据关系R&#xff1a;R{VR}VR{<v,w>|<v,w>|v,w∈V ^ p(v,w),<v,w>表述…

WebStorage之浏览器的本地存储(结合案例)

目录前言一&#xff0c;WebStorage二&#xff0c;localStorage2.1 存储2.2 读取2.3 删除2.4 清除全部2.5 代码三&#xff0c;sessionStorage3.1 用法3.2 区别3.3 代码四&#xff0c;结合案例后记前言 浏览器的本地存储可以缓存一些信息在浏览器中&#xff0c;方便取用。在学习…

Docker(黑马spring cloud笔记)

Docker 目录Docker一、介绍和安装1. 安装2. 启动3. 镜像加速二、Docker基本操作1. 镜像操作2. 容器操作3. 数据卷操作三、Dockerfile1. 镜像结构2. Dockerfile四、Docker-Compose1. 安装2. 基本命令五、Docker私服搭建六、练习练习1&#xff1a;save和load练习2&#xff1a;doc…

【MySQL】深入学习B+索引的使用

文章目录1. 前言2. 索引的代价2.1 空间上的代价2.2 时间上的代价3. B树索引的使用3.1 提取正确的扫描区间3.1.1 所有搜索条件都可以生成合适的扫描区间的情况3.1.2 有的搜索搜索条件不能生成合适的扫描区间3.1.3 从复杂的搜索条件中找出扫描区间3.1.4 使用联合索引执行查询时对…

5. 统计学基础2:协方差、相关系数、协方差矩阵

文章目录1. 协方差2. 相关系数【就是使 |协方差|<1】3. 协方差矩阵1. 协方差 标准差和方差一般是用来描述一维数据的&#xff0c; 具体介绍见&#xff1a;5. 统计学基础1&#xff1a;平均值…四分位数、方差、标准差&#xff08;均方差&#xff09;、标准误&#xff08;标准…

ModelMapper 一文读懂

目录 1、ModelMapper简介 1.1 引入ModelMapper 的依赖 1.2 进行Mapping映射 1.3 ModelMapper 工作原理 2、ModelMapper 基础操作 2.1 ModelMapper 基本映射 2.2 ModelMapper 集合转换 2.3 ModelMapper 指定默认值 2.4 ModelMapper 属性值转换 2.5 ModelMapper 属…

node.js创建服务器及知识点

node.js创建服务器及知识点用http协议创建web服务器http协议知识点用express创建web服务器express中路由知识点fs文件系统模块文件流querystring查询字符串模块URL模块中间件挂载路由器node.js和mysql项目实战知识点完整代码注意点用http协议创建web服务器 //引入http const h…

【强训】Day07

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. Fibonacci数列2. 合法括号序列判断 ☆答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 Math.round(11.5) 等于&#xff08;&#xff09; A 11 B 11.5 C 12 D 12.5 以下对继承的描…