Go语言初步入门

本文介绍了Go语言的基础知识,包括语言特点、基本规则、命令行工具及基础语法等内容。Go是一种静态类型的、编译型的开源语言,支持函数式编程与面向对象编程,并具备出色的并发编程能力。

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语言基础语法

关键字

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
contineforimportreturnvar

标识符

appendboolbytecapclosecomplex
complex64complex128uint16copyfalsefloat32
float64imagintint8int16uint32
int32int64iotalenmakenew
nilpanicuint64printprintlnreal
recoverstringTRUEuintuint8uintprt

注释

  • 注释形式
    • 单行注释 //当行注释
    • 多行注释 /* */
  • 基础结构
    • 程序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

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

派生类型

  • 指针类型(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值