Go语言初步入门

237 阅读8分钟

Go语言入门

学习内容视频来源慕课网GO语言语法入门篇,这是入门篇,下次总结学习进阶篇。这里面并没有代码说明,只是理论上的只是

Go语言特点

  • 静态类型的、编译型的开源语言
  • 脚本化的语法,支持多种编程范式->函数式编程&面向对象编程
  • 原生、给力的并发编程支持

Go语言优势

  • 脚本化的语法。非常容易的编程Go语言程序
  • 静态类型+编译型,程序运行速度有保障
  • 原生的支持并发编程。降低开发法、维护成本;程序可以更好的执行

Go语言劣势

  • 语法糖没有Python和Ruby多
  • 目前程序的运行速度还不及C
  • 第三方函数库暂时没有绝对主流的编程语言多

Go基本规则

工作区&GOPATH

工作区是存放Go源码文件的目录,命令源码不一定放到工作区中

  • src目录:存放源码文件以代码包为组织形式
  • pkg目录:存放归档文件(以.a为后缀的文件)
  • 平台相关目录:两个隐含的Go语言环境变量:GOOS和GOARCH
  • bin目录:存放当前工作区中的Go程序的可执行文件

源码文件的分类和含义

Go源码文件

  • 以.go为后缀的,内容以Go语言代码组织的文件,多个Go源码文件是以代码包组织起来
  • 分三类
    • 命令源码文件:声明自己属于main代码包、包含无参数声明和结果声明的main函数 Go语言程序的入口
    • 库源码文件:一般源码文件
    • 测试源码文件 辅助源码文件:名称以Test或Benchmark为前缀

代码包

作用:编译和归档Go程序的最基本单位;代码划分、集结和依赖的有效组织形式,也是权限控制的辅助手段

规则:一个代码包实际上是一个由导入路径代码的目录

声明:每个源码文件必须声明其所属的代码包

初始化:无参数声明和结果声明的init函数

Go命令行工具介绍

go build:用于编译源码文件、代码包、依赖包;

go run:可以编译并运行Go源码文件

go get:动态获取远程代码包

Go语言基础语法

关键字

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

标识符

append bool byte cap close complex
complex64 complex128 uint16 copy false float32
float64 imag int int8 int16 uint32
int32 int64 iota len make new
nil panic uint64 print println real
recover string TRUE uint uint8 uintprt

注释

  • 注释形式
    • 单行注释 //当行注释
    • 多行注释 /* */
  • 基础结构
    • 程序package,导包、常亮定义、一般类型、结构类型、接口声明、函数定义

package

  • package是最基本的分发单位和工程管理中的依赖关系的体现
  • 每个Go语言源代码文件开头都拥有一个package声明,表示源码文件所属的代码包
  • 要生成Go语言可执行程序,必须要有main的package包,且必须在该包下由main()函数
  • 同一个路径下只能存在一个package,一个package可以拆分多个源文件组成

import

  • import语句可以导入源码文件所依赖的package包
  • 不得导入源码文件中没有用到的package包,否则Go语言编译器会报编译错误

imprt原理

  • 如果一个main包导入其他包,包将被顺序导入;
  • 如果导入的包中依赖其他包,会首先导入其他包,然后初始化其他包中的常量和变量,最后如果其他包中有init(),会自动执行init()
  • 所有包导入完成后才会对main函数中的常量和变量进行初始化,然后执行main中的init函数(如果存在),最后执行main函数
  • 如果一个包被导入多次则该包只会被导入一次

数值类型,字符类型和布尔型

整型、浮点型、复数、字符串和布尔型:布尔型的值只可以是true或者false。字符串类型string,编码为统一的utf-8

序号 类型和描述
1 uint8(无符号8位整型0-255)
2 uint16(无符号16位整型0-65535)
3 uint32(无符号32位整型)
4 uint64(无符号64位)
5 int8(有符号8位-128到127)
6 int16
7 int32
8 int64
序号 类型和描述
1 float32
2 float64
3 complex64
4 complex128
序号 类型和描述
1 byte
2 rune
3 uint
4 int
5 uintptr(用于存放指针)

