Go语言变量学习

您可以阅读Golang 教程第 2 部分:如何运行Hello World以及IDE介绍

什么是变量?

变量是为存储特定类型值的内存位置指定的名称。Go 中有多种声明变量的语法。让我们一一看看。

声明单个变量

var name type是声明单个变量的语法。

package mainimport "fmt"func main() {  var age int fmt.Println("My age is", age)age = 29 fmt.Println("My age is", age)age = 54 fmt.Println("My new age is", age)
}

Run in playground

上面的程序将打印以下输出。

My age is  0  
My age is 29  
My new age is 54  

该语句声明了一个名为类型的var age int变量。我们还没有为该变量分配任何值。如果一个变量没有被赋予任何值,Go 会自动用该变量类型的**零值来初始化它。**变量可以分配给其类型的任何值。在上面的程序中,age可以赋予任意整数值。

声明一个具有初始值的变量

var name type = initialvalue 声明变量时也可以为其提供初始值这是声明具有初始值的变量的语法。

package mainimport "fmt"func main() {  var age int = 29fmt.Println("My age is", age)
}

Run in playground

在上面的程序中,age是一个类型变量int并且具有初始值29。上面的程序将打印以下输出。

My age is 29  

类型推断

如果一个变量有一个初始值,Go 将自动使用该初始值推断该变量的类型。因此,如果变量有初始值,则type可以删除变量声明中的 。

可以使用以下语法声明变量
var name = initialvalue

Go 会自动从初始值推断出该变量的类型。

在下面的示例中,我们可以看到第 1 行中int的变量类型age已被删除。由于变量有一个初始值29,Go 可以推断它的类型是int

package mainimport "fmt"func main() {  var age = 29 fmt.Println("My age is", age)
}

Run in playground

多变量声明

可以使用单个语句声明多个变量。下面是多变量声明的语法。

var name1, name2 type = initialvalue1,initialvalue2

package mainimport "fmt"func main() {  var width, height int = 100, 50 fmt.Println("width is", width, "height is", height)
}

Run in playground

如果变量具有初始值,则可以删除该*类型。*由于上面的程序有变量的初始值,因此int可以删除类型。

不同类型的变量声明

在某些情况下,我们可能希望在单个语句中声明属于不同类型的变量。这样做的语法是

var (
name1 = initialvalue1

name2 = initialvalue2
)

下面的程序使用上述语法来声明不同类型的变量。

package mainimport "fmt"func main() {  var (name   = "naveen"age    = 29height int)fmt.Println("my name is", name, ", age is", age, "and height is", height)
}

Run in playground

name这里我们声明了一个类型为stringage类型height为 的变量int

运行上面的程序会打印

my name is naveen , age is 29 and height is 0  

简洁声明

Go 还提供了另一种简洁的变量声明方式。这称为简洁声明,它使用**:=**运算符。

name := initialvalue是声明变量的简洁声明语法。

以下程序使用简洁语法来声明一个count初始化为 的变量10。Go 会自动推断出count它的类型int,因为它已经用整数值初始化了10

package mainimport "fmt"func main() {  count := 10fmt.Println("Count =",count)
}

Run in playground

上面的程序将打印,

Count = 10  

简洁语法多变量声明。

name, age := initialvalue,initialvalue是声明变量的简洁声明语法。

package mainimport "fmt"func main() {  name, age := "naveen", 29 fmt.Println("my name is", name, "age is", age)
}

Run in playground

上面的程序声明了两个变量name和 ,age其类型分别为stringint

如果运行上面的程序,您可以看到my name is naveen age is 29打印结果。

简写声明要求赋值左侧的所有变量都有初始值。以下程序将打印错误assignment mismatch: 2 variables but 1 values。这是因为年龄尚未分配值。

package mainimport "fmt"func main() {  //错误name, age := "naveen" fmt.Println("my name is", name, "age is", age)
}

Run in playground

**仅当:=**左侧的至少一个变量是新声明的时才能使用简写语法。考虑以下程序,

