【30天熟悉Go语言】4 Go的变量、常量、运算符

news2024/12/23 18:46:20

文章目录

  • 一、前言
  • 二、变量
    • 1、变量的基础使用
    • 2、变量的多种使用方式
      • 1)全局变量
      • 2)局部变量
      • 3)丢弃赋值
    • 3、Go和Java的变量对比
  • 三、常量
    • 1、Go和Java的常量对比
  • 三、运算符
    • 1、算术运算符 ++、--
    • 2、运算符 &、*
  • 四、总结

一、前言

在这里插入图片描述

Go系列文章:

  1. GO开篇:手握Java走进Golang的世界
  2. 2 Go开发环境搭建、Hello World程序运行
  3. 3 Go编程规约和API包

Go专栏传送链接:https://blog.csdn.net/saintmm/category_12326997.html

二、变量

变量相当于内存中一个数据存储空间的标识。

1、变量的基础使用

变量的使用分三步:声明、赋值、使用。

  • 变量的声明 采用 var 变量名 数据类型的形式。
package main

import "fmt"

func main() {
	// 1. 变量的声明
	var age int
	// 2. 变量的赋值
	age = 18
	// 3. 变量的使用
	fmt.Println("age = ", age)
}

变量的声明和赋值可以合成一句:

var age int = 19

如果变量重复定义,GoLand中会报错:
在这里插入图片描述

变量赋值时,数据与类型不匹配,报错如下:

在这里插入图片描述

2、变量的多种使用方式

1)全局变量

全局变量是定义在函数外的变量,可以被多个函数使用。

package main

import "fmt"

var globalV1 = 100
var globalV2 = 1.11

func main() {
	variable1()
	//variable2()
}

func variable1() {
	fmt.Println(globalV1)
	fmt.Println(globalV2)
}

func variable2() {
	fmt.Println(globalV1)
	fmt.Println(globalV2)
}

如果存在多个全局变量,每次都要用var来声明,太麻烦了;所以Go支持一次性声明多个不用类型的变量;

var (
	globalV1= 3.33
	globalV2= "Hello"
)

2)局部变量

局部变量是声明在函数{}中的变量;

1> 指定变量的类型 并 赋值:

var v1 int = 18
fmt.Println(v1)

2> 指定变量的类型,但是不赋值,使用默认值:

var v2 int
fmt.Println(v2)

3> 不写变量的类型,程序会自动根据 = 号后面的值判断变量的类型(自动类型推断):

var v3 = "saint"
fmt.Println(v3)

4> 可以使用:= 代替 var,进行变量的声明赋值:

v4 := "bob"
fmt.Println(v4)

5> 声明多个相同类型的变量:

var n1, n2, n3 int
fmt.Println(n1)
fmt.Println(n2)
fmt.Println(n3)

6> 声明多个不同类型的变量:

var n4, name, n5 = 9, "jack", 7.8
fmt.Println(n4)
fmt.Println(name)
fmt.Println(n5)

// 省略var的方式
n6, sex := 6.9, "man"
fmt.Println(n6)
fmt.Println(sex)

3)丢弃赋值

使用标识符_接收值,可以丢弃赋值;

丢弃赋值必须在一次取两个及以上的值的场景下,又不想要其中一个值的时候使用。

var _,_,num = 1,2,3
fmt.Println("num = ",num)

代码片段中将只会接受到3这个值,并将其赋值给num变量。

3、Go和Java的变量对比

  1. 变量声明赋值方式不同;Java是变量类型 变量名 = 变量值、Go是var 变量名 变量类型 = 变量值

    // Java 变量类型  变量名 = 变量值
    String name = "li_ming";
    
    // Go var  变量名  变量类型 = 变量值
    var name string = "li_ming"
    
  2. Java的变量声明需要指定变量的数据类型;Go的变量声明可以不指定变量的数据类型(类型自动推断)

    // go类型自动推断
    var v3 = "saint"
    
  3. Java方法内外变量赋值只能使用=;Go的变量声明赋值在函数内部可以缩写(变量名 := 变量值),函数外只能用var 变量名 = 变量值

    // 函数内部可以直接使用 【 变量名 := 变量值 】 赋值,函数外不可以
    name := "saint"
    
  4. Go支持多变量同时赋值,丢失赋值(使用标识符_接收值,可以丢弃赋值,但必须在一次取两个及以上的值的场景下,又不想要其中一个值的时候使用)

    // 多变量同时赋值
    var name,age = "saint",18
    
    // 丢弃赋值,示例中:把 1和2丢弃 只取3
    var _,_,num = 1,2,3
    fmt.Println("num = ",num)
    

三、常量

Go的常量和变量声明的唯一区别在于:常量声明使用const、变量声明使用var。如果大家写过一段时间的前端,会发现Go的常量和变量声明和前端比较像。

