【go入门】变量

目录

  • 前言
  • 变量
    • 变量声明
      • 指定变量类型,如果没有初始化,默认为零值,零值是变量没有初始化系统默认的值
      • 根据值自行判断变量类型
      • := 声明变量
      • 多变量声明
  • 注意事项
  • 变量的生命周期

前言

本专栏将直接从go语言的内容开始,不会介绍go语言的前世今生以及go语言环境的安装以及配置。

变量

go语言变量名由字母、数字、下划线组成,不能以数字开头。声明变量的一般形式是var关键字。比如我想声明一个age变量,它是整型:

var age int

也可以同时声明多个变量

var age1, age2 int
//demo1
package mainimport "fmt"func main() {var a string = "Hello World!"fmt.Println(a)var b, c int = 1, 2fmt.Println(b, c)
}

变量声明

指定变量类型,如果没有初始化,默认为零值,零值是变量没有初始化系统默认的值

//demo2
package mainimport "fmt"func main() {var a string = "Hello" //声明一个变量并初始化fmt.Println(a)var b int //没有初始化则为零值fmt.Println(b)var c bool //bool的默认值是falsefmt.Println(c)
}

结果是

Hello
0
false

数值类型的默认值是0,布尔类型是false,字符串为""(空字符串)

根据值自行判断变量类型

也就是说,你可以直接这样写:

var d = 1

它会自动判断该变量是 int 型

:= 声明变量

这样声明变量相当于直接省略了 var 和 类型

f := 6 //var f int = 6

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

//错误
var f int //声明1次
f := 6 //var f int = 6,又声明一次
//demo3
package mainimport "fmt"func main() {g := "ni hao"fmt.Println(g)
}

多变量声明

//demo4
package mainimport "fmt"func main() {var a, b, c int = 1, 2, 3fmt.Println(a, b, c)var d, e, f = 4, 5, 6fmt.Println(d, e, f)g, h, i := 7, 8, 9 //这种方式只能再函数体中出现fmt.Println(g, h, i)
}

上面的方式适用于非全局变量,也可以叫局部变量
下面这的适用于声明全局变量

//demo5
package mainimport "fmt"var x, y int
var (a intb bool
)
var c, d int = 1, 2func main() {e := "hello" //只能再函数体中使用fmt.Println(x, y, a, b, c, d, e)
}

注意事项

  • 变量初始化时可以省略变量类型由系统自动判断,那么使用 var 关键字就有些多余,因此可以简写:
a := 10

首选这种方式声明变量,但是这种方式只能再函数体中使用

  • 在相同的代码块中,不能对相同名称的变量使用初始化声明,例如:
a := 10
a := 20 //错误

但是可以

a = 20

这是给变量赋予了一个新的值,并没有再次声明。

  • 如果声明了一个局部变量,但是没有使用,也会编译错误,单纯地赋值也是不行的,必须被使用。
//demo6
package mainimport "fmt"func main() {str1 := "abc"fmt.Println("hello", str1) //必须使用str1,否则会报错
}

全局变量是允许声明了但不使用

package mainimport "fmt"var str2 = "world" //可以不使用func main() {str1 := "abc"fmt.Println("hello", str1) //必须使用str1,否则会报错
}
  • 多类型变量也可以在同一行赋值
//demo7
package mainimport "fmt"func main() {//var a, b = 1, 2//var c, d = "hello", "world"//fmt.Println(a, b, c, d)a, b, c, d := 1, 2, "hello", "world" //多种类型变量在同一行赋值fmt.Println(a, b, c, d)
}
  • 空白标识符 _ 也被用于抛弃值,相当于只写变量,但得不到它的值
_, b = 1, 2
//demo8
package mainimport "fmt"func main() {a, b := 0, 0fmt.Println(a, b)_, b = 1, 2fmt.Println(a, b)
}

结果是

0 0
0 2

在go语言中必须使用所有被声明的变量,但有时候不需要返回这个函数的所有返回值。

变量的生命周期

全局变量的生命周期是程序的存活时间
在不发生内存逃逸(后面文章会讲到)的情况下,局部变量的生命周期是函数存活的时间

//demo9
package mainimport "fmt"var a1 = 1// b2出了这个函数就死了,它的生命周期就是test函数的存活时间
func test() {b2 := 2fmt.Println(b2)
}
func main() {var c3 = 3fmt.Println(a1, c3) //这里输出b2就会出错test()
}

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

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

相关文章

09_OpenCV彩色图片直方图

import cv2 import numpy as np import matplotlib.pyplot as plt %matplotlib inlineimg cv2.imread(computer.jpeg, 1) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) plt.imshow(img) plt.show()plot绘制直方图 plt.hist(img.ravel(), 256) #ravel() 二维降一维 256灰度级…

pycharm汉化插件无法使用也无法卸载的解决方法

pycharm汉化插件无法使用也无法卸载的解决方法 本文目录: 一、故障描述 二、故障解决 零、时光宝盒 学习没有可能一帆风顺,我们都是在不断遇到的各种突发问题,不断努力解决的过程中成长。 前几天,我发现家里的网络晚上12点左右开…

初识算法 · 双指针(3)

目录 前言: 和为s的两数之和 题目解析: ​编辑 算法原理: 算法编写: 三数之和 题目解析 算法原理 算法编写 前言: 本文通过介绍和为S的两数之和,以及三数之和,对双指针算法进行深一步…

欧科云链OKLink相约TOKEN2049:更全面、多元与安全

