go 语言程序设计第3章--基础数据类型

go 语言程序设计第3章–基础数据类型

Go 的数据类型分四大类:基础类型(basic type)、聚和类型(aggregate type)、引用类型(reference type)和接口类型(interface type).

基本类型包括数字,字符串和布尔型。

2.1 整形

整数类型:int8, int16, int32, int64 和 uint8, uint16, uint32, uint64。

取模运算符 % 的行为因编程语言而异。就 Go 而言,取模余数的正负号总是和被除数一致。

x := int64(0xdeadbeef)
fmt.Printf("%d %[1]x %#[1]x %#[1]X\n", x)

%后的副词[1]告知 Printf 重复使用第一个操作数。#告知输出相应的前缀 0, 0x 或 0X。

%q 输出带有单引号的文字符号。

3.2 浮点数

%e(指数)输出,%f(无指数)输出,都可以控制宽度和精度 %8.3f.

Nan 的比较总是不成立(除了 !=, 它总是和 == 相反)

nan := math.NaN()
fmt.Println(nan == nan, nan < nan, nan > nan) // false, false, false

一个函数的返回值是浮点型且有可能出错,最好单独报错。

func compute() (value float64, ok bool) {if failed {return 0, false}return result, true
}

3.3 复数

complex64 和 complex128,二者分别由 float32 和 float64 构成。而内置的 real和 imag 函数分别提取复数的实部和虚部。

3.4 布尔值

bool 只有两种可能:true 和 false.
bool 运算可能短路。

3.5 字符串

字符串是不可变的字节序列,它可以包含任意数据,包括0值字节。

不可改变意味着两个字符串能安全的公用一段底层内存,使得复制任何长度字符串的开销都低。

3.5.1 字符串字面量

原生的字符串字面量的书写形式是,使用反引号而不是双引号。原生的字符串字面量内,转义序列不起作用;实质内容和字面写法严格一致,包括反斜杠和换行符。因此,在程序源码中,原生的字符串字面量可以展开多行。唯一的特除处理时回车符会被删除(换行符会保留)。

const GoUsage = `Go is a tool for
Usage: go command [arguments]
...`

3.5.2 Unicode

Unicode 囊括了世界上所有文书体系的全部字符。在go 的术语中,这些字符记号成为文字符号(rune)。rune 类型作为 int32 类型的别名。

3.5.3 UTF-8

当 []rune 转换作用于 UTF-8 编码的字符串时,返回该字符串的 Unicode 码点序列:
s := “ABC”
r := []rune(s)

3.5.4 字符串了字节 slice

4个标准包对字符串操作特别重要: bytes, strings, strconv 和 unicode。

strings 包提供了许多函数,用于搜索、替换、比较、修整、切分与连接字符串。
bytes 包也有类似的函数,用于操作字节 slice([]byte 类型)。
由于字符串不可变,因此按增量方式构建字符串会导致多次内存分配和复制。使用 bytes.Buffer 类型会更高效。

strconv 用于转换布尔值、整数、浮点数为与之对应的字符串形式,或反之。

unicode 包有判别文字符号值特征的函数,如 IsDigit、IsLetter、IsUpper 和 IsLower。

字节 slice 的元素允许随意修改。

3.5.5 字符串和数字的相互转换

要将整数转换成字符串,一种选择是使用 fmt.Sprintf, 另一种做法是用函数 strconv.Itoa(“Integer to ASCII”)

x := 123
y := fmt.Sprintf("%d", x)
fmt.Println(y, strconv.Itoa(x))

FormatInt 和 FormatUint 可以按不同进位二进制格式化数字。

strconv.FormatInt(123, 2) // 二进制。

strconv.Atoi(“123”) // 把字符串转为 int
y, err := strconv.ParseInt(“123”, 10, 64) // 10进制,最长为64位。

3.6 常量

若同时声明一组常量,除了第一项之外,其他项在等号右侧的表达式都可以省略,这意味着会复用前面一项的表达式及其类型。
const (
a = 1
b
c = 2
d
)
fmt.Println(a, b, c, d) // “1 1 2 2”

3.6.1 常量生成器 iota

iota 初始值 0,逐项加 1。

