Go语言基础:基本数据类型

news2024/11/24 12:36:51

一、整型

1. 整型分类

        整型分为以下两个大类:

        (1)按长度分为:int8、int16、int32、int64

        (2)对应的无符号整型:uint8、uint16、uint32、uint64

        其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。

类型描述
uint8无符号8位整型(0 ~ 255)
uint16无符号16位整型(0 ~ 65535)
uint32无符号32位整型(0 ~ 4294967295)
uint64无符号64位整型(0 ~ 18446744073709551615)
int8有符号8位整型(-128 ~ 127)
int16有符号16位整型(-32768 ~ 32767)
int32有符号32位整型(-2147483648 ~ 2147483647 )
int64有符号64位整型(-9223372036854775808 ~ 9223372036854775807)

2. 特殊整型

类型描述
uint在32位操作系统上是uint32,在64位操作系统上是uint64
int在32位操作系统上是int32,在64位操作系统上是int64
uintptr无符号整型,用于存放指针

注意:

        (1)在使用int和uint类型时,不能假定它是32位或64位的整型,而是考虑int和uint可能在不同平台上的差异。

        (2)获取对象的长度的内建len()函数返回的长度可以根据不同平台的字节长度进行变化,实际使用中,切片或 map 的元素数量等都可以用int来表示。

        (3)在涉及到二进制传输、读写文件的结构描述时,为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int和uint。

3. 数字字面量语法

        Go1.13版本之后引入了数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字,例如:a:=0b1011,表示二进制的1011;a:=0o666,表示八进制的666(也可以以0开头,或略o表示八进制);a:=666,表示十进制的666;a:=0x10fba,表示十六进制的10fba。除此之外,还允许我们用 _ 来分隔数字,比如说:a:=123_456表示 v 的值等于 123456。

	var a = 10
	fmt.Printf("%d\n", a)  //十进制输出 10
	b := 0775
	fmt.Printf("%o\n", b)  //八进制 755
	c := 0o775
	fmt.Printf("%o\n", c)  //八进制 755
	d := 0b1011
	fmt.Printf("%b\n", d)  //二进制 1011
	e := 0x10fba
	fmt.Printf("%x\n", e)  //十六进制 10fba
	f := 123_45
	fmt.Println(f)         //十进制 12345

二、浮点型

        (1)Go语言支持两种浮点型float32和float64。

        (2)这两种浮点型数据格式遵循IEEE 754标准: float32的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32。float64的浮点数的最大范围约为1.8e308,可以使用常量定义:math.MaxFloat64。

        打印浮点数时,可以使用fmt包配合动词%f,示例:

import (
	"fmt"
	"math"
)

func main() {
	fmt.Printf("%f\n", math.Pi)    //3.141593
	fmt.Printf("%.2f\n", math.Pi)  //3.14
	fmt.Println(math.MaxFloat32)   //3.4028234663852886e+38
	fmt.Println(math.MaxFloat64)   //1.7976931348623157e+308
}

三、复数

        复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。

	var a complex64 = 3 + 4i
	var b complex128 = -3 - 5i

四、布尔值

        Go语言中以bool类型进行声明布尔型数据,布尔型数据只有true(真)和flase(假)两个值。

注意:

        1.布尔类型变量的默认值是false。

        2.Go语言中不允许将整型强转转换为布尔型。

        3.布尔类型无法参与数值运算,页无法与其他类型进行转换。

五、字符串

1. 字符串简介

        Go语言中的字符串以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引号中的内容,可以在Go语言的源码中直接添加非ASCII码字符,例如:

	s1 := "hello"
	s2 := "你好"

2. 字符串转义符

        Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示:

转义符含义
\r回车符(返回行首)
\n换行符
\t制表符
\'单引号
\"双引号
\\反斜杠

3. 多行字符串

        Go语言中要定义一个多行字符串时,就必须使用反引号字符:

	s1 := `
	zhangsan
	man
	18
	\n \t
	`
	fmt.Println(s1)

注意:

        反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

4. 字符串常用操作 

方法描述
len(str)求字符串长度
+ 或 fmt.Sprintf拼接字符串
strings.Split分割
strings.Contains判断是否包含
strings.HasPrefix,strings.HasSuffix前缀/后缀判断
strings.Index(),strings.LastIndex()子串出现的位置/最后出现的位置
strings.Join(a[]string, sep string)join操作

