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

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

🔥 个人主页:星云爱编程

🔥 所属专栏: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班",19fmt.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=5e=7f="big"
)func main(){name ,class,age:="jack","软工1班",19fmt.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=100fmt.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=10var b float64=float64(a)fmt.Printf("b的类型为%T,值为%f",b,b)

2.7.2使用细节

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

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

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

var a int32=10var b int8var c int8b=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=432var m=3.14var 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) stringfmt表示格式prec表示精度,若fmt=='f',则prec表示数点后的位数*/var f float64=520.1314var 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 int64n1, _=strconv.ParseInt(str1,10,64)fmt.Printf("n1的数据类型为%T,值为%d\n",n1,n1)var n2 float64n2,_=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.rhkb.cn/news/32177.html

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

相关文章

go个人论坛项目

搭建个人论坛 项目地址:MyForum: goginvue搭建论坛 - Gitee.com PS:有些地方没有写好,请选择性查看 初始化项目 创建目录结构 利用ini配置初始化框架 [server] AppMode debug HttpPort :3000 JwtKey "dhjasdkajh321"[databa…

日志系统项目——准备工作了解类的设计模式如单例模式、工厂模式、代理模式

1.六大原则 1.1 单一职责原则 类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或 类。 使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀个类中应该是⼀组相关性很⾼的函 数、数据的封装 ⽤例…

股指期货基差怎么计算?公式介绍

先说说啥是基差。简单来说,基差就是股指期货价格和现货指数价格之间的差值。就好比你手里有一张股票指数的“未来提货券”(股指期货),但你现在就能买到股票指数(现货指数),这两者之间的价格差&a…

Comfyui 与 SDwebui

ComfyUI和SD WebUI是基于Stable Diffusion模型的两种不同用户界面工具,它们在功能、用户体验和适用场景上各有优劣。 1. 功能与灵活性 ComfyUI:ComfyUI以其节点式工作流设计为核心,强调用户自定义和灵活性。用户可以通过连接不同的模块&…

深圳传音控股手机软件开发岗内推

1.负责手机UI、功能开发 2.负责手机具体模块(通信、多媒体、系统、应用)独立开发 3.负责手机软件调试、log分析等 推荐码:EVHPB3 ,简历第一时间送到HR面前~

never_give_up

一个很有意思的题: never_give_up - Bugku CTF平台 注意到注释里面有1p.html,我们直接在源代码界面看,这样就不会跳转到它那个链接的: 然后解码可得: ";if(!$_GET[id]) {header(Location: hello.php?id1);exi…

Aliyun CTF 2025 web 复现

文章目录 ezoj打卡OKoffens1veFakejump server ezoj 进来一看是算法题,先做了试试看,gpt写了一个高效代码通过了 通过后没看见啥,根据页面底部提示去/source看到源代码,没啥思路,直接看wp吧,跟算法题没啥关系,关键是去…

BigFoot EventAlertMod lua

BigFoot EventAlertMod lua脚本插件,追踪当前目标的DOT,自身的HOT,持续时间监控 D:\Battle.net\World of Warcraft\_classic_\Interface\AddOns\EventAlertMod 想知道技能的ID,执行命令如下:本例子为“神圣牺牲” /e…

ICLR 2025|DAMO开发者矩阵合作专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! AITIME 01 ICLR 2025预讲会合作专场 AITIME 02 专场信息 01 Dynamic Diffusion Transformer 讲者:赵望博,达摩院研究型实习生 时间:3月12日 19:00-19:15 报告简介&#xff1a…

解决jsch远程sftp连接报错:Exception:Algorithm negotiation fail

问题背景 今天遇见了使用JSch连接服务器时,报错Exception:Algorithm negotiation fail的问题!研究了半天哇!终于解决啦!把解决方案在这里给大家共享一下子! 问题原因 问题原因在于,JSch所支持的加密算法…

【C++】C++11新特性

目录 列表初始化 左值与右值 左值引用和右值引用 移动构造和移动赋值 类型推导 lambda 捕捉列表 函数对象及绑定 bind函数 包装器 Args参数包 抛异常 列表初始化 在C11中一切皆可用列表初始化。 用法:直接在变量名后面加上初始化列表进行初始化 cl…

FreeBSD下安装npm Node.js的22版本 并简单测试js服务器

FreeBSD下安装Node.js 在FreeBSD下安装Node.js很方便,直接pkg安装即可。 使用pkg install安装npm sudo pkg install npm-node22 Updating FreeBSD repository catalogue... Fetching data.pkg: 100% 7 MiB 2.5MB/s 00:03 Processing entries: 100% FreeB…

云原生可观测性体系:数字世界的神经感知网络

引言:从监控到全景式观测的范式升级 Datadog每日处理百万亿指标,Elastic APM实现万级服务拓扑动态发现。Grafana Loki日志分析延迟降至200ms内,Prometheus单集群支持千万时序存储。Uber通过全链路追踪压缩故障定位时间至秒级,Net…

基于VMware的Ubuntu22.04系统安装和配置以及解决Ubuntu共享文件夹无法实现的问题

一、前期准备 本次安装的虚拟机软件是 VMware Workstation Pro 17 登录跳转到 所有产品 进行下载 ​​​跳转到下载页面​​​ 选择 Windows 产品进行安装 勾选协议同意下载 离线版提供:大家根据自己电脑版本配置进行选择下载 本篇使用的虚拟机版本为 VMware Wor…

线程同步与互斥

目录 资源共享问题 (一)临界资源与临界区 (二)多线程并发访问问题 (三)锁 互斥锁原理 加锁原理 解锁原理 互斥锁相关操作接口 互斥锁封装 死锁 死锁产生的四个必要条件 解决死锁方法 &#xff…

SpringMVC 基本概念与代码示例

1. SpringMVC 简介 SpringMVC 是 Spring 框架中的一个 Web 层框架,基于 MVC(Model-View-Controller) 设计模式,提供了清晰的分层结构,适用于 Web 应用开发 SpringMVC 主要组件 DispatcherServlet(前端控…

Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测

第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器 OpenWRT项目今年已经20岁了,为了纪念这一时刻,Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi,…

打造智能钉钉机器人:借助智谱GLM-4-Flash实现高效智能回复(文末附源码)

文章目录 前言一、准备工作(一)钉钉机器人(二)智谱 GLM-4-Flash(三)内网穿透工具 cpolar(四)需要准备的工具和环境 二、钉钉机器人的创建与配置步骤1:创建钉钉机器人步骤…

react基础语法视图层类组件

react基础语法视图层&类组件 MVVM *区别mvc&mvvm 两者的区别: 数据模型去渲染视图。数据层改了,vue自己会监听到帮我们拿最新的数据去渲染视图;构建数据构建视图,数据驱动的思想。这一套是非常相似的。 视图中的内容改变&…

数据结构--【顺序表与链表】笔记

顺序表 template <class T> class arrList :public List<T> //表示 arrList 类以公有继承的方式继承自 List<T> 类 //公有继承意味着 List<T> 类的公共成员在 arrList 类中仍然是公共成员&#xff0c;受保护成员在 arrList 类中仍然是受保护成员。 { …