type Weekday int
const (Sunday Weekday = iotaMondayTuesdayWednesdayThursdayFridaySaturday
)
const (_ = 1 << (10 * iota)KiB // 1024MiB // 1048576GiB // 1073741824TiB // 1099511627776 (exceeds 1 << 32)PiB // 1125899906842624EiB // 1152921504606846976ZiB // 1180591620717411303424 (exceeds 1 << 64)YiB // 1208925819614629174706176
)

3.6.2 无类型常量

编译器将这些从属类型待定的常量表示为某些值,这些值比基本类型的数字精度更高,且算术精度高于原生的机器精度。于类型确定的常量相比,它们能写进更多表达式而不需转换类型
如 fmt.Println(YiB/ZiB)

只有常量才可以是无类型的。

go 语言中,只有大小不明确的 int 类型,不存在大小不确定的 float 类型和 complex 类型。

如果我们将无类型常量赋值给变量,需要显示转换,或者声明变量时声明想要的类型。

var i = int8(0)
var i int8 = 0

以下语句是可以编译的。

v := 1

但是以下语句不能编译。

v = 1
fmt.Printf("%T\n", 0) // int
fmt.Printf("%T\n", 0.0) // float64
fmt.Printf("%T\n", 0i) // complex128
fmt.Printf("%T\n", '\000') //int32(rune)

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

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

相关文章

MAVLINK生成自定义消息

git clone https://github.com/mavlink/mavlink.gitcd mavlinkgit submodule update --init --recursivepython -m mavgenerate出现以下界面 XML填写自定义xml路径&#xff0c;内容可以参考mavlink/message_definitions/v1.0 Out为输出路径 <?xml version"1.0"…

如何用Python批量计算Word中的算式

一、问题的提出 到了期末&#xff0c;大家都在忙着写总结、改试卷、算工作量&#xff0c;写总结可以借助于ChatGPT&#xff0c;改试卷可以用星火的自动批阅功能&#xff0c;算工作量就是一项比较棘手的问题&#xff0c;因为它涉及很多算式&#xff0c;有时需要老师用计算器算来…

Linux操作系统极速入门[常用指令](安装jdk,MySQL,nginx),以及在linux对项目进行部署。

linux概述&#xff1a; Linux是一套免费使用和自由传播的操作系统 我们为什么要学&#xff0c;Linux&#xff1f; 主流操作系统&#xff1a; linux系统版本&#xff1a; 内核版&#xff1a; 由linux核心团队开发&#xff0c;维护 免费&#xff0c;开源 负责控制硬件 发行版&…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之线性布局容器Row组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Row组件 沿水平方向布局容器。 子组件 可以包含子组件。 接口 Row(…

UML——软件需求分析

封面 一.分析: 1.需求描述: 2.需求定义: 3.具体功能: 二.用例图: 1.用例描述: 添加图书 查询图书 借阅图书 归还图书 2. 用例图: 三.类图: 四.顺序图(3个): 添加图书顺序图: 借阅图书顺序图: 删除图书顺序图: 六.状态图(2个): …

机器学习深度学习面试笔记

机器学习&深度学习面试笔记 机器学习Q. 在线性回归中&#xff0c;如果自变量之间存在多重共线性&#xff0c;会导致什么问题&#xff1f;如何检测和处理多重共线性&#xff1f;Q. 什么是岭回归(Ridge Regression)和Lasso回归(Lasso Regression)&#xff1f;它们与普通线性回…

从0开始学前端day1

script setup 在script里写一个setup的作用 自动注册子组件属性和方法无需返回&#xff0c;执行完后自动更新支持props和context Vue 3中的props和context props是一种用于父子组件通信的机制。父组件可以通过props向子组件传递数据&#xff0c;子组件则可以通过props接收来…

Cucumber-JVM的示例和运行解析

Cucumber-JVM 是一个支持 Behavior-Driven Development (BDD) 的 Java 框架。在 BDD 中&#xff0c;可以编写可读的描述来表达软件功能的行为&#xff0c;而这些描述也可以作为自动化测试。 Cucumber-JVM 的最小化环境 Cucumber-JVM是BDD的框架&#xff0c; 提供了GWT语法的相…

云原生机器学习平台cube-studio开源项目及代码简要介绍

1. cube-studio介绍 云原生机器学习平台cube-studio介绍&#xff1a;https://juejin.cn/column/7084516480871563272 cube-studio是开源的云原生机器学习平台&#xff0c;目前包含特征平台&#xff0c;支持在/离线特征&#xff1b;数据源管理&#xff0c;支持结构数据和媒体标…

