Go语言简介
-  go语言的特性: -  一个目录下的同级文件属于同一个包。 
-  包名可以与其目录名不同 ?。 
-  main包是Go语言程序的入口包,一个Go语言程序必须有且仅有一个main包,如果一个程序没有main包,那么编译事就会出错,无法生成可执行文件。(main函数只能声明在main包中) 
 
-  
-  导入的包中不能含有代码中没有使用的包,否则Go编译器会出错。 import( "name1" "name2" ) 
-  func 函数名 (参数列表) (返回值列表) { 函数体 } 
-  -  go build 命令可以将Go语言程序代码编译成二进制的可执行文件,但是需要我们手动运行该二进制文件; 
-  go run 命令则更加方便,它会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件,这个特点很适合用来调试程序 
 
-  
Go语言基本语法
-  -  var 变量名 变量类型 
-  当一个变量被声明之后,系统自动赋予它该类型的零值:int 为 0,float 为 0.0,bool 为 false,string 为空字符串,指针为 nil 等。所有的内存在 Go 中都是经过初始化的 
-  var (a intb stringc []float32d func() boole struct {x int} )
-  名字 := 表达式 (简短变量声明被广泛用于大部分的局部变量的声明和初始化。var 形式的声明语句往往是用于需要显式指定变量类型地方,或者因为变量稍后会被重新赋值而初始值无关紧要的地方) -  定义变量,同时显式初始化 
-  不能提供数据类型 
-  只能用在函数内部 
 
-  
-  匿名变量 _ 将被抛弃 
-  作用域 (Go语言会在编译时检查每个变量是否使用过,一旦出现未使用的变量,就会报编译错误。如果不能理解变量的作用域,就有可能会带来一些不明所以的编译错误。) -  函数内定义的变量称为局部变量 
-  函数外定义的变量称为全局变量 (在函数体外声明的变量称之为全局变量,全局变量只需要在一个源文件中定义,就可以在所有源文件中使用,当然,不包含这个全局变量的源文件需要使用“import”关键字引入全局变量所在的源文件之后才能使用这个全局变量。)(全局变量声明必须以 var 关键字开头,如果想要在外部包中使用全局变量的首字母必须大写) 
-  函数定义中的变量称为形式参数 
 
-  
-  Go语言同时提供了有符号和无符号的整数类型,其中包括 int8、int16、int32 和 int64 四种大小截然不同的有符号整数类型,分别对应 8、16、32、64 bit(二进制位)大小的有符号整数,与此对应的是 uint8、uint16、uint32 和 uint64 四种无符号整数类型。 
-  浮点类型 -  常量 math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38; 
-  常量 math.MaxFloat64 表示 float64 能取到的最大数值,大约是 1.8e308; 
-  float32 和 float64 能表示的最小值分别为 1.4e-45 和 4.9e-324 
-  一个 float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度,通常应该优先使用 float64 类型,因为 float32 类型的累计计算误差很容易扩散,并且 float32 能精确表示的正整数并不是很大。 -  var f float32 = 16777216 // 1 << 24 fmt.Println(f == f+1) // "true"! 
 
-  
-  浮点数在声明的时候可以只写整数部分或者小数部分 -  const e = .71828 // 0.71828 const f = 1. // 1 
 
-  
-  很小或很大的数最好用科学计数法书写,通过 e 或 E 来指定指数部分 -  const Avogadro = 6.02214129e23 // 阿伏伽德罗常数 const Planck = 6.62606957e-34 // 普朗克常数  
 
-  
-  用 Printf 函数打印浮点数时可以使用“%f”来控制保留几位小数 
 
-  
-  复数 Go语言中复数的类型有两种,分别是 complex128(64 位实数和虚数)和 complex64(32 位实数和虚数),其中 complex128 为复数的默认类型 -  var name complex128 = complex(x, y) 
-  name := complex(x, y) 
-  对于一个复数 z := complex(x, y),可以通过Go语言的内置函数real(z)来获得该复数的实部,也就是 x;通过imag(z)获得该复数的虚部,也就是 y
-  复数也可以用 ==和!=进行相等比较,只有两个复数的实部和虚部都相等的时候它们才是相等的
 
-  
-  Go语言中不允许将整型强制转换为布尔型 
-  定义字符串 -  可以使用双引号 ""来定义字符串,字符串中可以使用转义字符来实现换行、缩进等效果,常用的转义字符包括:-  \n:换行符 
-  \r:回车符 
-  \t:tab 键 
-  \u 或 \U:Unicode 字符 
-  \:反斜杠自身 
 