package mainimport "fmt"func main() {  // 声明变量 a and ba, b := 20, 30 fmt.Println("a is", a, "b is", b)// b已经在上面被声明 c新声明 b, c := 40, 50fmt.Println("b is", b, "c is", c)// b c 重新赋值b, c = 80, 90 fmt.Println("changed b is", b, "c is", c)
}

Run in playground

在上面的程序中,第 1 行。ab已经被声明,但c是新声明的,因此它可以工作并输出

a is 20 b is 30  
b is 40 c is 50  
changed b is 80 c is 90  

而如果我们运行下面的程序,

package mainimport "fmt"func main() {  //a b 被赋值a, b := 20, 30 fmt.Println("a is", a, "b is", b)//错误, 没有新的变量a, b := 40, 50 
}

Run in playground

会打印 error/prog.go:8:10: no new variables on left side of :=
这是因为变量ab都已经被声明了,并且第 1 行使用**:=**
第二行左边没有新的变量导致

还可以为变量分配在运行时计算的值。考虑以下程序,

package mainimport (  "fmt""math"
)func main() {  a, b := 145.8, 543.8c := math.Min(a, b)fmt.Println("Minimum value is", c)
}

Run in playground

在上面的程序中,math是一个包,Min是该包中的一个函数。现在不用担心,我们将在接下来的教程中详细讨论包和函数。我们需要知道的是, c的值是在运行时计算的,并且它是a和b的最小值。上面的程序将打印,

Minimum value is  145.8  

由于 Go 是强类型的,声明为属于一种类型的变量不能被赋予另一种类型的值。以下程序将打印错误,cannot use "naveen" (type string) as type int in assignment因为age被声明为类型并且我们正在尝试为其int分配值。string

package mainfunc main() {  age := 29    // 错误 试图将字符串赋值给int类型的变量age = "naveen" 
}

Run in playground

下一个教程 - Go语言基本类型简介

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

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

相关文章

vue3模板-vscode设置(语法糖)