//const  常量名  常量类型 = 常量值   显示推断类型
const name string = "const_sanint"
//隐式推断类型
const name2 ="const_sanint2"

1、Go和Java的常量对比

Go中的常量和Java中的常量含义有一个本质的区别:

  • Go中的常量是指在编译期间就能确定的量;而Java中的常量是指被赋值一次(JVM跑起来后赋值的)后就不能修改的量。
  1. 常量声明方式不同;Java是final修饰符 常量类型 常量名 = 常量值,Go是const 常量名 常量类型 = 常量值

    // Java final修饰符   常量类型   常量名 =  常量值;
    public static final String TAG = "A";
    
    // go const  常量名  常量类型 = 常量值   显示推断类型
    const name string = "const_li_ming"
    // go 隐式推断类型
    const name2 ="const_xiao_hong"
    

三、运算符

运算符是—种特殊的符号,用以表示数据的运算、赋值和比较等 。Go中常用的运算符如下:

在这里插入图片描述

这里几乎和Java语言的使用方式,这里针对算术运算符中的++--和其他运算符做一些解释说明。

1、算术运算符 ++、–

++ 自增 加1操作,–自减,减1操作。

var a int = 10
a++
fmt.Println(a)
a--
fmt.Println(a)

和Java不同的点:

  • Go中,++-- 操作非常简单,只能单独使用,不能参与到运算中去,比如:age = ++age + 10,这种复杂运算是不允许的。
  • Go中,++-- 只能在变量的后面,不能写在变量的前面(--a ++a都是错误的写法)

2、运算符 &、*

在Go中 &* 有特殊的用意:

  • & :返回变量的存储地址
  • *:取指针变量对应的数值
package main

import "fmt"

func main() {
	var age int = 18
	fmt.Println("age对应的存储空间内存地址为:",&age)

	// 指针变量 ptr,指向age在存储空间的内存地址
	var ptr *int = &age
	fmt.Println(ptr)
	fmt.Println("ptr这个指针指向的具体数值为:",*ptr)
}

指针的内容见后面的文章。

四、总结

针对变量/常量的声明赋值,和Java相比,Go有一些特有的性质:

  1. 支持同时声明多个不同类型的变量/常量;
  2. 支持类型自动推断
  3. 支持丢弃赋值。

此外,针对常量,Java和Go的认知不同:

  • Java认为JVM跑起来之后,常量值被赋值了一次,后面不允许再更改。
  • 而Go的常量则是在编译期就能确定的量,同样不允许修改。

Go的算术运算符++-- 不能像Java一样用于复杂运算中,只能做最简单的使用。

并且Go的&* 有特殊用意。

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

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

相关文章

计算机组成原理 之 第四章 指令系统