(1)求长度

	//1.求长度
	s1 := "hello"
	fmt.Println(len(s1)) //5

(2)字符串拼接

	s2 := " world"
	//2.字符串拼接
	fmt.Println(s1 + s2) //hello world
	s3 := fmt.Sprintf("%s + %s", s1, s2)
	fmt.Println(s3)      //hello +  world

(3)字符串分割

	//3.字符串分割
	s4 := "How do you do"
	fmt.Println(strings.Split(s4, " ")) //按空格分割

 

(4)判断是否包含

	//4.判断是否包含
	fmt.Println(strings.Contains(s4, "do")) //包含返回true,否则返回false

(5)前缀/后缀判断

	fmt.Println(strings.HasPrefix(s4, "How")) //判断前缀
	fmt.Println(strings.HasSuffix(s4, "doo")) //判断后缀

(6)子串出现位置

	fmt.Println(strings.Index(s4, "do"))      //第一次出现的位置
	fmt.Println(strings.LastIndex(s4, "do"))  //最后一次出现的位置
	fmt.Println(strings.Index(s4, "doo"))     //没有出现返回-1

(7)字符串插入

	s5 := []string{"how", "do", "you", "do"}
	fmt.Println(strings.Join(s5, "+")) //how+do+you+do

六、字符

        组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。Go 语言的字符有以下两种:

        (1)bite(uint8):代表一个ASCII码字符;

        (2)rune(int32):代表一个UTF-8字符。

        当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

注意:

        (1)因为UTF8编码下一个中文汉字由3~4个字节组成,所以我们不能简单的按照字节去遍历一个包含中文的字符串。

        (2)若要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

七、类型转换

        Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用

强制类型转换的基本语法如下:

T(表达式)
//其中,T表示要转换的类型
//表达式包括变量、算式、函数返回值等.

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

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

相关文章

关于spring mvc 的ViewResolver的问题

今天在一个项目使用springboot的spring mvc的时候遇到了一个问题:在controller中使用返回字符串redirect:/xxxx/xxx进行重定向失败,出现了无法解析redirect:/xxxx/xxx。 找了半天才发现视图解析器ViewResolver中没有添加InternalResourceViewResolver 项…

微服务(总): eureka与nacos的区别及心跳配置修改

目录 简介: 1. nacos与eureka的区别 1.0 功能方面 1.1 连接方式不同 1.2 服务异常后多久剔除 1.2.1 eureka介绍: 1.2.2 nacos介绍: 1.3 操作的方式 1.3.1 nacos 专门的可视化界面(如图) 1.3.2 eureka 比较简约(如图) 1.4 保护机制介绍 1.4.1 CAP原则简介:(取自百…

Redis入门(5)-set

Redis中set的元素具有无序性与不可重复性 1.sadd key member[member] 添加元素,若元素存在返回0若不存在则添加 sadd DB mysql oracle sadd DB mysql sadd DB db22.smembers key 查看set中所有元素 smembers DB3.sismember key member 判断元素在set中是否存…

好书精读】网络是怎样连接的 —— 信号在网线和集线器中传输

( 该图由我使用 AI 绘制 ) 目录 每个包都是独立传输的 防止网线中的信号衰减很重要 “双绞”是为了抑制噪声 集线器将信号发往所有线路 每个包都是独立传输的 从计算机发送出来的网络包会通过集线器 、 路由器等设备被转发 , 最 终到达…

智安网络|弹性网络与网络安全:保卫数字世界的关键联结

随着数字化时代的来临,弹性网络和网络安全成为了信息交流和数据传输的关键基础。弹性网络为用户提供了高度可靠、灵活可扩展和强大的网络基础设施,而网络安全则旨在保护这个网络生态系统不受威胁。 弹性网络的定义与重要性 弹性网络的重要性&#xff1a…

【Leetcode60天带刷】day36——56. 合并区间,738.单调递增的数字

​ 题目: 56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1:…

python基础学习9【MinMaxScale()、StandScale()、DecimalScale、transformer】

标准化数据【离差标准化数据、标准差标准化数据、小数定标标准化数据】 离差标准化数据: 数据的整体分布情况并不会随离差标准化而发生改变,原先取值较大的数据,在做完离差标准化后的值依旧较大; 对原始数据的一种线性变换&…

模拟电路系列分享-运放的关键参数

目录 概要 整体架构流程 技术名词解释 1.输入失调电压 2.输入失调电压对电路的影响 3.数据手册中关于失调电压的描述 技术细节 小结: 概要 提示:这里可以添加技术概要 实际运放与理想运放具有很多差别。理想运放就像一个十全十美的人&#xff0…

C语言王国探险记之数据类型

王国探险记系列 文章目录(1) 目录 1,写程序和数据类型有啥关系? 2.C语言里面都有啥数据类型? 1,数据类型的介绍 2,为什么浮点数描述的是小数 3,区分程序中的数字那些是整型&am…

02_深入浅出vite(二)--vue3全家桶+ts构建后管系统

安装基础包 npm create vitelatest # 这里选择的是VueTypescript的组合 cd vue-admin npm install# 先安装基础包 npm install vue-router4 npm i pinia npm i axios npm install sass --save-dev npm install element-plus --save npm install element-plus/icons-vue npm in…

SQL Server数据库 -- 表的基础查询

文章目录 一、单表查询基本结构二、单表查询结构语法 select聚合函数where模糊查询order bygroup byhaving三、多表查询基本结构四、多表查询结构语法 内连接自连接外连接五、总结 前言 学习了数据库,在以后公司等地方,你可能不会用到创建数据库或者表格…

LeetCode 双周赛 107(2023/06/24)滑动窗口与离散化

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 [BaguTree Pro] 知识星球提问。 往期回顾:LeetCode 单周赛第 348 场 数位 DP 模版学会了吗? T1. 最大字符串配对数目(Easy) 标签&…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目,基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store ,自此主流的几大平台均已提供体验。 项目地址: https://github.co…

Chrome Edge Firefox Safari 如何清除 DNS 缓存

Chrome Edge Firefox Safari 如何清除 DNS 缓存 如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari) Chrome Chromium Edge Firefox Safari clear DNS Cache, flush DNS cache 请访问原文链接:https://sysin.org/blog/clear-browser-dns-cache/,查…

