【GO语言基础】基本数据类型

news2024/10/10 14:22:38

系列文章目录

【Go语言学习】ide安装与配置
【GO语言基础】前言
【GO语言基础】变量常量
【GO语言基础】数据类型


文章目录

  • 系列文章目录
  • 数据类型
    • 数值型:
      • 整数类型:
      • 浮点数类型:
    • 字符型-布尔型-字符串
    • 零值
      • 转义字符
  • 常用类型转换
  • 运算符
  • 总结


数据类型

在这里插入图片描述

数值型:

整数类型:

注意:u开头为无符号数,在C语言中,例如,有 "unsigned int"(无符号整型)和 "unsigned short"(无符号短整型)等类型,它们都以 "u" 或 "unsigned" 开头。无符号数只能表示正数和零,不能表示负数。

类型取值范围大小(字节)
int根据平台变化32或64
int8-128到1271
int16-32768到327672
int32-2147483648到21474836474
int64-9223372036854775808到92233720368547758078
uint根据平台变化32或64
uint80到2551
uint160到655352
uint320到42949672954
uint640到184467440737095516158
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var New1 int = 1
	var New2 int8 = 1
	var New3 int16 = 1
	var New4 int32 = 1
	var New5 int64 = 1
	//无符号数
	var New6 uint = 1
	var New7 uint8 = 1
	var New8 uint16 = 1
	var New9 uint32 = 1
	var New10 uint64 = 1

	fmt.Println(New1, New2, New3, New4, New5, New6, New7, New8, New9, New10)
	//unsage.Sizeof输出数据类型存储的大小
	fmt.Println(unsafe.Sizeof(New1))
	fmt.Println(unsafe.Sizeof(New2))
	fmt.Println(unsafe.Sizeof(New3))
	fmt.Println(unsafe.Sizeof(New4))
	fmt.Println(unsafe.Sizeof(New5))
	fmt.Println("无符号数:")
	fmt.Println(unsafe.Sizeof(New6))
	fmt.Println(unsafe.Sizeof(New7))
	fmt.Println(unsafe.Sizeof(New8))
	fmt.Println(unsafe.Sizeof(New9))
	fmt.Println(unsafe.Sizeof(New10))
}

在这里插入图片描述

浮点数类型:

类型取值范围大小(字节)
float32±1.18e-38 to ±3.4e384
float64±2.23e-308 to ±1.8e3088
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	//浮点数类型
	var New1 float32 = 3.14
	var New2 float64 = 3.1415926

	fmt.Println(New1, New2)
	//unsage.Sizeof输出数据类型存储的大小
	fmt.Println(unsafe.Sizeof(New1))
	fmt.Println(unsafe.Sizeof(New2))
}

在这里插入图片描述

字符型-布尔型-字符串

类型取值范围大小(字节)
字符(byte)uint8 类型,代表一个ASCII字符1字节
布尔型(bool)true 或 false1字节(通常)
字符串(string)由多个字符组成的序列,以空字符(‘\0’)结尾变长,取决于字符串的长度
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	// 字符型(byte)
	var b byte = 'a'
	fmt.Printf("Byte: %c\n", b)

	// 布尔型
	var boolVar bool = true
	fmt.Println("Bool:", boolVar)

	// 字符串,技巧使用:反引号括起来的字符串可以原样输出
	var strVar string = "Hello, Go!"
	fmt.Println("String:", strVar)
	
	//unsage.Sizeof输出数据类型存储的大小
	fmt.Println(unsafe.Sizeof(b))
	fmt.Println(unsafe.Sizeof(boolVar))
	fmt.Println(unsafe.Sizeof(strVar))
}

在这里插入图片描述

零值

在Go中,所有声明的变量都会被赋予一个零值,例如,int类型的零值是0,string类型的零值是空字符串。

package main

import "fmt"

func main() {
	var New1 int
	var New2 string
	fmt.Println(New1)
	fmt.Println(New2)
}

在这里插入图片描述

转义字符

转义字符描述
\n换行符,表示一个新的行开始。
\r回车符,表示回到当前行的开头。
\t制表符,表示一个制表位(Tab)。
\"双引号,用于表示包含在字符串中的双引号。
\'单引号,用于表示包含在字符串中的单引号。
\\反斜杠,用于表示包含在字符串中的反斜杠本身。
\0空字符,表示一个空字符。
\xHH十六进制转义字符,用于表示一个两位十六进制数表示的字节。例如,\x0A表示换行符(ASCII码为10)。
\uHHHHUnicode转义字符,用于表示一个四位十六进制数表示的Unicode字符。例如,\u0020表示空格字符(Unicode码为U+0020)。
\UHHHHHHHH大写Unicode转义字符,用于表示一个八位十六进制数表示的Unicode字符。例如,\U00000020表示空格字符(Unicode码为U+0020)。

