【Golang】第二弹-----变量、基本数据类型、标识符

news2025/3/17 20:36:39

 笔上得来终觉浅,绝知此事要躬行

🔥 个人主页:星云爱编程

🔥 所属专栏:Golang

🌷追光的人,终会万丈光芒  

 🎉欢迎大家点赞👍评论📝收藏⭐文章

  

目录

一、变量

1.1基本介绍

1.2变量的使用

1.3变量使用注意事项

二、数据类型

2.1基本介绍

 2.2整数类型

2.2.1基本介绍

2.2.2整数的各个类型

 2.2.3使用细节

2.3浮点类型

2.3.1基本介绍

2.3.2浮点类型分类

2.3.3使用细节

2.4字符类型

2.4.1基本介绍

2.4.2使用细节

2.4布尔类型

2.5string类型

2.5.1基本介绍

2.5.2使用细节

 2.6基本数据类型的默认值

2.7基本数据类型之间的相互转换 

2.7.1基本语法

2.7.2使用细节

2.8基本数据类型和string间的转换

2.8.1基本数据类型转string

 2.8.2 string类型转基本数据类型

三、标识符

3.1基本介绍

3.2标识符命名规则

3.3标识符命名注意事项

结语


一、变量

1.1基本介绍

变量是程序的基本组成单位,变量相当于内存中一个数据储存空间的表示。

1.2变量的使用

(1)声明变量

基本语法:var 变量名 数据类型

(2)非变量赋值

(3)使用变量

例如:

package main
import "fmt"

func main(){
	var i int//1定义变量
	i=10  //2给变量赋值
	fmt.Printf("i=%d",i)//3使用变量
}

1.3变量使用注意事项

(1)变量表示内存中的一个存储区域,该区域有自己的名称和类型;

(2)Golang变量使用的三种方式:

①指定变量类型,声明后若不赋值,使用默认值

②根据值自行判断变量类型

省略var,注意:=左边的变量不能是已经声明的,否则会导致编译报错

(3)Golang中可以一次性声明多个变量

例:

package main
import "fmt"

func main(){
	name ,class,age:="jack","软工1班",19
	fmt.Printf("name=%v,class=%v,age=%v",name,class,age)

}

如何一次性声明多个全局变量:

package main
import "fmt"

//定义全局变量
var a int =5
var b float32=3.6
var c string="csdn"
//一次性声明多个全局变量
var (
	d=5
	e=7
	f="big"
)

func main(){
	name ,class,age:="jack","软工1班",19
	fmt.Printf("name=%v,class=%v,age=%v",name,class,age)

}

(4)变量在同一个作用域不能重名;

(5)变量=变量名+值+数据类型,这是变量的三要素;

(6) 变量在声明时如果没有赋值,则会使用默认值,int为0,string默认为空串;

若声明时给变量赋值,则可以省略数据类型,例如:var n=400;

二、数据类型

2.1基本介绍

 如上图,go的数据类型非常多,这里我们只讲基本数据类型,复杂数据类型在后面的文章再叙。

 2.2整数类型

2.2.1基本介绍

用于存放整数值的类型

2.2.2整数的各个类型

类型有无符号占用存储空间取值范围
int81byte-128~127
int162byte-2^15~2^15-1
int324byte-2^31~2^31-1
int648byte-2^63~2^63-1
uint81byte0~255
uint162byte0~2^16-1
uint324byte0~2^32-1
uint648byte0~2^64-1

 2.2.3使用细节

(1)Golang的整形默认声明为int型

var n=6//n的数据类型为int

 (2)在声明int型时,默认为int32类型

var n int =100//这里的int为int32
m:=200

 (3)如何查看某个变量的大小和数据类型

var n int=100
	fmt.Printf("n的数据类型为%T,  大小为%d字节",n,unsafe.Sizeof(n))

(4)Golang程序中,整形变量采用保小不保大的原则,即:在保证程序正常运行的情况下,尽量使用占用空间小的数据类型。

2.3浮点类型

2.3.1基本介绍

浮点类型即小数类型,是用来存放小数的。

2.3.2浮点类型分类

类型占用存储空间表示范围
float324byte-3.403E38~3.403E38
float648byte-1.798E308~1.798E308

