【Go】Go语言中的基本数据类型与类型转换

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,Golang开发,PyQt5和Tkinter桌面开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生K8S,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:Go语言开发零基础到高阶实战
景天的主页:景天科技苑

在这里插入图片描述

文章目录

  • go数据类型
    • 布尔数据类型
    • 整形 int
    • 浮点型
      • 验证:浮点数计算时不精确的
    • 特殊的数字类型
    • 字符串类型
    • 转义字符
  • go数据类型转换

go数据类型

Go语言是一种静态类型、编译型语言,它提供了丰富的数据类型用于处理各种数据。
在Go中,数据类型主要分为两大类:基本数据类型和派生数据类型。值类型包括整型、浮点型、布尔型、字符串等,而派生数据类型则包括指针、数组、结构体、函数、切片、映射、通道和接口等。本文将通过实际案例详细讲解Go语言中的基本数据类型及其用法。
在这里插入图片描述

布尔数据类型

布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
bool的默认值是false

package mainimport "fmt"func main() {// bool类型,只有两个值 true 和 false。  对和错// 定义变量  bool 布尔类型的定义 与 int、string 都是Go语言中基本数据类型。var b1 boolvar b2 boolb1 = trueb2 = false// f 格式化输出  %d 整数  %s 字符串 %p内存地址  %T 类型 %t bool值fmt.Printf("b1=%T,%t\n", b1, b1)fmt.Printf("b2=%T,%t\n", b2, b2)// 比大小var a int = 1var b int = 2// 如果  xxx  否则 xxx// 结果就是bool类型fmt.Println(a > b)if a > b {fmt.Println("a是大于b的")// .....} else {fmt.Println("a是小于b的")}// bool 类型的默认值 false, 规定  false  0   true = 1var b3 boolfmt.Println("bool默认值:", b3)}

在这里插入图片描述

整形 int

整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。

Go 也有基于架构的类型,例如:uint 无符号、int 有符号

每个数字,都是有范围的, 有的数字只能大于0

有的数字可以小于0

在计算机中,所有的东西最终都是存在内存当中的,所以我们不能无限的放置东西(数字)
在这里插入图片描述
在这里插入图片描述

定义整形变量,超过范围会报错,定义的时候不报错,运行的时候报错

package mainimport "fmt"func main() {// 定义的时候超过限制是不会报错的,但是在运行时发生了错误 expected 'package', found 'EOF'// 计算只能存放固定大小的值。// 我们在定义这个类型的时候,系统给了我们一个空间var a int = 666666666666666666666663333333333fmt.Println(a)}

在这里插入图片描述

package mainimport "fmt"func main() {// 定义的时候超过限制是不会报错的,但是在运行时发生了报错// 计算只能存放固定大小的值。// 我们在定义这个类型的时候,系统给了我们一个空间//var a int64 = 666666666666666666666663333333333//fmt.Println(a)var i1 int8 //  (-128 到 127)i1 = -100fmt.Println(i1)//i1 = 1000//fmt.Println(i1)// 由于系统现在空间都很大,默认都使用 int64  int。// 二进制的8位  00000000// 二进一 01// 00000000// 0   0// 1   1// 2   10// 3   11// 4  100// 0~255// 00000000 - 11111111// int16  0000000000000000 - 1111111111111111// int32  00000000000000000000000000000000 - 11111111111111111111111111111111// int64// >0 无符号数+  有符号数 + -// 定义这个变量的时候,空间大小已经被这个数据类型确定了。var i2 uint8 // 0 ~ 255i2 = 255fmt.Println(i2)}

在这里插入图片描述

浮点型

浮点型用于表示有小数部分的数。Go语言提供了float32和float64两种浮点型,分别占用32位和64位存储空间。
默认情况下,Go语言中的浮点字面量被当作float64类型。

浮点数 float :float32 float64 ,也是一个空间的大小。

package mainimport "fmt"// 浮点数 float ,默认是 float64 ,32
func main() {// 浮点数是不精确的,计算机底层导致的 0 1、浮点数、复数,没办法做到精确计算var f1 float64f1 = 3.16var f2 float32f2 = 5fmt.Println(f1)// // 默认的 float 类型,都是保留了6位小数// 浮点数的格式化输出 %f ,都是保留了6位小数,保留2位或者3位怎么实现// .3 保留3位小数 其余类推// 如果小于了当前保留的位数,四舍五入fmt.Printf("%T,%.1f\n", f1, f1)fmt.Printf("%T,%f", f2, f2)}

在这里插入图片描述

验证:浮点数计算时不精确的

package mainimport "fmt"func main() {// 浮点数 ; 符号位  + 指数位 + 尾数位(存储过程中,可能会丢失,造成精度损失)。// float64 的空间 > float32var num1 float32 = -123.0000901var num2 float64 = -123.0000901fmt.Println(num1)fmt.Println(num2)// 结论:// 1、使用float来计算,可能导致数据不精确。// 2、float64的精度>float32, go语言中,浮点数默认使用的是float64
}

在这里插入图片描述

特殊的数字类型

byte 就是uint8
rune 就是int32

package mainimport "fmt"// byte
func main() {// 别名uint8是byte,十分常用// byte = uint8 (0-255之间的整数,我们通常使用byte来定义) uint8var num1 byte = 255fmt.Println(num1)fmt.Printf("%T\n", num1)// 不经常用 rune int32var num2 rune = 1000000000fmt.Println(num2)fmt.Printf("%T\n", num2)// int、系统大小来的,32位  32、64默认是64// 软件跑在32位系统上是不兼容的var num3 int = 100000fmt.Println(num3)fmt.Printf("%T\n", num3)
}

在这里插入图片描述

64位的操作系统是可以兼容32位的、32为不能跑64位的软件。 寻址空间。

字符串类型

字符串就是一串固定长度的字符连接起来的字符序列。 一段中文或者英文 (编码- 字符)

Go语言中,所有的字符串都是由单个 字符 连接起来的。兼容全世界文字的,Go语言默认用的是utf-8编码
UTF-8编码 , 目前兼容我们绝大部分的文字和符号。

GBK编码:中国的编码表,号称兼容所有的中文汉字。

Unicode编码表 :号称兼容了全世界的文字。

编码 中 本质是一个数字

Go语言中,所有的字符串都是由单个 字符 连接起来的
Go语言中,单引号是字符、双引号才是 string 类型
字符本质是整型

package mainimport "fmt"func main() {var str stringstr = "Hello,World"fmt.Printf("%T,%s\n", str, str)// H E L L O , W O R L D// Go语言中,所有的字符串都是由单个 字符 连接起来的。// 单引号是字符、双引号才是 string 类型// 字符本质是整型v1 := 'A'v2 := "A"fmt.Printf("%T,%d\n", v1, v1)fmt.Printf("%T,%s\n", v2, v2)v3 := '景'fmt.Printf("%T,%d\n", v3, v3)
}

在这里插入图片描述

转义字符

常见的转义字符
在这里插入图片描述

package mainimport "fmt"func main() {// 特殊的字符 转义字符 \n// \n 换行fmt.Println("hello\nworld")// \b   backspace  删除上一个字符fmt.Println("hello\bworld")// \t  Tabfmt.Println("hello\tworld")
}

在这里插入图片描述

多行输入使用 ``
在这里插入图片描述

多行文本

package mainimport "fmt"func main() {// 特殊的字符 转义字符 \n// \n 换行fmt.Println("hello\nworld")// \b   backspace  删除上一个字符fmt.Println("hello\bworld")// \t  Tabfmt.Println("hello\tworld")// 转义,就是可以将特殊转义符号或者一些符号打印出来 \// ` ` 可以通过它来定义一些长字符串,可以换行输入fmt.Println(`\\nsadadasdasdasdasdasda`)
}

在这里插入图片描述

go数据类型转换

在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值

由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明: A = A(B)
布尔类型不支持类型转换

package mainimport "fmt"// 类型转换
func main() {// 数据类型转换在Go中就一个格式// 新类型的值 = 新类型(旧类型的值)// 高位向低位转 (int64  int32  int16)// 浮点数转整数,截断,只保留整数部分a := 5.9    // floatb := int(a) // b 就是int类型的a = 5fmt.Printf("%T,%.1f\n", a, a)fmt.Printf("%T,%d\n", b, b)c := 1d := float64(c)fmt.Printf("%T,%d\n", c, c)fmt.Printf("%T,%f\n", d, d)// 布尔类型转换,布尔类型 是不支持类型转换的。//var flag bool = true//f := int(flag)}

在这里插入图片描述


http://www.ppmy.cn/devtools/113076.html

相关文章

GO 闭包

文章目录 1. **累加器(状态保持器)**2. **缓存(记忆化)**3. **工厂函数**4. **函数式编程风格**5. **创建动态行为的函数**6. **控制访问权限** 总结 高级闭包的使用在 Go 中非常灵活和强大,特别是在需要保存状态或对外…

【系统架构设计师-2020年真题】案例分析-答案及详解

更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【材料1】问题1问题2【材料2】问题1问题2问题3【材料3】问题1问题2问题3【材料4】问题1问题2问题3【材料5】问题1问题2问题3【材料1】 阅读以下关于软件架构设计与评估的叙述,在答题纸上回答问题1和问题2。 【说明】…

Linux cut命令详解使用:掌握高效文本切割

cut 是 Linux 中一个用于从文本文件或标准输入中提取指定字段的命令。它根据分隔符或者字符位置来裁剪文本,是处理文本文件中的字段、列和子字符串的常用工具。 基本语法 cut [选项] 文件或 命令 | cut [选项]常用选项 -b:按字节位置切割&#xff08…

Java | Leetcode Java题解之第403题青蛙过河

题目&#xff1a; 题解&#xff1a; class Solution {public boolean canCross(int[] stones) {int n stones.length;boolean[][] dp new boolean[n][n];dp[0][0] true;for (int i 1; i < n; i) {if (stones[i] - stones[i - 1] > i) {return false;}}for (int i 1…

python绘制3d建筑

import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据 def generate_building_blocks(num_blocks, grid_size100, height_range(5, 50), base_size_range(10, 30)):buildings []for _ in range(…

esp32-C2 对接火山引擎实现智能语音(一)

目录 一、火山引擎大模型简介 1)火山引擎网址: 2)首先需要先注册火山引擎账号 3)语音识别——即语音转为文本 一句话识别 流式语音识别 录音文件识别标准版 录音文件识别极速版 4)语音合成——文本转音频 一、火山引擎大模型简介 火山引擎的智能语音技术,基于业界先…

《ChatGPT:强大的人工智能聊天机器人》

一、引言 在当今科技飞速发展的时代&#xff0c;人工智能已经成为了各个领域的热门话题。其中&#xff0c;聊天机器人作为人工智能的一个重要应用&#xff0c;正在逐渐改变人们的生活和工作方式。ChatGPT 作为一款强大的人工智能聊天机器人&#xff0c;以其出色的语言理解和生成…

纯血鸿蒙NEXT常用的几个官方网站

一、官方文档 https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/Readme-CN.md刚入门查看最多的就是UI开发模块&#xff0c;首先要熟悉组件使用 二、官方API参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/development-i…

windows下自启springboot项目(jar+nginx)

1、将springboot项目打包为jar 2、新建文本文档 test.txt&#xff0c;并输入 java -jar D:\test\test.jar&#xff08;修改为自己的jar包位置&#xff09; 保存 然后修将后缀名改为 .bat 3、在同一目录再新建 文本文档test.txt&#xff0c;输入以下内容&#xff0c;&…

支持iPhone 16新品预售,饿了么同步上线专人配送等特色服务

9月10日凌晨&#xff0c;2024年 Apple 秋季新品发布会上正式揭晓iPhone 16新机。9月10日一早&#xff0c;饿了么同步宣布&#xff1a;今年将携手近4000家Apple 授权专营店&#xff0c;支持iPhone 16新品预售及现货的同步开售。新机现货首发当日&#xff0c;饿了么消费者最快半小…

Redis主要问题(缓存问题)

Redis Redis主要面向缓存、分布式锁、消息队列等问题。 而在缓存中常存在穿透、击穿、雪崩、双写一致、持久化、数据过期、数据淘汰等问题。 1.缓存穿透 通过get请求查询redis&#xff0c;redis响应查数据库&#xff0c;正常情况下&#xff0c;若查询到数据&#xff0c;则正…

anaconda安装manim

anaconda安装manim &#xff08;安装时间2024年9月15日&#xff0c;后续版本变化再做更新&#xff09; 创建环境test 等一下我们创建一个manim项目作为试水 切换到test环境 {:height 430, :width 780} 输入以下代码 # using conda or mamba conda create -n my-manim-envi…

【C++11 —— 线程库】

C11 —— 线程库 thread类介绍线程函数参数原子性操作库(atomic)lock_guard与unique_lockmutex的种类lock_guardunique_lock 两个线程交替打印奇偶数 thread类介绍 在C11之前&#xff0c;涉及到多线程的问题&#xff0c;都是和平台相关的&#xff0c;比如windows和Linux下各有…

利用LlamaIndex构建ARG本地知识库

文章目录 1. 环境准备2. 启用诊断日志3. 配置本地模型4. 配置本地向量模型5. LlamaIndex全局配置6. 创建 PGVectorStore7. 从数据库加载数据8. 文本分割器: SpacyTextSplitter9. 配置管道10. 创建向量存储索引11 .指定响应模式&#xff0c;以及启用流式响应 在现代的人工智能应…

【电脑组装】✈️从配置拼装到安装系统组装自己的台式电脑

目录 &#x1f378;前言 &#x1f37b;一、台式电脑基本组成 &#x1f37a;二、组装 &#x1f379;三、安装系统 &#x1f44b;四、系统设置 &#x1f440;五、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;上篇文章分享了在平时开发的时候遇到的一种项目整合情况&…

通信工程学习:什么是HFC混合光纤同轴电缆

HFC&#xff1a;混合光纤同轴电缆 HFC&#xff08;Hybrid Fiber Coaxial&#xff09;混合光纤同轴电缆是一种结合了光纤与同轴电缆的宽带接入网技术。以下是对HFC混合光纤同轴电缆的详细解释&#xff1a; 一、HFC混合光纤同轴电缆的定义与概述 定义&#xff1a;HFC是一种结合光…

windows系统docker装milvus向量数据库

首先创建一个文件夹比如milvus,在创建如下文件 docker-compose.yml文件如下: version: 3.5services:etcd:container_name: milvus-etcdimage: quay.io/coreos/etcd:v3.5.5environment:- ETCD_AUTO_COMPACTION_MODErevision- ETCD_AUTO_COMPACTION_RETENTION1000- ETCD_QUOTA_B…

2024.9.11(k8s环境搭建)

一、k8s环境搭建 编号主机名称ip配置1k8s-master192.168.8.1772k8s-node1192.168.8.1783k8s-node2192.168.8.168 1、免密登录 [rootk8s-master ~]# ssh-keygen [rootk8s-master ~]# ssh-copy-id root192.168.8.178 [rootk8s-master ~]# ssh-copy-id root192.168.8.168 2、3台…

解决:Vue3 - defineProps 设置默认值报错问题

目录 1&#xff0c;问题2&#xff0c;分析2.1&#xff0c;按报错提示信息测试2.2&#xff0c;测试 vue-i18n 3&#xff0c;解决 1&#xff0c;问题 使用 defineProps 指定默认值时报错&#xff0c;代码如下&#xff1a; <template><input type"text" :pla…

数据结构(Day13)

一、学习内容 内存空间划分 1、一个进程启动后&#xff0c;计算机会给该进程分配4G的虚拟内存 2、其中0G-3G是用户空间【程序员写代码操作部分】【应用层】 3、3G-4G是内核空间【与底层驱动有关】 4、所有进程共享3G-4G的内核空间&#xff0c;每个进程独立拥有0G-3G的用户空间 …