关于Golang变量初始化/类型推断/短声明的问题

视频: https://www.bilibili.com/video/BV1Zh411k7iB/

声明变量同时初始化

上节我们了解了三种变量声明的语法,并且知道未初始化的变量初始值都是其类型的零值

其实只需要在声明时赋予初始值,即可进行初始化

下面针对三种变量声明语法进行初始化:

[1] var name type

[2] var name1, name2 type

[3]

var (
  name1 type1
  name2 type2
)

类型推断

如果变量声明时附带初始值,Go会自动推断出初始值的类型,这时可以省略掉变量类型的声明:

通过fmt.Printf函数和%T标记(后面再了解,这里先记下),我们最终得知name变量的类型最终推断为string

疑问: var pi = 3.14pi变量的类型是什么? 是float32还是float64? 试试便知:

Go会根据数值的精度(precision)来推断变量类型:

  • 整数 -> int
  • 浮点数 -> float64
  • 复数 -> complex128

有了类型推断(Type inference),我们有能力可以一行声明多个不同类型的变量:

变量短声明

Go还提供了一种更加简洁的用来声明初始化变量的语法,叫做变量短声明(Short hand declaration)

变量短声明,使用:=操作符,它有点像一个海象

利用变量短声明,再次化简上个例子的代码:

在Go中,变量不能重复声明,否则会报错

使用短声明:=时也一样

因为短声明要求左边至少有一个未声明的变量

第二行:=对于name来说是重新赋值,对于age来说是声明并初始化

短声明还有一个约束 —— 只能在函数体内使用(后面讲到变量作用域时再讨论 =。=)

总结