前端Vue仿京东天猫商品属性选择器自定义单选按钮

前端Vue仿京东天猫商品属性选择器自定义单选按钮&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13176 效果图如下&#xff1a; # cc-radioBtnBox #### 使用方法 使用方法 <!-- attrArr&#xff1a;属性数据 clic…

改进YOLOv5/YOLOv8:复现结合即插即用 | 高效多尺度注意力(EMA),模块成为YOLOv5改进的小帮手

高效多尺度注意力(EMA) 论文介绍简介EMA模块图像分类实验目标检测实验yolov5加入方法yolo注册yaml文件3563.pdf](https://arxiv.org/ftp/arxiv/papers/2305/2305.13563.pdf) 论文介绍 通道或空间的显著有效性 注意机制对产生更多可辨识的 特征表示的显著效果,在各种计算机视…

深度学习-数据增强与扩充

数据增强可以说是数据驱动下的深度学习必经之路,掌握数据,相当于掌握当下主流方向的自动驾驶的命脉,是人工智能不可或缺的资源。本文将介绍最新的利用大模型扩充数据的方式! 先看下变色效果: 左褐色背景图 为原图,右侧为处理后的图! ​ AI day也在自动标注数据方面,着重…

软件测试技术-期末理论知识复习速成

第一章 软件测试概述 什么是软件缺陷&#xff0c;发生软件缺陷的原因是什么&#xff1f; 答&#xff1a;软件缺陷指的是在软件开发过程中出现的错误、缺陷或故障&#xff0c;导致软件无法按照预期的功能运行或者产生错误的结果。 导致软件缺陷的原因可能有&#xff1a;&#…

AI提高软件外包开发效率

最近几年AI技术取得了很大的进步&#xff0c;在一些领域甚至有突破性的进展&#xff0c;虽然无法预测未来AI会如何影响到人们的生活&#xff0c;但可以确定的是AI会在方方面面影响到大家的生活方式&#xff0c;也许未来五年内就会有一个明显的变化。今天和大家分享AI如何提高软…

IPv6地址配置与验证实验

IPv6地址配置与验证实验 【实验目的】 启动IPv6功能。配置IPv6地址。验证配置。 【实验拓扑】 实验拓扑如下图所示。 实验拓扑 设备参数如表所示。 设备参数表 设备 接口 IPv6地址 子网掩码位数 默认网关 R1 S0/1/0 2000:f106:f208:12::1 64 N/A R2 S0/1/0 2…