[ 初学go | 青训营笔记 ]

136 阅读7分钟

[ 初学go | 青训营笔记 ]

一、Go 语言介绍

Go 语言(或 Golang)是 Google 2009 年首次开源,并在 2012 年正式发布 Go 稳定版的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去10多年间软件开发的难度令人沮丧。Google 对 Go 寄予厚望,其设计是让软件充分发挥 多核心处理器同步多工 的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助开发者处理琐碎但重要的内存管理问题。Go 的速度也非常快,几乎和 C 或 C++ 程序一样快,且能够快速开发应用程序。

 

Go(又称 Golang)一种 静态强类型、编译型 语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

 

二、Go 语言基础

  1. Go 文件名

所有的go源码都是以 “.go” 结尾。

 

  1. Go标记

Go 程序由多个标记组成,包括关键字,标识符,常量,字符串,符号。

例如,以下 GO 语句由 6 个标记组成:

 

fmt.Println("Hello, World!")

//一行是一个标记,共6个标记

 fmt

 .

Println

(

 "Hello, World!"

 )

 

  1. 关键字

Go只有25个关键字:

break        default      func         interface    select

case         defer        go           map          struct

chan         else         goto         package      switch

const        fallthrough  if           range        type

continue     for          import       return       var

Go还有37个保留字:

Constants:    true  false  iota  nil

 

Types:    int  int8  int16  int32  int64  

          uint  uint8  uint16  uint32  uint64  uintptr

          float32  float64  complex128  complex64

          bool  byte  rune  string  error

 

Functions:   make  len  cap  new  append  copy  close  delete

             complex  real  imag

             panic  recover

程序一般由关键字、变量、常量、运算符、类型和函数组成。
程序中可能会使用到这些分隔符:括号 (),中括号 [] 和大括号 {}。
程序中可能会使用到这些标点符号:. , ; : …

 

  1. 标识符

标识符用来 命名 变量、类型等程序实体。一个标识符实际上是由一个或是多个字母(大写或小写)、数字(0~9)、下划线_所组成的序列,但是第一个字符必须是字母或下划线而不能是数字。

  1. Go 语言声明:

有四种主要声明方式:

var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)

Go程序保存在多个.go文件中,文件的第一行就是 package XXX 声明,用来说明 该文件属于哪个包(package),package声明下来就是import声明(导入哪些包),再下来是类型,变量,常量,函数的声明。

 

声明的位置决定其作用域:

1)声明在函数内部,是函数的本地值,类似 private

2)声明在函数外部,是对当前包可见(包内所有.go文件都可见)的全局值,类似 protect

3)声明在函数外部且首字母大写是所有包可见的全局值,类似 public

 

  1. 不存在行分隔符

在 Go 程序中,一行代表一个语句结束。

不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。

 

如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。

 

  1. { 不能单独放在一行

表示函数体开始的前花括号“ { ” 不能单独放在一行。

例如,以下代码运行会报错:

package main

 

import "fmt"

 

func main()  

{  // 错误,{ 不能在单独的行上

    fmt.Println("Hello, World!")

}

正确代码:

package main

 

import "fmt"

 

func main() {  //“{”没有单独在一行

   fmt.Println("Hello, World!")

}

 

三、数据类型介绍

        Go 语言中数据类型分为:基本数据类型和复合数据类型

 

        基本数据类型有:整型、浮点型、布尔型、字符串

 

        复合数据类型有:数组、切片、结构体、函数、map、通道(channel)、接口等。

 

3.1、整数

​        整型分为以下两个大类: 有符号整形按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64

 

%b 二进制

%c 对应的 Unicode 码位所代表的字符

%d 十进制

%o 八进制

%O 八进制,带 0o 前缀

%q 使用 Go 语法安全转义的单引号字符文字。

%x 十六进制,af用小写字母

%X 十六进制,AF为大写字母

%U Unicode 格式:U+1234;与 "U+%04X" 相同

类型 范围 占用空间(字节) 有无符号

int8 (-128到127) -2^7 到2^7-1 1 有

int16 (-32768 到32767) -2^15 到2^15-1 2 有

int32 (-2147483648 到2147483647) 4 有

int64 (-9223372036854775808 到9223372036854775807)
-2^63 到2^63-1 8 有

uint8 (0 到255) 0 到2^8-1 1 无

uint16 (0 到65535) 0 到2^16-1 2 无

uint32 (0 到4294967295) 0 到2^32-1 4 无

uint64 (0 到18446744073709551615) 0 到2^64-1 8 无

关于字节: 字节也叫Byte,是计算机数据的基本存储单位。8bit(位)=1Byte(字节);1024Byte(字节)=1KB;1024KB=1MB 1024MB=1GB 1024GB=1TB 。

 

特殊整型

 

类型 描述

uint 32 位操作系统上就是uint32,64 位操作系统上就是uint64

int 32 位操作系统上就是int32,64 位操作系统上就是int64

uintptr 无符号整型,用于存放一个指针

注意:

 

​        在使用int 和uint 类型时,不能假定它是32 位或64 位的整型,而是考虑int 和uint可能在不同平台上的差异。

 

注意事项:

 

         实际项目中整数类型、切片、map 的元素数量等都可以用int 来表示。在涉及到二进制传输、为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int 和uint。

 

int不同长度直接的转换:

 

package main

import (

    "fmt"

)

func main() {

    var num1 int8

    num1 = 127

    num2 := int32(num1)

    fmt.Printf("值:%v 类型%T", num2, num2) //值:127 类型int32

}

​        Go1.13 版本之后引入了数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字,例如:v := 0b00101101, 代表二进制的101101,相当于十进制的45。v := 0o377,代表八进制的377,相当于十进制的255。v := 0x1p-2,代表十六进制的1 除以2²,也就是0.25。而且还允许我们用_ 来分隔数字,比如说:v := 123_456 等于123456。我们可以借助fmt 函数来将一个整数以不同进制形式展示。

  3.2、浮点型

​        Go 语言支持两种浮点型数:float32 和float64。

 

​        这两种浮点型数据格式遵循IEEE 754 标准:float32 的浮点数的最大范围约为3.4e38,可以使用常量定义:math.MaxFloat32。float64 的浮点数的最大范围约为1.8e308,可以使用一个常量定义:math.MaxFloat64。打印浮点数时,可以使用fmt 包配合动词%f,代码如下:

 

package main

import (

    "fmt"

    "math"

)

func main() {

    fmt.Printf("%v\n", math.Pi) //原样输出

    fmt.Printf("%f\n", math.Pi) //默认保留6 位小数

    fmt.Printf("%.2f\n", math.Pi) //保留2 位小数

}

Go 语言中浮点数64位系统中默认是float64

 

num := 1.1

fmt.Printf("值:%v--类型:%T", num, num) //值:1.1--类型:float64

 

3.3、布尔值

​        Go 语言中以bool 类型声明布尔型数据,布尔型数据只有true(真)和false(假)两个值。

 

注意:

 

布尔类型变量的默认值为false。

 

Go 语言中不允许将整型强制转换为布尔型.

 

布尔型无法参与数值运算,也无法与其他类型进行转换。

 

package main

import (

    "fmt"

    "unsafe"

)

func main() {

    var b = true

    fmt.Println(b, "占用字节:", unsafe.Sizeof(b))

}