当前位置:   article > 正文

一文掌握GO语言实战技能(一) - 万字长文

golang技能树
  • GO 基本介绍

  • GO 基本概念

  • GO 语言特性

  • GO 程序的基本结构

  • GO 标识符 关键字 变量 常量

  • GO 数据类型

  • GO 操作符 与 日期

  • GO 流程控制

  • GO 函数介绍

  • GO 闭包的介绍

Go 基本介绍

Go 语言诞生于谷歌,由计算机领域的三位宗师级大牛 Rob Pike、Ken Thompson 和 Robert Griesemer 写成。由于出身名门,Go 在诞生之初就吸引了大批开发者的关注。诞生十年以来,已经涌出了很多基于 Go 的应用。就在不多久之前,知乎也舍弃了 Python,转 用Go 重构推荐系统 。

谷歌前员工 Jake Wilson 认为,比起大家熟悉的 Python,Go 语言其实有很多优良特性,很多时候都可以代替 Python,他已经在很多任务中使用 Go 语言替代了 Python。那么 Go 语言到底有着什么样的独特魅力 ?让我们一起来了解一下吧!

对于一门只有十年历史的新语言,Go 的发展势头相当迅猛,容器界的扛把子 Docker 就是用 Go 写的,国内也有不少团队广泛使用 Go。近日,HackerRank 在社区发起了程序员技能调查,来自 100 多个国家、超过 70000 名开发者参与其中。调查结果显示,2019 年,程序员最想学习的编程语言 Top 3 分别是 Go、Kotlin 和 Python,其中 Go 以 37.2% 的比例排在首位。

但 Go 要想撼动编程界的常青树 Java 二十多年的地位无疑难度颇大。据 HackerRank 数据显示,2018 年,Java 在开发者最受欢迎的编程语言排行榜中仍然排名第 2,Python 排名第 4,Go 排名第 13,距离第一名 JavaScript 还有不小的差距。

GO 基本概念

  • Golang 目录结构划分

a. 个人项目

b. 公司项目

  • 包的概念

a. 和python⼀样,把相同功能的代码放到⼀个⽬录,称之为包

b. 包可以被其他包引⽤

c. main包是⽤来⽣成可执⾏⽂件,每个程序只有⼀个main包

d. 包的主要⽤途是提⾼代码的可复⽤性

  • 基本命令的介绍

a. go run 快速执⾏go⽂件,就像执⾏脚本⼀样

b. go build 编译程序,⽣成⼆进制可执⾏⽂件

c. go install 安装可执⾏⽂件到bin⽬录

d. go test 执⾏单元测试或压⼒测试

e. go env 显示go相关的环境变量

f. go fmt 格式化源代码

  • GO 程序的结构

a. go源码按package进⾏组织,并且package要放到⾮注释的第⼀⾏

b. ⼀个可执⾏程序只有⼀个main包和⼀个main函数

c. main函数是程序的执⾏⼊⼝

GO 语言特性

  • 垃圾回收

a. 内存⾃动回收,再也不需要开发⼈员管理内存

b. 开发⼈员专注业务实现,降低了⼼智负担

c. 只需要new分配内存,不需要释放,golang语⾔特性

  • 天然并发

a. 从语⾔层⾯⽀持并发,⾮常简单。只需要go⼀下