选择菜单里的 文件 > 首选项 > 用户代码片段 vscode模板 {"Print to conaole":{"prefix": "v-ts", //在新建立的页面中输入C就会有智能提示&#xff0c;Tab就自动生成好了"body": ["<template>"," <…

快手新版本sig3参数算法还原

Frida Native层主动调用 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81…

C++之委托构造函数实例(二百四十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【每日一句】只出现一次的数

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;位运算 其他语言Cpython3 写在最后 Tag 【位运算-异或和】【数组】【2023-10-14】 题目来源 136. 只出现一次的数字 题目解读 给你一个数组&#xff0c;找出数组中只出现一次的元素。题目保证仅有一个元素出现一次&a…

[华为杯研究生创新赛 2023] 初赛 REV WP

前言 一年没打比赛了, 差一题进决赛, REV当时lin的第三个challenge没看出来是凯撒, 想得复杂了, 结果错失一次线下机会 >_< T4ee 动态调试, nop掉反调试代码 发现处理过程为 置换sub_412F20处理(这里看其他师傅的wp知道应该是rc4, 我是直接en逆的buf字符串中每一位和…

竞赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数&#xff1a;2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

Qt通过正则表达式筛选出字符串中的手机号

需求 用户需要聊天记录中含有11位的手机号码进行提醒的功能&#xff0c;所以需要在收到聊天消息后匹配查看是否存在手机号。如果找到然后提醒。 分析 主要的需求可以拆分为两点&#xff1a; 筛选出字符串里面的数字字符。通过正则匹配数字字符是否是11位手机号码。 一开始没…

Java设计模式之享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享对象来减少内存使用和提高性能。在享元模式中&#xff0c;将对象分为可共享的内部状态和不可共享的外部状态。内部状态是对象共享的部分&#xff0c;而外部状态是对象的变化部分&…

【网安必读】CTF/AWD实战速胜指南《AWD特训营》

文章目录 前言&#x1f4ac;正文这本书好在哪❔这本书讲了什么❔文末送书 前言&#x1f4ac; 【文末送书】今天推荐一本网安领域优质书籍《AWD特训营》&#xff0c;本文将从其内容与优势出发&#xff0c;详细阐发其对于网安从业人员的重要性与益处。 正文 &#x1f52d;本书…

软考高级系统架构设计师系列之:深入理解设计模式

软考高级系统架构设计师系列之:深入理解设计模式 一、设计模式相关技术文章二、设计原则三、设计模式概念四、设计模式的分类五、创建性模式六、创建性模式-工厂方法模式七、创建性模式-抽象工厂模式八、创建性模式-构建器模式九、面向对象设计-结构性模式十、结构性模式-适配…

数据结构 | Huffman TreeCode

构造参考&#xff1a; 赫夫曼树_关于huffman树,权值相同-CSDN博客 编码参考&#xff1a; 【数据结构与算法】-哈夫曼树(Huffman Tree)与哈夫曼编码_数据结构哈夫曼树编码-CSDN博客

在springboot中如何开启Bean数据校验

①&#xff1a;添加JSR303规范坐标与Hibernate校验框架对应坐标 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency><dependency><groupId>org.hibernate.validator<…

系统架构设计:20 论软件需求管理

目录 一 需求工程 1 需求开发 1.1 需求获取 1.1.1 软件需求的分类 1.1.2 需求获取方法

开启多线程渲染后出现大量的Crash信息

1&#xff09;开启多线程渲染后出现大量的Crash信息 2&#xff09;Unity是否有提供硬件接口将纹理从Gamma值转为Linear值 3&#xff09;屏幕特效如何适配不同分辨率 这是第356篇UWA技术知识分享的推送&#xff0c;精选了UWA社区的热门话题&#xff0c;涵盖了UWA问答、社区帖子等…

《论文阅读:Dataset Condensation with Distribution Matching》

点进去这篇文章的开源地址&#xff0c;才发现这篇文章和DC DSA居然是一个作者&#xff0c;数据浓缩写了三篇论文&#xff0c;第一篇梯度匹配&#xff0c;第二篇数据增强后梯度匹配&#xff0c;第三篇匹配数据分布。DC是匹配浓缩数据和原始数据训练一次后的梯度差&#xff0c;DS…

idea怎么设置作者信息(详细)

目录 一&#xff1a;在Java类的开头自动注释作者名字和日期等信息 二&#xff1a;给Java的方法注释作者名字和日期等信息 1. 不可修改的模板&#xff1a;Postfix Completion 2. 可修改的模板&#xff1a;Live Templates tips&#xff1a;首先给大家推荐两款好用的免费软件&…

一文就懂大语言模型Llama2 7B+中文alpace模型本地部署

大语言模型Llama2 7B中文alpace模型本地部署 VX关注晓理紫并回复llama获取推理模型 [晓理紫] 1、Llama模型 一个由facebook发布的生成式语言模型&#xff0c;具体可以到其官方了解。 为了大家更好理解&#xff0c;这里把目录结构显示下一如下图。 2、 下载Llama并配置环境 …

系统架构设计:11 论湖仓一体架构及其应用

目录 一 湖仓一体(Lakehouse) 1 数据仓库 2 数据湖 3 数据仓库和数据湖 4 湖仓一体(Lakehouse)

什么是微服务架构

阅读“微服务架构”一词可能会让您直观地了解该术语的含义&#xff1a;计算架构中的小型服务。这个定义并不完全错误&#xff0c;但也不完全正确。 微服务架构通常被称为“打破整体”的一种方式。遗憾的是&#xff0c;这与《2001&#xff1a;太空漫游》无关&#xff0c;而是将…

Openstack部署

搭建基础环境 #网络 #防火墙 #用户用 #解析 #同步时间 实验角色 OpenStack01OpenStack02OpenStack03192.168.1.101192.168.1.102192.168.1.103srv1srv2srv3 同步时间 [rootsrv1]# yum install chrony -y [rootsrv1]# vim /etc/chrony.conf # 修改第3行&#xff0c;将NT…