命令记不住

登陆

基本数据类型

基本数据类型

数据类型表示数据在内存中开辟的空间大小的别称。
在Go语言中数据类型可以分为:基本数据类型和派生数据类型

1 Go语言命名规则

命名规则

允许使用字母、数字、下划线
不允许使用Go语言关键字
不允许使用数字开头
区分大小写
见名知义

驼峰命名法

小驼峰式命名法(lower camel case):
第一个单词以小写字母开始,第二个单词的首字母大写,例如:myName、aDog
大驼峰式命名法(upper camel case):
每一个单字的首字母都采用大写字母,例如:FirstName、LastName

2 基本数据类型

Go语言数据类型分为五种:

布尔类型
整型类型
浮点类型
字符类型
字符串类型

类型 名称 长度 零值 说明
bool 布尔类型 1 false 其值不为真即为假,不可以用数字代表 false
byte 字节型 1 0 uint8别名
uint 整型 1 0 根据操作系统设定数据的值
int8 整型 1 0 128 ~ 127
uint8 整型 1 0 0 ~ 255
int16 整型 2 0 -32768 ~ 32767
uint16 整型 2 0 0 ~ 65535
int32 整型 4 0 -2147483648 ~ 2147483647
uint32 整型 4 0 0 ~ 4294967295(42亿)
int64 整型 8 0 9223372036854775808 ~ 9223372036854775807
uint64 整型 8 0 0 ~ 18446744073709551615(1844京)
float32 浮点型 4 0.0 小数位精确到7位
float64 浮点型 8 0.0 小数位精确到15位
string 字符串 - : utf-8字符串
  • 布尔型

布尔类型也叫做bool类型,bool类型数据只允许取值true或false
bool类型占1个字节
bool类型适用于逻辑运算,一般用于流程控制

  • 整型

整型数据分为两类,有符号和无符号两种类型
有符号: int, int8, int16, int32, int64
无符号: uint, uint8, uint16, uint32, uint64, byte
不同位数的整型区别在于能保存整型数字范围的大小
有符号类型可以存储任何整数,无符号类型只能存储自然数
int和uint的大小和系统有关,32位系统表示int32和uint32,如果是64位系统则表示
int64和uint64

  • 进制

十进制整数,使用0-9的数字表示且不以0开头
八进制整数,以0开头,0-7的数字表示
十六进制整数,以0X或者是0x开头,0-9|A-F|a-f组成

fmt技巧:

多个%要求提供相同数目的操作数,而%后的副词[1]告知Printf重复使用第一个操作数,其次%o,%x或%x之前的副词#告知Printf输出相应的前缀0,0x或0x.

func main() {
	ascii := 'a'
	x := 0xdeadbeef

	fmt.Printf("%d %[1]c %[1]q\n", ascii)
	fmt.Printf("%d %#x  %#X\n", x, x, x)
}

//97 a 'a'
//3735928559 0xdeadbeef  0XDEADBEEF

//输出带有单引号
printf("%q",a)  'a'
//输出字符串
printf("%s",a)
//输出单个字符
printf("%c",a)
//输出无符号十进制数
printf("%u",a)
//输出变量类型
fmt.Printf("%T", var_name) 
//查看变量占用字节浮点型
unsafe.Sizeof(var_name) 
//%d 按照十进制打印数据
fmt.Printf("%d", a)
//%o 按照八进制打印数据
fmt.Printf("%o", b)
//%x 按照十六进制打印数据
fmt.Printf("%x", c)
fmt.Printf("%X", c)
//%b 按照二进制打印数据
fmt.Printf("%b", d)
  • 浮点数

浮点数由整数部分 、小数点和小数部分组成,整数部分和小数部分可以隐藏其中一种。也可以使用科学计数法表示,尾数部分可能丢失,造成精度损失。
float64的精度要比float32的要准确

//%f	表示输出一个浮点型  默认保留六位小数  会四舍五入
fmt.Printf("%f\n", d)
//%.2f	小数点保留2位会对第三位进行四舍五入
fmt.Printf("%.2f\n", e)
//科学计数法 f:= 3.14e-5
fmt.Printf("%f\n", f)
  • 字符

Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存
字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串
字符使用UTF-8编码,英文字母占一个字符,汉字占三个字符
可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符
字符类型是可以运算的,相当于一个整数,因为它们都有对应的unicode码