常用类型转换

自定义类型之间的转换
自定义类型之间的转换取决于它们的底层类型。如果底层类型相同,那么它们可以相互转换。
如float64转换为int

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var a int = 42
	var b float64 = float64(a) // 将整数转换为浮点数
	//输出数据
	fmt.Println(b)
	//输出数据类型
	fmt.Println("b 的类型:", reflect.TypeOf(b))
}

数值类型:

  • 可以将整数类型转换为浮点数类型,例如int转换为float64。
  • 可以将浮点数类型转换为整数类型,但会丢失小数部分,例如float64转换为int。
  • 不同大小的整数类型之间可以相互转换,但注意可能会导致溢出或数据丢失。
package main

import (
	"fmt"
	"reflect"
)

func main() {
	var x int = 42
	var y float64 = float64(x) // int到float64的显式转换
	fmt.Println(x)
	fmt.Println("y 的类型", reflect.TypeOf(y))
	fmt.Println("")

	//float64转换int后精度丢失
	var f float64 = 58.0022
	var z int = int(f)
	fmt.Println(f)
	fmt.Println("f 的类型(转换前)", reflect.TypeOf(f))
	fmt.Println(z)
	fmt.Println("z 的类型(转换后)", reflect.TypeOf(z))
}

在这里插入图片描述

字符串类型:

  • 可以将字符串转换为字节数组或切片,例如string转换为[]byte。
  • 可以将字节数组或切片转换为字符串,例如[]byte转换为string。
  • 可以将一些数值类型转换为字符串,例如int转换为string。
  • 在字符类型转换中常用strconv包(点我跳转中文网)。
    在这里插入图片描述
package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	var New1 int = 555

	fmt.Println(New1)
	fmt.Println("New1的数据类型是:", reflect.TypeOf(New1))
	// 将整数转换为字符串
	var New2 string = strconv.Itoa(New1)
	fmt.Println(New2)
	fmt.Println("New2的数据类型是:", reflect.TypeOf(New2))

	// 将浮点数转换字符串
	var New3 float64 = 3.14
	fmt.Println(New3)
	fmt.Println("New3的数据类型是:", reflect.TypeOf(New3))
	var New4 string = strconv.FormatFloat(New3, 'f', -1, 64)
	//第一个参数是要转换的浮点数。
	//第二个参数是格式标记,其中'f'表示使用普通的浮点数格式。
	//第三个参数是精度,-1表示使用尽可能多的精度。
	//第四个参数是浮点数的位数,通常使用64表示float64类型。
	fmt.Println(New4)
	fmt.Println("New4的数据类型是:", reflect.TypeOf(New4))

}

在这里插入图片描述
布尔类型:
布尔类型不能直接转换为其他数据类型,也不能从其他类型直接转换为布尔类型,需要使用条件语句来进行转换。

package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	var b1 bool = true
	var b2 bool = false

	// 不能直接将b1转换为b2或反之,需要使用条件语句或逻辑运算符来转换
	b1 = !b2 // 使用逻辑非来转换
	fmt.Println(b1)
	fmt.Println("b1数据类型是", reflect.TypeOf(b1))
	//布尔转换为字符串\
	var New1 string = strconv.FormatBool(b1)
	fmt.Println(New1)
	fmt.Println("New1数据类型是", reflect.TypeOf(New1))
}

在这里插入图片描述

运算符

运算符描述
+加法
-减法
*乘法
/除法
%取余
++自增(前置)
自减(前置)
+++自增(后置)
自减(后置)
&取地址运算符
&^按位取反运算符
^按位异或运算符
|按位或运算符
&<<左移位运算符
&>>右移位运算符
==等于运算符
!=不等于运算符
>大于运算符
<小于运算符
>=大于等于运算符
<=小于等于运算符
&&逻辑与运算符
||逻辑或运算符
!逻辑非运算符
<<低位位移运算符
>>高位位移运算符
+=加等于运算符
-=减等于运算符
*=乘等于运算符
/=除等于运算符
%=取模等于运算符
&=按位与等于运算符
^=按位异或等于运算符
|=按位或等于运算符
&=<<低位左移位等于运算符
&=>>低位右移位等于运算符
package main

import "fmt"