批量图像分割评估脚本:使用Python和OpenCV

在计算机视觉任务中&#xff0c;图像分割是一项重要的任务&#xff0c;而对分割结果进行评估则是验证模型性能的关键一环。本文将介绍如何使用Python和OpenCV编写一个简单的批量图像分割评估脚本&#xff0c;以评估分割模型的性能。 1. 问题背景 假设我们有一组GT&#xff08…

Linux:Vim

模式介绍&#xff1a; Vim具备6种基本模式和5中派生模式。 普通模式 启动后的默认模式&#xff0c;用于&#xff1a;移动光标、删除文本等待&#xff0c;常用命令&#xff1a; dd&#xff1a;删除当前行。[number]dd&#xff1a;连续执行number对应次数的dd命令&#xff0c…

判断电话号码是否重复-excel

有时候重复的数据不需要或者很烦人&#xff0c;就需要采取措施&#xff0c;希望以下的方法能帮到你。 1.判断是否重复 方法一&#xff1a; 1&#xff09;针对第一个单元格输入等号&#xff0c;以及公式countif(查找记录数的范围&#xff0c;需要查找的单元格&#xff09; 2…

Python Web --Django Web框架

场景 近日写了不少Python脚本&#xff0c;例如&#xff1a;爬虫、ocr、模型训练等。我认为可以更加了解python&#xff0c;因为近一个月使用Python给我的感觉比较好&#xff0c;代码比较简单&#xff0c;比java简单很多&#xff0c;而且python自己管理内存&#xff0c;更多依赖…

Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题

最近使用bcc-tools的时候注意到,bcc-tools(eBPF相关软件)的使用版本和内核的版本紧密程度非常高。因为要使用内核的函数或者结构体,所以就必须版本一致是必须的,不然会出现下面的警告或者错误: WARNING: tcp_drop() kernel function not found or traceable. The kernel …

Modbus RTU转Modbus TCP模块,RS232/485转以太网模块,YL102 多功能串口服务器模块

特点&#xff1a; ● Modbus RTU协议自动转换成Mobus TCP协议 ● 100M高速网卡&#xff0c;10/100M 自适应以太网接口 ● 支持 AUTO MDI/MDIX&#xff0c;可使用交叉网线或平行网线连接 ● RS232波特率从300到256000可设置 ● 工作方式可选择TCP Server, TCP Client, U…

四川天蝶电子商务有限公司助力商家赢在起跑线

随着电商行业的迅猛发展&#xff0c;越来越多的人选择在抖店上开设自己的店铺。作为一家专业的电子商务公司&#xff0c;四川天蝶电子商务有限公司为商家提供了一站式的抖店开店服务&#xff0c;帮助商家轻松开启电商之旅。 首先&#xff0c;四川天蝶电子商务有限公司拥有丰富的…

leetcode贪心算法题总结(一)

此系列分三章来记录leetcode的有关贪心算法题解&#xff0c;题目我都会给出具体实现代码&#xff0c;如果看不懂的可以后台私信我。 本章目录 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列5.最长递增子序列6.递增的三元子序列7.最长连续递增序列8.买卖股票的最…

事务管理解析:掌握Spring事务的必备技能!

AOP事务管理 1.1 Spring事务简介1.1.1 相关概念介绍1.1.2 转账案例-需求分析1.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:创建JdbcConfig配置…

八股文打卡day12——计算机网络(12)

面试题&#xff1a;HTTPS的工作原理&#xff1f;HTTPS是怎么建立连接的&#xff1f; 我的回答&#xff1a; 1.客户端向服务器发起请求&#xff0c;请求建立连接。 2.服务器收到请求之后&#xff0c;向客户端发送其SSL证书&#xff0c;这个证书包含服务器的公钥和一些其他信息…

机器学习之人工神经网络(Artificial Neural Networks,ANN)

人工神经网络(Artificial Neural Networks,ANN)是机器学习中的一种模型,灵感来源于人脑的神经网络结构。它由神经元(或称为节点)构成的层级结构组成,每个神经元接收输入并生成输出,这些输入和输出通过权重进行连接。 人工神经网络(ANN)是一种模仿生物神经系统构建的…