1. 指令格式 通常包括操作码字段(OP)和地址码字段(A),有的指令不需要地址码 指令系统(指令集):一台计算机的所有指令的集合,eg:X86、ARM (1&#…

手机安卓Termux搭建Hexo博客网站,发布公网访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 转载自cpolar极点云的文章:安卓手机使用Termux搭建Hexo个人博客网站【内网穿透公网访问】 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#…

一键搭建本地Wordpress环境 - MacOS

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成…

聊聊企业无线网络安全

新钛云服已累计为您分享749篇技术干货 不知不觉无线网络已经成为了办公网主流。最早接触无线网络的时候是2001年,那时候笔记本电脑还比较少见,标配也不支持无线网络,要使用无线网络需要另外加一块PCMIA接口的无线网卡。第一次体验无线网络的时…

【k8s】Jenkins实现springcloud应用CI、CD实践 【三】

一、运行Jenkins流水线流程思路: 场景:java微服务应用, 单体仓库,多个微服务模块,(并行构建、自动化构建、根据模块变更仅更新特定模块) java、nodejsCI阶段 并行方式; 根据模块变…

【AUTOSAR】Com通讯栈配置说明(三)---- CanSM模块

CanNm模块 该项目中的Nm 并非 autosar nm, 不适用ETAS 配置 CanSM CanSMConfiguration CanSMModeRequestRepetitionMax: 模式请求失败后最大的重试次数 CanSMModeRequestRepetitionTime:模式请求重试时间间隔 CanSMManagerNetworks CanSMBorCounterL1…

数据结构与算法-递归

2.3 递归 概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller in…

分享一个下载软件的html

主要是html与js,css实现 页面如下: 点击软件后会滑动到,软件介绍,然后弹出二维码: <!DOCTYPE HTML> <!--HTML for wufuba.comAuthor: www.wufuba.com --> <html lang="zh-cmn-Hans"><head><title>xxx软件</title><m…

Ora提示词版ChatGPT机器人

Ora可以自己创建一个ChatGPT机器人&#xff0c;可以设置自己的提示词例如我创建的AI佛祖https://ora.ai/aesthetic-red-nfa4/ai%E4%BD%9B%E7%A5%96 提示词 创建机器人的时候&#xff0c;需要设定自己的提示词&#xff0c;例如&#xff1a; 假设你是佛祖&#xff0c;名字叫做释迦…

设计模式之~享元模式

定义&#xff1a; 享元模式英文称为“Flyweight Pattern”&#xff0c;又译为羽量级模式或者蝇量级模式。 享元模式&#xff08;Flyweight Pattern&#xff09;主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。这种类型的设计模式属于结构型模式&#xff0c…

git 分支管理:009

1. 分支的(创建、切换、删除) 注意&#xff1a;进行分支操作之前&#xff0c; 需要将当前分支需要提交的文件全部提交&#xff0c; 否则会将未处理的内容一并带到新分支下&#xff0c;这样容易造成分支内容混乱。 查看分支&#xff1a;git branch 创建分支&#xff1a;git bran…

氟化物超标怎么处理

项目基本信息 工艺及产品信息 甲方 / 采用工艺 过滤系统螯合树脂除氟系统 工程公司 / 工艺原理 废水除氟&#xff0c;耐受氯离子、硫酸根等阴离子的干扰 开始时间 2020/11/12 工艺特点 再生周期长 结束时间 2020/11/30 型号 CH-87 项目周期及项目地 15天 江…

力扣高频SQL50题(基础版)——第一天

力扣高频SQL50题(基础版)——第一天 1 可回收且低脂的产品 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # WHERE子句中使用多条件 SELECT product_id FROM Products WHERE low_fatsY AND recyclableY1.3 运行截图 2 寻找用户推荐人 2.1 题目内容…

多家快递如何同时跟踪物流信息并分析出问题件

在这个快节奏的时代&#xff0c;我们经常需要查询快递信息&#xff0c;但是传统的快递查询方式可能需要花费大量的时间和精力。那么&#xff0c;有没有一种更加高效的方法可以同时分析多家快递物流信息并分析出问题呢&#xff1f;答案是肯定的&#xff01;快递批量查询高手应运…

Latex

Latex 文章目录 Latex安装VSCode 配置 latexReference 安装 sudo apt-get install texlive-full # 安装时间有点长,其中的xetex集成了中文字体的环境&#xff0c;使得中文文档的生成变得很容易&#xff0c;可以使用系统自带得字体&#xff0c;使用更好看得字体。 apt-cache se…

Django实现接口自动化平台(三)实现注册功能【持续更新中】

上一章&#xff1a; Django实现接口自动化平台&#xff08;二&#xff09;认证&授权&登录【持续更新中】_做测试的喵酱的博客-CSDN博客 下一章&#xff1a; 一、背景 1.1 实现功能 1、一共提供三个接口&#xff1a; 使用Django 自带的User模型&#xff0c;实现注…

《计算机组成原理》唐朔飞 第7章 指令系统 - 学习笔记

写在前面的话&#xff1a;此系列文章为笔者学习计算机组成原理时的个人笔记&#xff0c;分享出来与大家学习交流。使用教材为唐朔飞第3版&#xff0c;笔记目录大体与教材相同。 网课 计算机组成原理&#xff08;哈工大刘宏伟&#xff09;135讲&#xff08;全&#xff09;高清_…

ChatGPT是什么,一文读懂ChatGPT

ChatGPT是个啥&#xff1f; 近期很多朋友后台私信GPT如何访问&#xff0c;我在网上找到一个免梯子的GPT&#xff0c;使用起来还是挺顺畅的&#xff0c;有需要的可以尝试使用&#xff0c;传送门&#xff0c;界面也挺清新的 近期&#xff0c;OpenAI 发布了 ChatGPT&#xff0c;是…

【JavaSE】Java基础语法(三十八):并发工具类

文章目录 1. Hashtable2. ConcurrentHashMap基本使用3. ConcurrentHashMap1.7原理4. ConcurrentHashMap1.8原理5. CountDownLatch6. Semaphore 1. Hashtable Hashtable出现的原因 : 在集合类中HashMap是比较常用的集合对象&#xff0c;但是HashMap是线程不安全的(多线程环境下…

chatgpt赋能python:Python中的乘方计算:介绍和应用

Python中的乘方计算&#xff1a;介绍和应用 乘方是数学运算中的重要部分&#xff0c;表示一个数&#xff08;称为底数&#xff09;被另一个数&#xff08;称为指数&#xff09;乘以若干次。在Python编程中&#xff0c;乘方运算也是非常常见的。本文将为您介绍Python中的乘方计…