文章目录
1.变量的数据类型
1.1基本数据类型
- 1.数值型
- 整数类型 int uint byte rune
- 浮点类型 foat
- 2.字符型(使用byte来保存单个字母字符)
- 3.布尔型 bool
- 4.字符串
1.2派生/复杂数据类型
- 指针,数组,结构体,管道,函数,切片,接口,map
整数的各个类型
1.int有符号,的取值范围,和uint无符号的取值范围,默认是看计算机是几位,64位的话是占8个字节
2.rune与int32一样,表示一个Unicode码储存中文。
3.byte等于uint8(存字符时使用)
4.Golang的整形默认声明为int型
5.Golang程序中,遵循保小不保大的原则,尽量使用占用空间小的数据类型
6.1byte=8bit
使用unsafe,这个包来查看n2的字节
package main
import (
"fmt"
"unsafe"
)
func main() {
var n2 int64 = 10
fmt.Printf("n2的类型%T n2占用的字节数%d", n2, unsafe.Sizeof(n2))
}
1.3小数类型/浮点型
1.小数类型就是用于存放小数的,比如1.2 0.65 -6.6
2.浮点数=符号位+指数位+尾数位,浮点数都是有符号的
3.尾数部分可能丢失,造成精度的损失。64位的精度比32的要准确
4.浮点型有固定的范围,字段长度,不受os(操作系统)的影响。
5.Glong的浮点型默认声明为float64类型
6. 十进制数形式.555=0.555
7. 科学计数法
1.4字符类型
1.byte是按字符来保存数字的
- 直接输出的话,输出的就是ascll表字符码值
- 如果需要输出对应的字符,需要使用格式化输出c = %c(格式化输出)fmt.Printf
- 如果输出"北"会溢出255的值,用int就可以储存,c = %c %d 就是对应的码值
2.Golang中没有专门的字符类型,如果存储单个字符一帮用baye来保存
3.go的字符串是由各个字节组成起来。字符串是由字符组成的,go字符串不同,他是由字节组成的
4.go语言是用UTF-8编码,包含ascll(最多255)英文是1个字节,汉子是3个字节
5.在go中字符本质就是一个整数,直接输出就是UTF-8码值
6.字符类型是可以进行运算的,相当于一个整数,运算时时按码值运行
7.Println :可以打印出字符串,和变量
Printf : 只可以打印出格式化的字符串,可以输出字符串类型的变量
1.5布尔类型:bool
1.布尔型也叫bool类型,bool类型数据值允许取值true和false
2.bool类型只占一个字节
3.bool是用来逻辑运算的,一般用于流程控制
- if条件控制语句
- for循环控制语句
4.不能用0或者非0来代替false和ture
1.6字符串类型:string
1.字符串就是固定长度的字符连接起来的字符序列,Go的字符串是由当个字节连接起来的,go语言的字符串hi字节使用UTF-8
标识Unicode文本的。
2.字符串一旦修改就不能去修改str的内容,即go中字符串是不可变的
3.字符串由两种类型
- 双引号,会识别转义字符,
- 反引号` ,不识别转义字符,可以实现防止攻击,输出源代码等效果
- 可以用拼接的方式,+
- 当一行太多是,需要用多行字符,注意要把+保留在上一行
2.基本数据类型的默认值
1.当程序员数据类型都有一个默认值,当程序员没有赋值时,默认值又叫0值
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串“”。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil。
3.Golang基本数据类型转换
- go在不同类型不同类型的变量直接赋值时需要显示转换,也就是说golang中数据类型不能直接转换
- 基本语法
- 表达式T(v)将值转换为类型T
- T:就是数据类型,比如int32.int64等
- v:就是需要转换的变量
- go中数据类型可以从范围小到大,也可以大到小
- 被转换的是变量存储的数据(即值),变量本身的数据并没有变化
- 在转换中,int64转成int8,编译时不会报错,只是只是按溢出处理,和我们希望的结果不一样
4.基本数据类型和string的转换
在程序开发过程中基本数据类型,转成string,或者将string转成基本数据类型
方法1
func Sprintf
func Sprintf(format string, a ...interface{}) string
Sprintf根据format参数生成格式化的字符串并返回该字符串
package main
import "fmt" //下划线表示忽略这个包
func main() {
//y演示glang中基本数据类型转成string使用
var num1 int = 99
var num float64 = 23.456
var b bool = true
var mychar byte = 'h'
var str string // 空的str
//使用第一种方式,fmt.sprintf方法
str = fmt.Sprintf("%d", num1)
fmt.Printf("str type %T str%v\n", str, str)
str = fmt.Sprintf("%f", num)
fmt.Printf("str type %T str%v\n", str, str)
str = fmt.Sprintf("%t", b)
fmt.Printf("str type %T str%q\n", str, str)
str = fmt.Sprintf("%c", mychar)
fmt.Printf("str type %T str%q\n", str, str)
}
方法2,使用strconv包的函数
3.go里面的转义字符
4.string类型转基本类型
使用strconv这个包的函数(parse)
package main
import (
"fmt"
"strconv"
)
// 演示golang中string转成基本数据类型
func main() {
var str string = "true"
var b bool
//这个函数会返回两个值 func ParseBool(str string) (value bool, err error)
//因为我只想获取到value bool,不想获取这个歌err,所有我使用这个_忽略
b, _ = strconv.ParseBool(str)
fmt.Printf("b type %T b=%v\n", b, b)
var str2 string = "1234590"
var num1 int64
var n2 int
n2 = int(num1)
num1, _ = strconv.ParseInt(str2, 10, 64)
fmt.Printf("b type %T b=%v\n", num1, num1)
fmt.Printf("b type %T b=%v\n", n2, n2)
}
因为返回的都是int64或者float64,希望得到int32,float32
var num5 int 32
num = int(32)
- 很好理解,就是按函数的语法格式就行,格式上怎么说就怎么做
- https://studygolang.com/pkgdoc
5.注意
- go里面双引号是字符串,单引号是字符,rune。
- 在将string数据类型转成基本数据类型是,要确保string数据类型能够转成有效数据,比如我们把“123”
转成一个整数,但是不能把“hello”转成一个整数,如果这样做,golang直接将其转成0,或者默认值,其他类型一样的到理。 - 最后在说,函数的用法都是由设计者的习惯见解,强制性的,根据手则的使用即可