2.3.3使用细节

 (1)Golang浮点类型有固定的范围和字段长度,不受操作系统影响

(2)Golang浮点型默认声明为float64类型

var n=3.14
fmt.Printf("n的数据类型为%T",n)

(3)浮点数在机器中的存放形式:浮点数=符号位+指数位+位数位,故浮点数都是有符号的

(4)浮点数在存储过程中会有精度损失,通常情况下推荐使用float64,因为其更准确

2.4字符类型

2.4.1基本介绍

  • Goalng中没有专门的字符类型,如果要存储单个字母字符,一般使用byte来保存。 
  • 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。

2.4.2使用细节

(1)字符常量是由(' ')单引号括起来的单个字符,如:'a' 

(2)我们保存的字符如果在ASCII表,可以直接使用byte保存,若保存的字符对应码大于255,我们可以使用int来保存

(3)Golang中允许使用转义字符‘\’来将其后的字符转变成特殊字符常量,如:\n表示换行符

(4)Golang中字符采用utf-8编码,即一个英文字母占1个字节,一个中文汉字占3个字节

(5)Golang中,字符的本质是一个整数,直接输出时,是该字符utf-8编码对应的码值,同时可以对整数进行格式化输出%c,会得到相应的utf-8编码的字符

(6)字符类型是可以进行运算的,相当于整数,因为它都对应有Unicode码

var a=10+'n'
fmt.Printf("%d",a)//a==120  n==110

2.4布尔类型

  • 布尔类型也叫bool类型,只有true和false两个取值
  • 布尔类型占一个字节
  • 布尔类型常用于逻辑运算

2.5string类型

2.5.1基本介绍

  • 字符串就是一串固定长度的字符连接起来的字符序列。
  • Go的字符串是由单个字节连接起来的。
  • Go语言的字符串的字节使用utf-8编码表示Unicode文本

2.5.2使用细节

(1)在Go中,字符串一旦赋值了,就不能改变了

(2)字符串的两种表示形式:

  • 双引号( " " ),会识别转义字符
  • 反引号( ` ` ),以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击,输出源代码等效果

(3)在Go中字符串可以拼接,拼接方式为用加号(+),如 :

	var str string="hello"+" csdn"
	fmt.Printf("%s",str)//输出hello csdn

(4)当字符串太长时,可以将其分成多行,但+号需留在上一行,即+号不能在一行的开头

	var str string="hfeebnehr"+
	"hegvbfiwegifvwebgvwioebgvw"+
	"oegvwoegnwbeopvnwgpegvonwpegovnw"
	fmt.Printf("%s",str)

 2.6基本数据类型的默认值

类型默认值
整型0
浮点型0
字符串""
布尔类型false

2.7基本数据类型之间的相互转换 

2.7.1基本语法

T(v):将v转换为T类型,v为需要转换的变量,T为v转换后的的类型

例如:

	var a int=10
	var b float64=float64(a)

	fmt.Printf("b的类型为%T,值为%f",b,b)

2.7.2使用细节

(1)在Go中,数据类型的转换可以从范围小转范围大,也可以从范围大转范围小。

(2)被转换的是变量存储的数据(即值),变量本身数据类型不变

(3)在转换中,从int64转换成int8编译不会报错,不过结果会按溢出处理


	var a int32=10
	var b int8
	var c int8

	b=int8(a)+127//编译通过,结果按溢出处理
	c=int8(a)+128//编译报错,栈溢出
	fmt.Printf("b的类型为%T,值为%d",b,b)

2.8基本数据类型和string间的转换

2.8.1基本数据类型转string

(1)使用Sprintf函数

用法:Sprintf("%参数",表达式)

说明:Sprintf根据参数生成格式化的字符串并返回该字符串

	var n=432
	var m=3.14
	var str string=fmt.Sprintf("%d",n)
	var str2 string=fmt.Sprintf("%f",m)

	fmt.Printf("str的类型为%T,值为%s\n",str,str)
	fmt.Printf("str2的类型为%T,值为%s",str2,str2)

 (2)使用strconv包中的函数

 

