Go基本数据类型 | 青训营

225 阅读5分钟
mindmap
      数据类型
               基本数据类型
                           布尔型
                           数值型
                                  整型
                                  浮点型
                           字符串
               派生数据类型
                           数组
                           切片
                           map
                           函数
                           结构体
                           指针
                           接口
                           channel

整型

无符号整型:uint8(byte),uint16,uint32,uint64 有符号整型:int8,int16,int32,int64

类型范围
uint80 到 255
uint160 到 65535
uint320 到 4294967295
uint640 到 18446744073709551615
int8-128 到 127
int16-32768 到 32767
int32-2147483648 到 2147483647
int64-9223372036854775808 到 9223372036854775807
uint在32位系统上为uint32,在64位系统上为uint64

int在32位系统上为int32,在64位系统上为int64

在一些情况下不能使用int和uint声明,必须确定位数,避免收到设备的影响

进制转换

占位符

二进制       %b
十进制       %d
十六进制     %x
八进制       %o

表示

八进制数字以0开头,例:015
十六进制数字以0x开头,例:0xabc

image.png

浮点型

float32和float64 他们的最大值分别可以用math.MaxFloat32, math.MaxFloat64表示

fmt.Println(math.MaxFloat32, math.MaxFloat64)  
// 3.4028234663852886e+38    1.7976931348623157e+308

占位符:%f %m.nf:m表示至少占m个字符宽度(数据不足时前面用空格补齐,-m后面用空格补齐)

n表示小数点后位数

//浮点型占位符  
var num1 = 3.1415  
fmt.Printf("%f\n", num1) //3.141500  
fmt.Printf("%.2f\n", num1)  //3.14 
fmt.Printf("%1.2f\n", num1) //3.14  
fmt.Printf("%3.2f\n", num1) //3.14  
fmt.Printf("%5.2f\n", num1) // 3.14  
fmt.Printf("%6.2f\n", num1) //  3.14

注意:

复数

complex64和complex128

complex64实部和虚部各32位

complex128虚部各64

//复数  
var num2, num3 = 1 + 2i, 3 + 4i  
fmt.Println(num2, num3)
//         (1+2i) (3+4i)

布尔型

bool

值为true或false,默认为false

真假不可以用数字表示

字符串 string

  • 字符串用""
  • 还可以使用
str := `12
123

123
`

此时,字符串按定义时的格式打印,且转移字符这种情况下不起作用

转义字符

表示改变原来的含义,在字符串中转义字符算一个字符,不管(\ + 字符)是否有具体含义,都表示一个字符

例如:\n,\t,',",\

\n 换行,光标跳到到下一行

\t 制表符,自动补齐

\' 就表示 '

\" 表示 " ,避免在打印的时候产生影响

\\ 打印 \ ,在打印地址的时候多用

byte和rune

Go语言中字符有两种:

byte:uint8,用来表示ASCII码包含的字符

rune:UTF-8字符,中文、韩文……

-----------------------------------------------------------------------------------

ASCII码中的字符只占用一个字节,但是UTF-8中汉字占3-4个字节,带汉字的字符串不适合用len()遍历,可以用for range遍历

// 字符串遍历  
var str string = "hello 世界"  
for i := 0; i < len(str); i++ {  
fmt.Printf("%c", str[i])  
}  
//hello ä¸ç
fmt.Println()  
for _, v := range str {  
fmt.Printf("%c", v)  
}
//hello 世界

类型转换

Go语言中只有强制类型转换,没有隐式类型转换。且只能在两个类型之间支持相互转换的时候使用。

标识符和关键字

标识符

程序员自己定义的具有特殊意义的,例如变量名、常量名、函数名、包名……

组成:由数字、字母、_(下划线)组成,不能以数字开头,标识符不可以是关键字

注意:标识符区分大小写

关键字

Go语言中预先定义好的

Go语言中的关键字:

break  default  func     interface    select
chan   case     const    continue     defer
go     map      struct   switch       if
else   goto     package  fallthrough  var
return import   type     range        for

Go语言中的保留字:

int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64
complex64 complex128

bool     byte    rune   string  error   make  len  cap
new      append  copy   close   delete  panic 
recover  true    false  iota    nil

关键字和保留字都不可以用来做标识符

变量

方便在内存上访问数据

变量类型

每一个变量都有自己的变量类型,比如整型、浮点型、布尔型……

变量的声明

变量在使用之前都必须要声明,且声明变量后必须使用,不然会报错

格式:var 变量名 变量类型

变量类型必须写

// 变量的声明  
var name string  

若要一次声明多个变量

var (
    name string
    age int
)

变量的初始化

声明时进行初始化

var name (string) = "张三"

这时变量类型可以不写,编译器会根据值判断变量类型

短变量声明声明时进行初始化

name := "张三"

注意:只能在函数内使用

若声明时没有给出初始值,则go语言会自动初始化

整型和浮点型默认初始化为0

字符型默认初始化为空字符( )

布尔型默认初始化为false

切片、指针、map……默认初始化为nil

匿名变量

某变量需要接收但不需要使用时可以用_

var arr = [...]int{1,2,3,4,5}
for _,v := range arr {
}

常量

值恒定不变

格式:const 变量名 变量类型 = 值

注意:常量在定义时必须赋值 多个常量一起声明

const (
      num1 = 1
      num2 = 2
      num3 = 3
)

若下面的常量忽略了值,则忽略了的值与上面一行一样

const (
      num1 = 1
      num2 
      num3 
)
const (
      num1 = 1
      num2 = 1
      num3 = 1
)

上面两种写法结果一致

iota

iota是常量计数器,只能在常来那个表达式中使用 计数规则:const出现时iota重置为0 const中每新增一行常量声明iota计数一次

几种情况

情况一

const (
      num1 = iota  //0
      num2         //1
      num3         //2
      num4         //3
)

情况二

const (
      num1 = iota  //0
      _         
      num3         //2
      num4         //3
)

情况三

const (
      num1 = iota  //0
      num2 = 100   //100       
      num3         //2
      num4         //3
)

情况四

const (
      num1,num2 = iota,iota    //0  0
      num3,num4                //1  1
)

情况五

const (
      _ = iota
      KB = 1 << (iota * 10)  // 10000000000  1024
      MB = 1 << (iota * 10)  // 10000000000 0000000000  1024 * 1024
      GB = 1 << (iota * 10)  // ....  1024*1024*1024
      TB = 1 << (iota * 10)  // ....  1024*1024*1024*1024
)