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个包时,我们一般将多个包一次声明,详见如下代码:

go 复制代码
package main

import (
	"fmt"
	"unsafe"
)

func main() {
	var n int = 10
	fmt.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码值运算。

上述细节举例如下:

go 复制代码
package main

import "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 = 107
	fmt.Println("n1=", n1)
}

五、字符串

go的字符串的默认值是空串,它是由字节组成的,每个字节使用utf8编码。一些细节如下:

1.字符串可以像c++那样用下标访问,但无法通过下标修改。

2.双引号会识别转义字符,反引号则不识别,以字符串原生形式输出,用于防止攻击,输出源码等。

3.字符串的拼接和C++一样,但换行时,加号必须留在上一行末尾。

上述细节举例如下:

go 复制代码
package main

import "fmt"

// 演示golang中string类型使用
func main() {
	//string的基本使用
	var address string = "北京长城 110 hello world!"
	fmt.Println(address)
	//var str = "hello"
	//str[0] = 'a' //错误,因为字符串无法通过下标修改
	//反引号以字符串的原生形式输出,包括换行和特殊字符
	str3 := ` 
	package main
	import (
		"fmt"
		"unsafe"
	)
	
	//演示golang中bool类型使用
	func main() {
		var b = false
		fmt.Println("b=", b)
	}
	`
	fmt.Println(str3)
	//当一个拼接的操作很长时,可以分行写,但要将+保留在上一行.
	str4 := "hello " + "world" +
		"world" + "hello " +
		"hello " + "world"
	fmt.Println(str4)
	var a int          // 0
	var b float32      // 0
	var c float64      // 0
	var isMarried bool // false
	var name string    // ""
	//这里的%v 表示按照变量的值输出
	fmt.Printf("a=%d,b=%v,c=%v,isMarried=%v name=%v", a, b, c, isMarried, name)
}
相关推荐
字节全栈_kYu15 分钟前
微信小程序视频点播在线视频学习系统 毕业设计 课程设计(1)首页_微信小程序视频功能设计流程图
学习·微信小程序·课程设计
想拿高薪的韭菜25 分钟前
人工智能第2章-知识点与学习笔记
人工智能·笔记·学习
Future_yzx1 小时前
Java Web的发展史与SpringMVC入门学习(SpringMVC框架入门案例)
java·前端·学习
Future_yzx1 小时前
Spring MVC学习——发送请求(@RequestMapping注解及请求参数绑定)
学习·spring·mvc
一只码代码的章鱼1 小时前
计算机网络 应用层 笔记 (电子邮件系统,SMTP,POP3,MIME,IMAP,万维网,HTTP,html)
笔记·计算机网络·microsoft
沈韶珺1 小时前
Elixir语言的安全开发
开发语言·后端·golang
学游戏开发的2 小时前
UE求职Demo开发日志#19 给物品找图标,实现装备增加属性,背包栏UI显示装备
c++·笔记·游戏引擎·unreal engine
云缘若仙2 小时前
directx12 3d+vs2022游戏开发第三章 笔记五 变换
笔记·3d
小菜鸟博士2 小时前
手撕Vision Transformer -- Day1 -- 基础原理
人工智能·深度学习·学习·算法·面试
Bluesonli3 小时前
UE5 蓝图学习计划 - Day 6:角色蓝图
学习·ue5·unreal engine