内置类型

值类型

  • 长度固定的数据类型

bool 
int(32 or 64), int8, int16, int32, int64 // 占用字节数不一样,浪费内存 
uint(32 or 64), uint8(byte), uint16, uint32, uint64
float32, float64 
string 
complex64, complex128 
array // 固定长度的数组

引用类型:(指针类型)

  • 长度不固定,可以扩充的类型

slice // 序列数组(最常用) 
map // 映射 
chan // 管道

内置函数

  • Go 语言拥有一些不需要进行导入操作就可以使用的内置函数。

  • 它们有时可以针对不同的类型进行操作,例如:len、cap 和 append,或必须用于系统级的操作,例如:panic。

  • 因此,它们需要直接获得编译器的支持。

append // 用来追加元素到数组、slice中,返回修改后的数组、slice 
close // 主要用来关闭channel 
delete // 从map中删除key对应的value 
panic // 停止常规的goroutine (panic和recover:用来做错误处理) 
recover // 允许程序定义goroutine的panic动作 
real // 返回complex的实部 (complex、real imag:用于创建和操作复数) 
imag // 返回complex的虚部 
make // 用来分配内存,返回Type本身(只能应用于slice, map, channel) 
new // 用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针 
cap // capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map) 
copy // 用于复制和连接slice,返回复制的数目 
len // 来求长度,比如string、array、slice、map、channel ,返回长度 
print、println // 底层打印函数,在部署环境中建议使用 fmt 包

数字类型介绍

序号

类型和描述

1

uint8 无符号 8 位整型 (0 到 255)

2

uint16 无符号 16 位整型 (0 到 65535)

3

uint32 无符号 32 位整型 (0 到 4294967295)

4

uint64 无符号 64 位整型 (0 到 18446744073709551615)

5

int8 有符号 8 位整型 (-128 到 127) 0

6

int16 有符号 16 位整型 (-32768 到 32767)

7

int32 有符号 32 位整型 (-2147483648 到 2147483647)

8

int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

数据类型转换

在必要以及可行的情况下,一个类型的值可以被转换成另一种类型的值

由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明: A = A(B)

package main

import "fmt"

// 类型转换
func main() {
   // 数据类型转换在Go中就一个格式
   // 新类型的值 = 新类型(旧类型的值)

   // 高位向低位转 (int64  int32  int16)
   
   // 浮点数转整数,截断,只保留整数部分
   a := 5.9    // float
   b := int(a) // b 就是int类型的a = 5

   fmt.Printf("%T,%.1f\n", a, a)
   fmt.Printf("%T,%d\n", b, b)

   c := 1
   d := float64(c)
   fmt.Printf("%T,%d\n", c, c)
   fmt.Printf("%T,%f\n", d, d)

   // 布尔类型转换,布尔类型 是不支持类型转换的。
   //var flag bool = true
   //f := int(flag)
   
}

运算符

算术运算符

package main

import "fmt"

func main() {
   // 算术运算符 + - * / % ++ --
   var a int = 7
   var b int = 3
   var c int // 结果
   // 双元运算符,由两个变量参与运算,或者多个
   c = a + b
   fmt.Println(c)
   c = a - b
   fmt.Println(c)
   c = a * b
   fmt.Println(c)

   c = a / b // 除 7/3 = 2...1
   fmt.Println(c)
   c = a % b // 取模 余数  1
   fmt.Println(c)

   // 单元运算符,用自己就可以操作得出结果
   //  自增++  自减--
   fmt.Println(a)
   a++ // a = a + 1 自增,在自己的基础上 + 1
   fmt.Println(a)

   a = 7
   a-- // a = a-1。  遍历输出一些东西(10000个数字)
   fmt.Println(a)
   
}

逻辑运算符(难点)

判断多个条件是否存在的时候,就需要逻辑

&& 与 只要有一个错,大家都是错的 false,两个都对才是对的。 多条件同时满足(与)

与(和) And 对 And 错 对 And 对(true) 错 And 对 错和错 共生!

|| 或 只要有一个对的,那么就是对的,两个都是错的,结果才是错的。(or)

或 Or 或者 对 or 错 (true) 对 or对(true) 错 or对 (true) 错or错 (错)

如果是真的,那么为假,如果是假,则为真。

非(取反)

package main

import "fmt"

// 逻辑运算符,结果也是布尔值。 多个条件判断是否成立作用
func main() {
   var a bool = true
   var b bool = false
   var c bool = true
   var d bool = false

   // 双元运算符  &&   ||

   // 与 都为真结果才为真,如果有假则结果为假
   // 账户名 和 密码 都要正确才可以登录
   fmt.Println(a && b)
   fmt.Println(a && c)
   fmt.Println(a && d)
   // 短路判断, 在这里 4<5 是没有运算的,也不要运算,因为在 3<2 结果已经出现了
   fmt.Println(1 == 1 && 3 < 2 && 4 < 5)
   fmt.Println("=============================")
   // 或 || 只要满足一个条件,整体结果就位 true  or
   // 如果所有条件都不满足,结果为false。
   // 看文章 (登录、缓存、能够访问......)
   fmt.Println(a || b) // true  false
   fmt.Println(a || c) // true  true
   fmt.Println(a || d) // true  false
   fmt.Println(b || d) // false  false

   // 单元运算符  一个条件就够,就是将当前结果的bool置反
   // 如果真,则结果是假,如果假,则结果是真,
   // 取反
   fmt.Println(!(b || d))
   fmt.Println(!true)
   fmt.Println(!!false)
    
   // 
  // 结果是false 
  if !false { //true
    // 执行...
  }

}