func main() {
	//算术运算符
	var a, b int = 10, 5
	fmt.Println(a + b) // 加法
	fmt.Println(a - b) // 减法
	fmt.Println(a * b) // 乘法
	fmt.Println(a / b) // 除法
	fmt.Println(a % b) // 取余

	//赋值运算符
	var c int
	c = 100
	fmt.Println(c)
	c += 50 // 简写加法赋值:等于c=c+50
	fmt.Println(c)
	c -= 20 // 简写减法赋值:等于c=c-20
	fmt.Println(c)
	c *= 3 // 简写乘法赋值:c=c*20
	fmt.Println(c)
	c /= 10 // 简写除法赋值:c=c/20
	fmt.Println(c)

	//比较运算符
	var d, e int = 50, 75
	fmt.Println(d == e) // 等于,输出 false
	fmt.Println(d != e) // 不等于,输出 true
	fmt.Println(d < e)  // 小于,输出 true
	fmt.Println(d > e)  // 大于,输出 false
	fmt.Println(d <= e) // 小于等于,输出 true
	fmt.Println(d >= e) // 大于等于,输出 false

	//位运算符
	var f, g uint8 = 5, 3
	fmt.Println(f & g)  // 按位与,输出 1
	fmt.Println(f | g)  // 按位或,输出 7
	fmt.Println(f ^ g)  // 按位异或,输出 6
	fmt.Println(f << 2) // 左移,输出 20
	fmt.Println(f >> 2) // 右移,输出 1

	//其他运算符
	var h bool = true
	var i int = 42
	fmt.Println(!h)     // 取反,输出 false
	fmt.Println(+i)     // 取正,输出 42(正数)
	fmt.Println(-i)     // 取负,输出 -42(负数)
	fmt.Println(i << 3) // 无符号左移,输出 168(无符号8位数的正数)
}

非布尔数据类型不能使用取反


总结

需要根据数据类型之间的关系选择合适的方法。需要特别注意的是,不支持任意类型的隐式转换,必须使用显式类型转换来完成转换操作,并且在一些情况下可能会引起精度丢失或运行时错误。因此,在进行数据类型转换时,务必小心谨慎。

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

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

相关文章

matplotlib从起点出发(8)_Tutorial_8_Legend

1 图例教程 在matplotlib中灵活地生成Legend。 本图例指南是legend()中可用文档的扩展——在继续阅读本指南之前&#xff0c;请确保你熟悉legend()文档的内容。 本指南使用了一些常用术语&#xff0c;为清楚起见&#xff0c;此处记录了这些术语&#xff1a; legend entry 图…

【Image captioning】S2 Transformer for Image Captioning 实现流程

S2 Transformer for Image Captioning 实现流程 作者:安静到无声 个人主页 目录 S2 Transformer for Image Captioning 实现流程环境设置数据准备训练评价离线评估在线评估参考文献和引用参考引用致谢推荐专栏环境设置 克隆此存

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 本题解法很巧妙&#xff0c;大家可以看题思考一下&#xff0c;在看题解。 代码随想录 public int maxProfit(int[] prices) {int result 0;for (int i 1; i < prices.length; i) {result Math.max(prices[i] - prices[i - 1], 0);}return re…

【可定制、转换时间戳】解析nc文件,并保存为csv文件

解析nc文件&#xff0c;并保存为csv文件 写在最前面解析nc文件&#xff08;代码汇总放最后面&#xff09;读取nc文件获取气象文件中所有变量解析时间解析部分代码汇总 写入csv文件 写在最前面 愿称之为&#xff1a;支持私人订制、非常完美的版本 参考&#xff1a; 解析部分参…

C 风格文件输入/输出---无格式输入/输出

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …

TorchDynamo初探②:Torch.FX调研和实践

作者&#xff5c;strint 1 概要 torch.fx 是 PyTorch 官方发布的 Python 到 Python 的代码变换工具。如果你想做 Torch 代码变换&#xff0c;torch.fx 是首选工具。 torch.fx 会将 Torch 代码 trace 成 6 种基础的 node 组成的 graph&#xff0c;基于这个 graph 可以方便的做各…

01 PHP基础知识讲解

一 php基础知识 PHP文件的默认拓展名是“php”。 PHP文件中包含HTML标记、PHP标记、PHP代码以及空格和注释。 PHP标记&#xff1a;开始标记<?php 结束标记 ?> 中间内容是PHP代码。 PHP代码&#xff1a;学习第一个指令 echo 功能是用于输出字符串 。 语句结束符&a…

从零开始-与大语言模型对话学技术-gradio篇(4)

前言 本文介绍「星火杯」认知大模型场景创新赛中的落选项目- AI命理分析系统&#xff0c;属于个人娱乐练手。总结提炼了往期文章精华并发掘出新的知识。 包括本地部署版本和Web在线版本&#xff0c;两种打包方式基于 半自动化使用.bat手动打包迁移python项目 如何把 Gradio …

Minio集群搭建

一、官方文件 1、minio官网 https://min.io/ 2、中文文档 http://docs.minio.org.cn/docs/ 3、集群原理 二、集群部署 1、在每台服务器上创建minio目录 mkdir -p /app/minio/{run,data1,data2} && mkdir -p /etc/minio2、下载或者上传下载好的minio二进制文件 https…