-  
-  在Go语言中,使用双引号书写字符串的方式是字符串常见表达方式之一,被称为字符串字面量(string literal),这种双引号字面量不能跨行,如果想要在源码中嵌入一个多行字符串时,就必须使用```反引号 -  const str = `第一行 第二行 第三行 \r\n ` fmt.Println(str) 
 
-  
 
-  
-  Go语言的字符有以下两种: -  一种是 uint8 类型,或者叫 byte 型,代表了 ASCII 码的一个字符。 -  在 ASCII 码表中,A 的值是 65,使用 16 进制表示则为 41,所以下面的写法是等效的: var ch byte = 65 或 var ch byte = '\x41' //(\x 总是紧跟着长度为 2 的 16 进制数) 另外一种可能的写法是 \后面紧跟着长度为 3 的八进制数,例如 \377
 
-  
-  另一种是 rune 类型,代表一个 UTF-8 字符,当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型等价于 int32 类型 -  Go语言同样支持 Unicode(UTF-8),因此字符同样称为 Unicode 代码点或者 runes,并在内存中使用 int 来表示。在文档中,一般使用格式 U+hhhh 来表示,其中 h 表示一个 16 进制数。 
-  在书写 Unicode 字符时,需要在 16 进制数之前加上前缀 \u或者\U。因为 Unicode 至少占用 2 个字节,所以我们使用 int16 或者 int 类型来表示。如果需要使用到 4 字节,则使用\u前缀,如果需要使用到 8 个字节,则使用\U前缀。
 
-  
-  var ch int = '\u0041' var ch2 int = '\u03B2' var ch3 int = '\U00101234' fmt.Printf("%d - %d - %d\n", ch, ch2, ch3) // integer fmt.Printf("%c - %c - %c\n", ch, ch2, ch3) // character fmt.Printf("%X - %X - %X\n", ch, ch2, ch3) // UTF-8 bytes fmt.Printf("%U - %U - %U", ch, ch2, ch3) // UTF-8 code point-  格式化说明符 %c用于表示字符,当和字符配合使用时,%v或%d会输出用于表示该字符的整数,%U输出格式为 U+hhhh 的字符串
-  Unicode 包中内置了一些用于测试字符的函数,这些函数的返回值都是一个布尔值,如下所示(其中 ch 代表字符): -  判断是否为字母:unicode.IsLetter(ch) 
-  判断是否为数字:unicode.IsDigit(ch) 
-  判断是否为空白符号:unicode.IsSpace(ch) 
 
-  
 
-  
 
-  
-  类型 B 的值 = 类型 B(类型 A 的值) -  valueOfTypeB = typeB(valueOfTypeA) 
 
-  
-  指针(pointer)在Go语言中可以被拆分为两个核心概念: -  类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 
-  切片,由指向起始元素的原始指针、元素数量和容量组成 
-  每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用在变量名前面添加 &操作符(前缀)来获取变量的内存地址(取地址操作)-  ptr := &v // v 的类型为 T -  其中 v 代表被取地址的变量,变量 v 的地址使用变量 ptr 进行接收,ptr 的类型为 *T,称做 T 的指针类型,*代表指针
 
-  
-  量、指针和地址三者的关系是,每个变量都拥有地址,指针的值就是地址 
-  取地址操作符 &和取值操作符*是一对互补操作符,&取出地址,*根据地址取出地址指向的值
-  变量、指针地址、指针变量、取地址、取值的相互关系和特性如下: -  对变量进行取地址操作使用 &操作符,可以获得这个变量的指针变量。
-  指针变量的值是指针地址。 
-  对指针变量进行取值操作使用 *操作符,可以获得指针变量指向的原变量的值。
 
-  
-  Go语言还提供了另外一种方法来创建指针变量 -  new(类型) 
 
-  
-  堆(heap):堆是用于存放进程执行中被动态分配的内存段。它的大小并不固定,可动态扩张或缩减。当进程调用 malloc 等函数分配内存时,新分配的内存就被动态加入到堆上(堆被扩张)。当利用 free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减); 
-  栈(stack):栈又称堆栈, 用来存放程序暂时创建的局部变量,也就是我们函数的大括号 { }中定义的局部变量。
-  在Go语言中,你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。 -  显式类型定义: const b string = "abc" 
-  隐式类型定义: const b = "abc" 
 
-  
 
-  
 
-  
 
-