到此这篇关于关于Golang变量初始化/类型推断/短声明的问题的文章就介绍到这了,更多相关Golang变量类型推断内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang常见错误之值拷贝和for循环中的单一变量详解

    前言 golang(中文名:go语言)是谷歌2009发布的第二款开源编程语言.Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全.支持并行进程..如果你想知道得更多,请移步至官网golang官网 在 Go 中函数的调用是值拷贝 copy value,而且在 for 循环中 v 的变量始终是一个变量.如果 v 是 pointer,print 这个 method 接收的是指针的拷贝,for 循环体中每次迭代 v 的 pointer va

  • golang中值类型/指针类型的变量区别总结

    前言 值类型:所有像int.float.bool和string这些类型都属于值类型,使用这些类型的变量直接指向存在内存中的值,值类型的变量的值存储在栈中.当使用等号=将一个变量的值赋给另一个变量时,如 j = i ,实际上是在内存中将 i 的值进行了拷贝.可以通过 &i 获取变量 i 的内存地址 指针类型:简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go语言增加了一些限制,包括如下几条: 不同类型的指针不能互相转化,例如*int, int32, 以及int

  • 详解Golang编程中的常量与变量

    Go语言常量 常量是指该程序可能无法在其执行期间改变的固定值.这些固定值也被称为文字. 常量可以是任何像一个整型常量,一个浮点常量,字符常量或字符串文字的基本数据类型.还有枚举常量. 常量是一样,只是它们的值不能自己定义后进行修改常规变量处理. 整型常量 一个整数文字可以是十进制,八进制,或十六进制常数.前缀指定基或基数:0x或0X的十六进制,0表示八进制,并没有为十进制. 一个整数文字也可以有一个后缀为U和L的组合,分别为无符号和长整型.后缀可以是大写或小写,并且可以以任意顺序. 这里是整数常

  • Golang常用环境变量说明与设置详解

    无论你是使用Windows,Linux还是Mac OS操作系统来开发Go应用程序,在安装好Go安装语言开发工具之后,都必须配置好Go语言开发所要求的 环境变量,才算初步完成Go开发环境的搭建. 但对于一些初学者来说,可能不太明白Go语言中常用的环境变量(Environment variables)的作用以及如何设置环境变量,今天我们来讲讲. 注意:Go提供的Windows操作系统安装包(.msi后缀)安装完成后,会自动配置几个常用的环境变量. 常用环境变量 Go语言中可以设置的环境变量有很多,每

  • 关于Golang变量初始化/类型推断/短声明的问题

    视频: https://www.bilibili.com/video/BV1Zh411k7iB/ 声明变量同时初始化 上节我们了解了三种变量声明的语法,并且知道未初始化的变量初始值都是其类型的零值 其实只需要在声明时赋予初始值,即可进行初始化 下面针对三种变量声明语法进行初始化: [1] var name type [2] var name1, name2 type [3] var ( name1 type1 name2 type2 ) 类型推断 如果变量声明时附带初始值,Go会自动推断出初始值

  • golang类型推断与隐式类型转换

    目录 前言 一.常量的隐式类型转换 1.常量的声明 2.常量的类型转换 3.隐式转换的原理 二.变量的类型推断 1.类型推断的原理 三.类型推断示例分析 总结 前言 golang类型推断可以省略类型,像写动态语言代码一样,让编程变得更加简单,同时也保留了静态类型的安全性. 类型推断往往也伴随着类型的隐式转换,二者均与golang的编译器有关.在了解了golang的类型推断与隐式类型转换原理后,将对如下问题信手拈来——下述代码能通过编译吗?b的值是什么类型? // eg.1 a := 1.1 b

  • Golang 变量申明的三种方式

    Golang 申明变量主要有三种方式:  一是使用 var 关键字,申明包级或函数级变量:  二是使用短变量申明方式,只能申明函数级变量,且需指明变量值:  三是使用 const 关键字,申明包级或函数级常量. 1.var var 可以申明包级变量,短变量申明方式不可以,这是二者最大的区别. var name T // name默认为类型T的零值 var name T = value // 赋初始值时指明类型 var name = value // 根据值推断变量类型 var name0, na

  • 浅谈C#中的常量、类型推断和作用域

    一.常量常量是其值在使用过程中不会发生变化的变量.在声明和初始化变量时,在变量前面家关键字const,就可以把该变量指定为一个常量: const int a=100;//a的值将不可以改变 常量的特征: 1.常量必须在声明时初始化.指定了其值以后,就不能再修改了.2.常量的值必须能在编译时用于计算.因此不能从一个变量中提取的值来初始化常量.如果需要这么做,应该使用只读字段.3.常量总是静态的,但注意,不必在常量的声明中包含修饰符static.(实际上,不允许)在程序中使用常量至少有3个好处: 1

  • Java8中对泛型目标类型推断方法的改进

    一.简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法的创建中. 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: 复制代码 代码如下: List<Apple> box = new ArrayList<Apple>();box.add(new Apple());Apple a

  • Java8新特性之泛型的目标类型推断_动力节点Java学院整理

    简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.通俗点将就是"类型的变量".这种类型变量可以用在类.接口和方法的创建中. 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = new ArrayList<Apple>(); box.add(new Apple());Apple apple =box.ge

  • Java 10 局部变量类型推断浅析

    前言 java 10 引进一种新的闪闪发光的特性叫做局部变量类型推断.听起来很高大上吧?它是什么呢? 下面的两个情景是我们作为 Java 开发者认为 Java 比较难使用的地方. 上下文:陈词滥调和代码可读性 也许日复一日,你希望不再需要重复做一些事情.例如在下面的代码(使用 Java 9 的集合工厂),左边的类型也许会感觉到冗余和平淡. import static java.util.Map.entry; List<String> cities = List.of("Brussel

  • 详解TypeScript映射类型和更好的字面量类型推断

    概述 TypeScript 2.1 引入了映射类型,这是对类型系统的一个强大的补充.本质上,映射类型允许w咱们通过映射属性类型从现有类型创建新类型.根据咱们指定的规则转换现有类型的每个属性.转换后的属性组成新的类型. 使用映射类型,可以捕获类型系统中类似Object.freeze()等方法的效果.冻结对象后,就不能再添加.更改或删除其中的属性.来看看如何在不使用映射类型的情况下在类型系统中对其进行编码: interface Point { x: number; y: number; } inte

  • Golang中Set类型的实现方法示例详解

    前言 本篇主要给大家讲述了如何利用Go语言的语法特性实现Set类型的数据结构,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍吧. 需求 对于Set类型的数据结构,其实本质上跟List没什么多大的区别.无非是Set不能含有重复的Item的特性,Set有初始化.Add.Clear.Remove.Contains等操作.接下来看具体的实现方式分析吧. 实现 仍然按照已有的编程经验来联想如何实现基本Set功能,在Java中很容易知道HashSet的底层实现是HashMap,核心的就是用一个常量

随机推荐