var n int=444
	/*
	func FormatInt(i int64, base int) string   
	i必须为int64型,所以当不是int64型时,需类型转换
	base 表示进制,范围为2~32
	*/
	var str string=strconv.FormatInt(int64(n),10)
	fmt.Printf("str的数据类型为%T,值为%s",str,str)

	/*
	func FormatFloat(f float64, fmt byte, prec, bitSize int) string
	fmt表示格式
	prec表示精度,若fmt=='f',则prec表示数点后的位数
	*/
	var f float64=520.1314
	var str2 string=strconv.FormatFloat(f,'f',4,64)
	fmt.Printf("str2的数据类型为%T,值为%s",str2,str2)

 2.8.2 string类型转基本数据类型

方法:使用strconv包中的函数

    var str1 string="4315"
	var str2 string="3.14159"

	var n1 int64
	n1, _=strconv.ParseInt(str1,10,64)
	fmt.Printf("n1的数据类型为%T,值为%d\n",n1,n1)

	var n2 float64
	n2,_=strconv.ParseFloat(str2,64)
	fmt.Printf("n2的数据类型为%T,值为%f",n2,n2)

注:在string类型转向基本数据类型时,要确保string类型能够转成有效的数据。

三、标识符

3.1基本介绍

  • Go对变量,函数等命名时使用的字符序列称为标识符
  • 凡是自己可以取名字的都叫标识符

3.2标识符命名规则

(1)由26个英文字母(包括大小写),0~9,_下划线组成。

(2)标识符命名不可用数字开头

(3)标识符不能有空格,标识符严格区分字母大小写

(4)不能用系统关键字命名,如 :if for

(5)在Go中下划线_是一种特殊的标识符,称为空标识符,可以代表其他任意标识符,但示它的值会被忽略,所以仅能用其作为占位符,不能作为标识符使用

3.3标识符命名注意事项

(1)包名:保持package的名字和目录一致,尽量用简短有意义的包名,但不能和系统包名冲突

(2)变量名、常量名、函数名:采用驼峰法命名规则

(3)在Go中,变量名、常量名、函数名首字母大写能被其他包访问(即public),小写则不能被访问(即private),Golang没有public和private修饰符。

结语

感谢您的耐心阅读,希望这篇博客能够为您带来新的视角和启发。如果您觉得内容有价值,不妨动动手指,给个赞👍,让更多的朋友看到。同时,点击关注🔔,不错过我们的每一次精彩分享。若想随时回顾这些知识点,别忘了收藏⭐,让知识触手可及。您的支持是我们前进的动力,期待与您在下一次分享中相遇!

路漫漫其修远兮,吾将上下而求索。

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

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

相关文章

linux系统CentOS 7版本搭建NFS共享存储

一、什么是NFS共享存储方式 NFS共享存储方式 是一种分布式文件系统协议,允许客户端通过网络访问远程服务器上的文件,就像访问本地文件一样。 二、 NFS的基本概念 (1)服务器端:提供共享存储的机器,负责导…

Matlab 基于SVPWM的VF三电平逆变器异步电机速度控制

1、内容简介 略 Matlab 167-基于SVPWM的VF三电平逆变器异步电机速度控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

(一)微服务初见之 Spring Cloud 介绍

微服务架构简介 从单体应用架构发展到SOA架构,再到微服务架构,应用架构经历了多年的不断演进。微服务架构不是凭空产生的,而是技术发展的必然结果,分布式云平台的应用环境使得微服务代替单体应用成为互联网大型系统的架构选择。目…

架构思维:软件建模与架构设计的关键要点

文章目录 1. 软件建模的核心概念2. 七种常用UML图及其应用场景类图时序图组件图部署图用例图状态图活动图 3. 软件设计文档的三阶段结构4. 架构设计的关键实践1. 用例图:核心功能模块2. 部署图:架构演进阶段3. 技术挑战与解决方案4. 关键架构图示例5. 架…

【RNN神经网络】序列模型与RNN神经网络