b. goroutine,轻量级线程,创建成千上万个goroute成为可能

  1. func calc() {  //⼤量计算 } 
  2. func main() {  go calc() }
  • channel

a. 管道,类似unix/linux中的pipe

b. 多个goroute之间通过channel进⾏通信

c. ⽀持任何类型

  • 多返回值

a. ⼀个函数返回多个值

  • 编译型语⾔

a. 性能只⽐C语⾔差10%

b. 开发效率和python、php差不多

Go 程序基本结构

a. 任何⼀个代码⽂件⾪属于⼀个包

  1. package main 
  2. import “fmt” 
  3. func main() {
  4.   fmt.Println(“hello, world”) 
  5. }

b. import 关键字,引⽤其他包

c. 开发可执行程序,package main, 并且有且只有⼀个main⼊⼝函数

d. 包中函数调⽤

同一个包中函数,直接用函数名调, 不同包中函数,通过包名+点+ 函数名进⾏调⽤

e. 包访问控制规则

大写意味着这个函数/变量是可导出,小写意味着这个函数/变量是私有的,包外部不能访问

GO 标识符 关键字 变量 常量

  • 标识符

标识符是指Go语言对各种变量、方法、函数等命名时使用的字符序列,标识符由若干个字母、下划线_、和数字组成,且第一个字符必须是字母。通俗的讲就是凡可以自己定义的名称都可以叫做标识符。

下划线_是一个特殊的标识符,称为空白标识符,它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用_作为变量对其它变量进行赋值或运算。

在使用标识符之前必须进行声明,声明一个标识符就是将这个标识符与常量、类型、变量、函数或者代码包绑定在一起。在同一个代码块内标识符的名称不能重复。

标识符的命名需要遵守以下规则:

a. 由 26 个英文字母、0~9、_组成;

b. 不能以数字开头,例如 var 1num int 是错误的;

c. Go语言中严格区分大小写;

d. 标识符不能包含空格;

d. 不能以系统保留关键字作为标识符,比如 break,if 等等。

命名标识符时还需要注意以下几点:

a. 标识符的命名要尽量采取简短且有意义;

b. 不能和标准库中的包名重复;

c. 为变量、函数、常量命名时采用驼峰命名法,例如 stuName、getVal;

当然Go语言中的变量、函数、常量名称的首字母也可以大写,如果首字母大写,则表示它可以被其它的包访问(类似于 Java 中的 public);如果首字母小写,则表示它只能在本包中使用 (类似于 Java 中 private)。

在Go语言中还存在着一些特殊的标识符,叫做预定义标识符,如下表所示:

预定义标识符一共有 36 个,主要包含Go语言中的基础数据类型和内置函数,这些预定义标识符也不可以当做标识符来使用。

了解规则后,判断下面标识符哪个是错误的:

A. 88ab(错)    B. _ab28     C. ab_28

  • 关键字

关键字是Go语⾔预先定义好的,有特殊含义的标识符。共25 个。

  • 变量

语法:var identifier type

  1. var a int
  2. var b string
  3. var c bool
  4. var d int = 8
  5. var e string = “hello”

或者是:

  1. var (
  2.  a int //0
  3.  b string //“”
  4.  c bool //false
  5.  d int = 8 // 8
  6.  e string = “hello” //hello
  7. )
  • 常量

常量使⽤const 修饰,代表永远是只读的,不能修改。语法:const identifier [type] = value,其中type可以省略。

  1. 举例: const b string = “hello world”
  2. const b = “hello world”
  3. const Pi = 3.1414926
  4. const a = 9/3

更加优雅的写法:

  1. const(
  2.  a = 1
  3.  b = 2
  4.  c = 3
  5. )

更加专业的写法:

  1. const (
  2.  a = iota
  3.  b
  4.  c
  5. )
  6. const(
  7.  a = 1 << iota
  8.  b
  9.  c
  10. )

GO 语言数据类型 与 操作符

  • 数据类型

a. 布尔类型

  1. a. var b boolvar b bool = truevar b = false ,默认false
  2. b. 操作符 == 和 != 相等性判断
  3. c. 取反操作符:!b 数据类型和操作符
  4. d. && 和 || 操作符 与或
  5. e. 格式化输出占位符: %t fmt.Println("%t %t\n",a, b)

golang fmt包 Printf方法详解

  1. General
  2. %v 以默认的方式打印变量的值
  3. %T 打印变量的类型
  4. Integer
  5. %+d 带符号的整型,fmt.Printf("%+d", 255)输出+255
  6. %q 打印单引号
  7. %o 不带零的八进制
  8. %#o 带零的八进制
  9. %x 小写的十六进制
  10. %X 大写的十六进制
  11. %#x 带0x的十六进制
  12. %U 打印Unicode字符
  13. %#U 打印带字符的Unicode
  14. %b 打印整型的二进制
  15. Float
  16. %f (=%.6f) 6位小数点
  17. %e (=%.6e) 6位小数点(科学计数法)
  18. %g 用最少的数字来表示
  19. %.3g 最多3位数字来表示
  20. %.3f 最多3位小数来表示
  21. String
  22. %s 正常输出字符串
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/992395?site
推荐阅读
相关标签
  

闽ICP备14008679号