net/http库中request.RemoteAddr的值不确定性-【Golang踩坑笔记】

环境信息&#xff1a; Go 1.20Windows 11 x64 代码示例 // 这里的r是框架传入的request&#xff0c;其中封装了net/http下的request.go中的Request fmt.Println("r.RemoteAddr:", r.RemoteAddr) // 本地执行时,该值可能是[::1]:port也可能是127.0.0.1:port 当在…

安装GPU驱动,CUDA Toolkit和配置与CUDA对应的Pytorch

如果有帮助,记得回来点个赞 目录 1.安装指定GPU驱动如果安装的GPU CUDA Version和CUDA Toolkit版本已经冲突怎么办? 2.安装指定版本的CUDA Toolkit如果我安装了CUDA Toolkit之后nvcc -V仍然显示旧的CUDA Toolkit版本怎么办? 3.安装与CUDA对应的Pytorch 1.安装指定GPU驱动 &…

C++之string

目录 1、了解string 2、string相关函数 3、相关函数的使用 ①构造函数 ②赋值 ③>>&#xff0c;<< ④operator[] ⑤size ⑥iterator(迭代器) ⑦push_back ⑧append ⑨ ⑩capacity ⑪reserve ⑫resize ⑬insert ⑭erase ⑮c_str ⑯find ⑰substr…

简化转换器:使用您理解的单词进行最先进的 NLP — 第 1 部分 — 输入

一、说明 变形金刚是一种深度学习架构&#xff0c;为人工智能的发展做出了杰出贡献。这是人工智能和整个技术领域的一个重要阶段&#xff0c;但也有点复杂。截至今天&#xff0c;变形金刚上有很多很好的资源&#xff0c;那么为什么要再制作一个呢&#xff1f;两个原因&#xff…

代码随想录第43天|416. 分割等和子集,1049. 最后一块石头的重量 II, ​494.目标和,​ 474.一和零(一窍不通)

416. 分割等和子集 思路 本题是01背包的应用题 背包的体积为sum / 2背包要放入的商品&#xff08;集合里的元素&#xff09;重量为 元素的数值&#xff0c;价值也为元素的数值背包如果正好装满&#xff0c;说明找到了总和为 sum / 2 的子集。背包中每一个元素是不可重复放入…

(其他) 剑指 Offer 67. 把字符串转换成整数 ——【Leetcode每日一题】

❓ 剑指 Offer 67. 把字符串转换成整数 难度&#xff1a;中等 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为…

C++学习笔记(堆栈、指针、命名空间、编译步骤)

C 1、堆和栈2、指针2.1、指针的本质2.2、指针的意义2.3、清空指针2.4、C类中的this 3、malloc and new4、命名空间4.1、创建命名空间4.2、使用命名空间 5、编译程序的四个步骤5.1、预处理5.2、编译5.3、汇编5.4、链接 1、堆和栈 堆&#xff08;heap&#xff09;和栈&#xff0…

领域驱动设计:DDD与微服务的关系

文章目录 基础概念软件架构模式的演进微服务设计和拆分的困境为什么 DDD 适合微服务&#xff1f;DDD 与微服务的关系 基础概念 DDD 虽然历史很久了&#xff0c;但它与微服务和中台设计的结合&#xff0c;却是一片很新的领域。早在 2003 年就诞生的 DDD&#xff0c;怎么来指导“…

基于spring boot+ vue开发的位置数据展现和分析平台源码 UWB源码

spring boot vue位置数据展现和分析平台源码 UWB室内外高精度定位系统源码 智慧工厂是现代工厂信息化发展的新阶段&#xff0c;基于UWB定位技术&#xff0c;融合位置物联网、GIS可视化等技术&#xff0c;实现对人员、物资精确管理。在重点区域设置电子围栏&#xff0c;无权限…

【Mysql】数据库第一讲(服务器数据库的安装和基础操作介绍)

数据库基础 &#x1f361;1.CentOs服务器数据库的安装&#x1f367;2.基础使用&#x1f368; 2.1 服务器&#xff0c;数据库&#xff0c;表关系&#x1f366;2.2使用案例&#xff1a; &#x1f967;3.数据库分类&#x1f9c1;4.存储引擎&#x1f370;4.Mysql库的操作&#x1f3…

YOLO目标检测——密集人群人头数据集+已标注yolo格式标签下载分享

实际项目应用&#xff1a;城市安防、交通管理、社会研究、商业应用、等多个领域数据集说明&#xff1a;YOLO密集人群人头目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;图片格式为jpg&#xff0c;共4300张图片。标注说明&#xff1a…