前言 清库存。正式切入大模型后,打算把基础知识都梳理一遍,然后写了两篇就发现写不动了,后面就捡重要的记录。RNN知识仅此一篇记录,扫盲记录。 【自然语言处理】 (Natural Language Processing,NLP&#xf…

Python文件管理

目录 一、文本文件读写 1、相关函数 2、读写文件 3、使用readline读取一行 4、读写文件的异常处理 5、添加内容 二、文本文件的编码 1、常见的编码 2、Python程序的编码 3、指定编码 三、文件的路径 1、相对路径 2、绝对路径 3、路径的改变 四、文件夹操作 五、…

vue3 前端路由权限控制与字典数据缓存实践(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 从实战中出发: 1. 基本知识 Vue3 和 Java 通信时如何进行字典数据管理 需要了解字典数据的结构。通常&#x…

基于javaweb的SpringBoot精美物流管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

DeepSeek进阶应用(二):结合Kimi制作PPT(双AI协作教程)

🌟引言: DeepSeek作为国产AI大模型,以强大的逻辑推理和结构化内容生成能力著称,擅长根据用户需求生成PPT大纲或Markdown文本;Kimi的PPT助手则能解析结构化内容并套用模板快速生成美观的PPT,两者结合实现“内…

SpringBoot——Maven篇

Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它具有许多特性,其中一些重要的特性包括: 1. 自动配置:Spring Boot 提供了自动配置的机制,可以根据应用程序的依赖和环境自动配置应用程序的各种组件&#xff…

卷积神经网络(知识点)

一、为了使特征图变小: 由两种方法:1.增大步长:卷积的时候不是一次一步,而是一次多步,类似一张图片,在原来的像素基础上,每隔一个取一个像素点。 其中S就是步长 注意:扩大步长不经…

Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试(代码实现)

Vision Transformer (ViT):将Transformer带入计算机视觉的革命性尝试 作为一名深度学习研究者,如果你对自然语言处理(NLP)领域的Transformer架构了如指掌,那么你一定不会对它在序列建模中的强大能力感到陌生。然而&am…

特殊 IP 地址

文章目录 特殊IP地址概述受限广播地址(Limited Broadcast Address)直接广播地址(Directed Broadcast Address)多播地址(Multicast Address)环回地址(Loopback Address)本网络本主机&…

数学——A. K-divisible Sum + D. Exam in MAC

A. K-divisible Sum 题目: 思路: 以下 “[xxx]” 符号均代表向上取整 我们假设总和是sum,那么就有sum k * cnt 要想最大值最小,肯定是要让sum尽可能小,这样每个元素都能变小 最小情况是 sum 恰好等于 n 时&#…

【DeepSeek应用】本地部署deepseek模型后,如何在vscode中调用该模型进行代码撰写,检视和优化?

若已成功在本地部署了 DeepSeek 模型(例如通过 vscode-llm、ollama 或私有 API 服务),在 VS Code 中调用本地模型进行代码撰写、检视和优化的完整流程如下: 1. 准备工作:确认本地模型服务状态 模型服务类型: 若使用 HTTP API 服务(如 FastAPI/Flask 封装),假设服务地址…

网络编程、URI和URL的区别、TCP/IP协议、IP和端口、URLConnection

DAY12.1 Java核心基础 网络编程 在互联网时代,网络在生活中处处可见,javaWeb占据了很大一部分 那如何实现javaWeb编程呢? Web编程就是运行在同一个网络下面的终端,使得它们之间可以进行数据传输 计算机网络基本知识 计算机网络…

自探索大语言模型微调(一)

一、数据 1.1、失败案例 Hugging Face: 根据B站上搜索到的资料,datasets这个库可以直接下载丰富的数据集合和与训练模型,调用也非常的简单,唯一的缺点就是,需要外网(翻墙),用国内的…

Unity 和 Python 的连接(通过SocketIO)附源码

在游戏或者项目开发中,Unity 通常用于创建前端,而 Python 则因其强大的数据处理能力常被用作后端。通过 Socket.IO,我们可以轻松地实现 Unity 和 Python 的实时通信。本文将介绍如何通过 Socket.IO 连接 Unity 和 Python,并附上完…

89.HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可靠的应用 文章目录 HarmonyOS NEXT 应用安全与隐私保护指南:构建安全可…

spring boot 发送邮件验证码

一、前置需求 1、准备邮箱 2、登录授权码 qq邮箱在–>设置–>账号POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 开启服务 二、发送邮件 1、简单邮件 包含邮件标题、邮件正文 2、引入mail启动器 <dependency><groupId>org.springframework.boot</groupI…