过去几日,OKLink 与全球 Web3 从业者与爱好者们相约狮城。在多场激动人心的活动上分享了我们的产品进展、有关于链上数据的专家观点以及打磨产品的经验。同时也听到了很多来自行业的宝贵声音。跟随我们的脚步,捕捉这充实一周的精彩瞬间: 1、…

netty之基础aio,bio,nio

前言 在Java中,提供了一些关于使用IO的API,可以供开发者来读写外部数据和文件,我们称这些API为Java IO。IO是Java中比较重要知识点,且比较难学习的知识点。并且随着Java的发展为提供更好的数据传输性能,目前有三种IO共…

5G NR SSB简介

文章目录 SSB介绍SSB波束扫描 SSB介绍 5G NR 引入了SSB 这个概念,同步信号和PBCH块(Synchronization Signal and PBCH block, 简称SSB) 它由主同步信号(Primary Synchronization Signals, 简称PSS)、辅同步信号(Secondary Synchronization Signals, 简称SSS)、PBCH…

【分页】Spring Boot 列表分页 + javaScript前台展示

后端: 准备好查询实体与分页实体 1、分页工具实体 package com.ruoyi.dms.config;import com.alibaba.nacos.api.model.v2.Result; import lombok.Data;import java.io.Serializable; import java.util.List;/*** author 宁兴星* description: 列表返回结果集*/ …

【10】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-泛型基础全解(泛型函数、泛型接口、泛型类)及参数、接口补充

序言: 本文详细讲解了关于ArkTs语言中的泛型,其中包含泛型函数、泛型接口、泛型约束、泛型类及其中参数的使用方法,补充了一部分接口相关的知识,包括接口的继承和具体实现,也写到了一些边边角角的小知识,剩…

详细介绍:API 和 SPI 的区别

文章目录 Java SPI (Service Provider Interface) 和 API (Application Programming Interface) 的区别详解目录1. 定义和目的1.1 API (Application Programming Interface)1.2 SPI (Service Provider Interface) 2. 使用场景2.1 API 的应用场景2.2 SPI 的应用场景 3. 加载和调…

jmeter学习(1)线程组与发送请求

1、线程组 执行顺序 :setUp线程组 > 线程组 > tearDown线程组 2、 发送请求 可以发送http、java、dubbo 请求等 下面讲解发送http 1)Http请求默认值 作用范围是该线程组下的所有HTTP请求,如果http请求设置的与默认值冲突&#xff0…

PC端微信小程序如何调试?

向往常一样运行开微信小程序开发者工具 如果只弹出pc端小程序,没有出现调试的界面:点击胶囊按钮的三个…选择重新进入小程序 即可依次展开相应的功能调试,改完代码没反应再刷新看看,再没反应就再次重新点击编译并自动调试。

【学习笔记】手写 Tomcat 六

目录 一、线程池 1. 构建线程池的类 2. 创建任务 3. 执行任务 测试 二、URL编码 解决方案 测试 三、如何接收客户端发送的全部信息 解决方案 测试 四、作业 1. 了解工厂模式 2. 了解反射技术 一、线程池 昨天使用了数据库连接池,我们了解了连接池的优…

DSPy101

DSPy 介绍 DSPy(Declarative Self-improved Language Programs in Python) 是一个用于系统化和增强在流水线内使用语言模型的框架,它通过数据驱动和意图驱动的系统来优化大型语言模型(LLM)的使用。 DSPy 的核心是模块…

C语言的内存结构

在电脑中C语言编译器也像其他软件一样占用一块内存空间。 为了更好的利用好这块内存,C语言将他们分为 在C语言中,变量定义的位置不一样,那么在内存中所处的位置也是不一样的。(变量在函数内部是存储在栈里,而在函数外部…

闯关训练三:Git 基础知识

任务1: 破冰活动:自我介绍 点击Fork目标项目,创建一个新的Fork 获取仓库链接 在连接好开发机的vscode终端中逐行执行以下代码: git clone https://github.com/KelvinIII/Tutorial.git # 修改为自己frok的仓库 cd Tutorial/ git branch -a g…

Star 3w+,向更安全、更泛化、更云原生的 Nacos3.0 演进

作者:席翁 Nacos 社区刚刚迎来了 Star 突破 30000 的里程碑,从此迈上了一个新的阶段。感谢大家的一路支持、信任和帮助! Nacos /nɑ:kəʊs/是 Dynamic Naming and Configuration Service 的首字母简称,定位于一个更易于构建云原…

Android SystemUI组件(11)SystemUIVisibility解读

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节思维导图,主要关注左侧最上方SystemUiVisibility解读部分即可。 本章节主要讲解SystemUiVisibility的概念及其相…

LeetCode从入门到超凡(四)深入浅出理解贪心算法

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的LeetCode学习总结文档;本文主要讲解贪心算法。💕💕😊 介绍 贪心算法是一种经典的算法…

《中国电子报》报道: 安宝特AR为产线作业者的“秘密武器

近日,中国电子报在其文章《下一代工业智能终端重新定义制造业》中对安宝特的增强现实(AR)解决方案给予了高度评价,称其为产线作业者的“秘密武器”。这一创新技术改变了传统制造业的作业方式,使得操作人员能够在生产过…

Java中Map和Set详细介绍,哈希桶的实现

大家好呀,前一节我们接触了二叉搜索树,那么紧接着,我们要学习一种十分重要而且也是我们在初阶数据结构中接触的最后一种数据结构—Map和Set,本篇博客将会详细介绍两种数据结构,并且针对哈希表底层实现一个哈希桶&#…