当前位置: 首页 > news >正文

golang学习笔记4-基本数据类型

注:本人已有C,C++,Python基础,只写本人认为的重点。
go的数据类型如下
在这里插入图片描述
由于bool和c++类似,和go的区别是,bool的值只能取true和false,不能取整数,而且有默认值false。

一、整数型

整数型存放整数,默认值为0,其分类如下:
1.有符号整数
在这里插入图片描述
2.无符号整数
在这里插入图片描述
3.默认类型
在这里插入图片描述
4.一些细节
(1)在自动推导的声明中,整数型默认为int,比如var a=100,a就是int型。
(2)使用整数型变量时,遵循保小不保大的原则,即尽量使用占用空间较小的数据类型,比如年龄age,用byte就足够了。

二、查看变量的类型与占用大小

一般用包unsafe中的Sizeof()函数,当导入超过1个包时,我们一般将多个包一次声明,详见如下代码:

package mainimport ("fmt""unsafe"
)func main() {var n int = 10fmt.Printf("n的类型:%T,占用%d字节", n, unsafe.Sizeof(n))
}

其中Printf类似C的printf,%T表示数据类型。

三、浮点型

浮点型存放小数,其默认值也为0,类型只有两种,基本信息如下:
1.float的类型
在这里插入图片描述
显然,float32相当于C/C++中的float,float64相当于double,在开发中推荐使用64位float。
2.一些细节
(1)E是科学计数法,在go中,e和E一样。
(2)高精度转低精度会有精度损失,值会改变,因为尾数位丢失了,这是计算机组成原理的内容,不做赘述。

四、字符型

go中没有专门的字符型,存储字符一般用byte。由于go默认用utf8编码,一个字符占1-4个字节,其中中文字符一般占3个字节,所以非英文字符一般用整数型存储,当然,浮点型也可以存储字符。显然,用utf8统一编码避免了乱码的情况。
一些细节:
1.字符的本质是整数,若直接输出存储字符的变量,输出的是该字符在unicode中的码值。若想以字符形式输出,一般用Printf中的%c,这点和C一样。
2.字符是可以运算的,按照其unicode码值运算。
上述细节举例如下:

package mainimport "fmt"// 演示golang中字符类型使用
func main() {var c1 byte = 'a'var c2 byte = '0' //字符的0//当我们直接输出byte值,就是输出了的对应的字符的码值// 'a' ==>fmt.Println("c1=", c1)fmt.Println("c2=", c2)//如果我们希望输出对应字符,需要使用格式化输出fmt.Printf("c1=%c c2=%c\n", c1, c2)//var c3 byte = '北' //这样做是错的,因为数值会溢出var c3 int = '北' //正确做法是用更多字节的类型存储fmt.Printf("c3=%c c3对应码值=%d\n", c3, c3)//可以直接给某个变量赋一个数字,然后按格式化输出var c4 int = 22269 // 22269 -> '国'fmt.Printf("c4=%c\n", c4)//字符类型是可以进行运算的,相当于一个整数,运算时是按照码值运行var n1 = 10 + 'a' //  10 + 97 = 107fmt.Println("n1=", n1)
}

五、字符串

go的字符串的默认值是空串,它是由字节组成的,每个字节使用utf8编码。一些细节如下:
1.字符串可以像c++那样用下标访问,但无法通过下标修改。
2.双引号会识别转义字符,反引号则不识别,以字符串原生形式输出,用于防止攻击,输出源码等。
3.字符串的拼接和C++一样,但换行时,加号必须留在上一行末尾。
上述细节举例如下:

package mainimport "fmt"// 演示golang中string类型使用
func main() {//string的基本使用var address string = "北京长城 110 hello world!"fmt.Println(address)//var str = "hello"//str[0] = 'a' //错误,因为字符串无法通过下标修改//反引号以字符串的原生形式输出,包括换行和特殊字符str3 := ` package mainimport ("fmt""unsafe")//演示golang中bool类型使用func main() {var b = falsefmt.Println("b=", b)}`fmt.Println(str3)//当一个拼接的操作很长时,可以分行写,但要将+保留在上一行.str4 := "hello " + "world" +"world" + "hello " +"hello " + "world"fmt.Println(str4)var a int          // 0var b float32      // 0var c float64      // 0var isMarried bool // falsevar name string    // ""//这里的%v 表示按照变量的值输出fmt.Printf("a=%d,b=%v,c=%v,isMarried=%v name=%v", a, b, c, isMarried, name)
}

http://www.mrgr.cn/news/33457.html

相关文章:

  • 探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
  • HarmonyOS SDK下的实践与探索
  • 038 进程线程
  • PyQt5 详细安装与配置教程及使用
  • odoo17 owl 前端 顶部导航栏右侧添加自定义按钮
  • 第4章: 图像绘制与文本添加
  • 哔哩哔哩自动批量删除抽奖动态解析篇(二)
  • 移动登录页:让用户开启一段美好的旅程吧。
  • Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】
  • 如何在Jupyter Notebook中将TensorFlow和Keras降级到2.8.0版本:详细指南
  • Vivado的.v文件被误分类到Non-module Files中[filemgmt 20-2001] Source scanning failed
  • Linux,uboot,kernel启动流程,S5PV210芯片的启动流程,DRAM控制器初始化流程
  • 【Vue】自定义指令 - 点击当前区域外
  • SSM+vue音乐播放器管理系统
  • 数值计算 --- 平方根倒数快速算法(0x5f3759df,这是什么鬼!!!)
  • 拥有一个你说了算的人生—空间
  • 机器学习——Boosting
  • 【C++】二叉搜索树的底层以及实现
  • Day05 日期类OJ题目
  • 使用Go语言的互斥锁(Mutex)解决并发问题
  • Linux-gcc/g++
  • HTB-GreenHorn 靶机笔记
  • 校园美食发现:Spring Boot技术的美食社交平台
  • Zotero(7.0.5)+123云盘同步空间+Z-library=无限存储文献pdf/epub电子书等资料
  • 【Linux】【Hadoop】大数据基础实验一
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 4 获取Push Token