派生类型

  • 指针类型(Pointer)
  • 数组类型
  • 结构化类型(struct)
  • Channel类型(chan)
  • 函数类型(func)
  • 切片类型(slice)
  • 接口类型(interface)
  • Map类型(map)

类型零值和类型别名

  • 类型零值不是空值,而是某个变量被声明后的默认值,一般情况下,值类型的默认值为0,布尔类型默认值为false,string默认值为空字符串
  • 可以对类型设置别名

类型存储大小

慕课网图片

Go语言数据类型

变量声明、初始化和赋值

  • 单个变量声明和赋值

    • 变量声明格式:var <变量名称> [变量类型]

    • 变量赋值格式:<变量名称> = <值、表达式、函数等>

    • 声明和赋值同时进行:var <变量名称> [变量类型] = <值、表达式、函数等>

    • 分组声明格式:

      var (
      	i int 
          j float32
          name string
      )
      
  • 同一行声明多个变量和赋值: var a, b, c int = 1, 2, 3 或者a, b := 1, 2

  • 全局变量的声明必须使用var关键词,局部变量可以省略

  • 特殊变量下划线“_”:

  • Go中不存在隐式转换,类型转换必须是显示的

  • 类型转换只能发生在两种兼容类型之间

  • 类型转换格式: <变量名称> [:] = <目标类型> (<需要转换的变量>)

变量可见性规则

  • 大写字母开头的变量是可导出的,也就是其他包可以读取的,是公用变量
  • 小写字母开头的变量是不可导出的,是私有变量

常量,常量声明和iota的使用

常量定义形式和常量类型范围

  • 常量定义从形式上可分为显式和隐式
    • 显式:const identifier [type] = value
    • 隐式:const identifier = value (通常叫做无类型常量)
  • 常量可以使用内置表达式定义:len(), unsafe.Sizeof()
  • 常量范围目前只支持布尔型男、数字型和字符型

特殊变量iota的使用

  • ioat在关键字const关键字出现时将被重置为0
  • 在const中每新增一行常量声明将被使iota计数一次
  • iota常见使用法:
    • 跳值使用法
    • 插队使用法
    • 表达式隐式使用法
    • 单行使用法

Go语言运算符

算术运算符

Go语言不能使用--a和++a这种方式

  • *
  • /
  • %

关系运算符

  • == 检查两个操作数的值是否相等,如果相等,则条件为真,否则为假
  • != 检查两个操作数的值是否相等,如果值不相等,则条件为真,否则为假
  • > 检查左操作数的值是否大于右操作数的值,如果是,则条件为真,否则为假
  • < 检查左操作数的值是否小于右操作数的值,如果是,则条件为真,否则为假
  • >= 检查左操作数的值是否大于或者等于右操作数的值,如果是,则条件为真,否则为假
  • <= 检查左操作数的值是否小于或者等于右操作数的值,如果是,则条件为真,否则为假

逻辑运算符

  • && 逻辑与运算符。如果两个操作数都不为零,则条件为真,否则为假
  • || 逻辑或运算符。如果两个操作数中的任何一个非零,则条件为真,否则为假
  • ! 逻辑非运算符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑非运算符将为假

按位运算符

  • & 按位与:都为1则结果为1
  • | 按位或:有一个为1结果为1
  • ^ 按位异或:对应位不同的数值时结果为1
  • << 左移:把数整体向左移动
  • >> 右移:把数整体向右移动

赋值运算符

  • = 表达式的值赋值给一个左值
  • += 相加后再赋值
  • -= 相减后再赋值
  • *= 相乘后再赋值
  • /= 相除后再赋值
  • %= 求余后再赋值
  • <<= 左移后再赋值
  • >>= 右移后再赋值
  • &= 按位与后赋值
  • ^= 按异或后再赋值
  • |= 按位或后赋值

Go语言控制语句

这部分如平常的控制语句一样

条件语句

选择语句

循环语句

控制语句关键词goto、break、continue