//字符类型  实际为uint8 会按照uint8格式打印
//ASCII码
//0-31 控制字符  使用转移字符表示内容
//32-126  默认字符 48 = '0'  65= 'A' 97='a'
//127 Del 字符

但是如果我们保存的字符大于255,比如存储汉字,这时byte类型就无法保存,可以使用rune类型保存

一个中文汉字占用3个字符

rune 字符类型 实际为int32 会按照int32格式打印
var ch rune = '中' 支持utf-8中文格式

package main

import "fmt"

func main(){
//字符只能被单引号包裹,不能用双引号,双引号包裹的是字符串
var c1 byte = 'z'
var c2 byte = '5'
//当我们直接输出type值时,就是输出了对应字符的ASCII码值
fmt.Println(c1,"--",c2)
fmt.Printf("c1 = %c  c2 = %c  ,the result of %d\n",c1,c2,c1-c2)
}
C:\Users\vSphere\go\src\day00>go run 09.go
122 -- 53
c1 = z  c2 = 5  ,the result of 69

  • 字符串

字符串就是一串固定长度的字符连接起来的字符序列;

Go的字符串是由单个字节连接起来的;

Go语言的字符串的字节使用UTF-8编码标识Unicode文本;
字符串一旦赋值了,就不能修改了,在Go中字符串是不可变的;

字符串的两种标识形式:

双引号,会识别转义字符;

反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源
代码等效果;

package main

import "fmt"

func main(){
var str = "123\nabc"  //输出时会换行

fmt.Println(str)
}
C:\Users\vSphere\go\src\day00>go run 10.go
123
abcpackage main

import "fmt"

func main(){
var str = `123\nabc`//输出时不会换行

fmt.Println(str)
}
C:\Users\vSphere\go\src\day00>go run 10.go
123\nabc

字符串拼接方式

package main
import "fmt"
func main() {
var str = "hello " + "world"
str += "!"
fmt.Println(str)
}

C:\Users\vSphere\go\src\day00>go run 10.go
hello world!

当一行字符串太长时,需要使用到多行字符串,可以使用如下处理,需要注意 + 必须在当前行的结尾

package main

import "fmt"

func main() {
	var str = "hello " +
		"world"
	str += "!"
	fmt.Println(str)
}

3.类型转换

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
两种不同的类型在计算时,Go语言要求必须进行类型转换。
类型转换用于将一种数据类型的变量转换为另外一种类型的变量。
Go 语言类型转换基本格式如下:

数据类型(变量)  //将变量转成指定的类型
数据类型(表达式) //将表达式转成指定的类型
//类型转换
package main

import "fmt"

func main(){
	//去市场买菜  黄瓜3.25元/斤  买5斤
	price := 3.25
	weight := 5

	fmt.Printf("%T\n",price)
	fmt.Printf("%T\n",weight)
	//数据类型变量名
	sum := price * float64(weight)
	fmt.Println(sum)
	//将浮点型转换成整型,可能丢失数据精度
	sum = int(price) * weight
	fmt.Println(sum)
	//数据类型 (表达式)
	sum = int(price * float64(weight))
	fmt.Println(sum)
}


C:\Users\vSphere\AppData\Local\Temp\___go_build_day02.exe #gosetup
float64
int
16.25

不通类型可以直接进行计算的场景和不可以进行计算的场景

// 类型转换
package main

import "fmt"

type int1 int
type int2 int

func main() {

	//var a int8 = 123
	//var b  int  =234
	//需要进行类型转换
	//fmt.Println(a+b)

	type rune = int32 //两个数据类型可以计算
	ch := 'A'         //rune == int32
	var c int32 = 100
	fmt.Println(ch + c)
	//两个数据类型可以计算

	//不可以计算
	var a int1 = 123
	var b int2 = 234
	fmt.Println(a + b)
	/*
	   # day02
	   .\0`.go:22:16: invalid operation: a + b (mismatched types int1 and int2)
	*/

}

4.位运算符

&	位运算 AND
|	位运算 OR
^	位运算 XOR
&^	位清空 AND NO
<<	左移
>>	右移

g

g

推荐阅读