【Golang 计划】02 Go 基础一

183 阅读4分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战

Golang 设计大佬设计 Go 语言的核心思想是“Less can be more ”。

主要特征

  • 自带 GC ,自动立即回收

  • 丰富的内置类型

    • 值类型
    • 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    -- 管道
      
  • 函数多返回值

  • 错误处理

    内置 error 接口

    type error interface { //只要实现了Error()函数,返回值为String的都实现了err接口
          Error()    String
    }
    
  • 匿名函数和闭包

  • 类型和接口

  • 并发编程

  • 反射

  • 语言交互性, 支持和 C 语言混合编程

Go 文件名

所有的 go 源码都以 “.go” 为文件的扩展名

命名规则

函数,变量,常量,自定义类型,包的命名规则

  • 首字母可以是任何 Unicode 字符或者下划线
  • 剩余字母可以是 Unicode 字符串,下划线,数字
  • 字符长度不限

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

37个保留字

Constants:  true  false iota  nil
​
Types:  int int8 int16 int32
        unit unit8 uint16 uint32
        float32 float64 complex128  complex64
        bool  byte  rune  string  error
        
Functions:  make len  cap new append  copy close  delete  
            complex real  imag  
            panic  recover
            

可见性

  • 声明在函数内部,是函数的本地指,类似 private
  • 声明在函数外部,是对当前包可见的全局值,包内所有的 go 文件都可见,类似 protect
  • 声明在函数外部且首字母大写是所有包可见的全局值,类似 public

语言声明

  • var 变量声明
  • const 常量声明
  • type 类型声明
  • func 函数声明
  • package 包声明

项目构建与编译

src:源代码文件
pkg:包文件
bin:相关 bin 文件

常用的命令:

  • go get 获取指定的代码包及其依赖包,并对它们进行编译安装
  • go run 编译并运行命令源码的文件
  • go build 编译我们指定的源码文件或代码包以及它们的依赖包
  • go install 用于编译并安装指定的代码包以及依赖包,系统会到GOPATH的src目录中寻找abc_name目录,然后编译其下的go文件;
  • go test 用于对程序进行单元测试
  • go env 打印 Go 语言的环境信息
  • go list 列出指定的代码包信息
  • go fix 将指定代码包的就版本的文件修正为新版本的代码
  • go vet 检查源码中静态错误的简单工具
  • go tool pprof 命令来交互式的访问概要文件的内容

内置函数

  • 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 包

init 函数和 main 函数

init 函数

初始化包时使用 init 函数。

  • 程序执行之前进行包初始化的函数,如:初始化包里变量
  • init 函数的不能被调用,是在main 函数执行之前,自动被调用
  • 一个包可以有多个 init 函数,但执行顺序没有明确定义,一般都认为是至上而下顺序执行
  • 每个 Go 源文件都可以有 init 函数
  • 不同包的 init 函数执行顺序都按照依赖关系决定

main 函数

Go 语言程序的默认主函数,无参数

init 函数 与 main 函数区别

  • 相同:无参数,也没有返回值,都是 Go 程序自动调用

  • 不同:

    • init 函数可以重复定义,各个包都可以使用
    • main 函数只能在 main 包中,且有且只能一个 main 函数
  • \