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

Go语言由谷歌三位大牛开发,具有垃圾回收、天然并发等特性,被广泛应用于Docker等项目。Go的基本概念包括包、标识符、关键字、变量、常量等,程序结构遵循特定规则。其数据类型包括布尔、整型、浮点型和字符串等,支持多种进制表示。Go的操作符涵盖算术、关系、逻辑和赋值等方面,还拥有强大的并发处理能力。Go语言的流程控制、函数和闭包机制丰富,是程序员想要学习的热门语言之一。
摘要由CSDN通过智能技术生成
  • 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成为可能

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

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

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

c. ⽀持任何类型

  • 多返回值

a. ⼀个函数返回多个值

  • 编译型语⾔

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

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

Go 程序基本结构

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

package main 
import “fmt” 
func main() {
  fmt.Println(“hello, world”) 
}

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

var a int
var b string
var c bool
var d int = 8
var e string = “hello”

或者是:

var (
 a int //0
 b string //“”
 c bool //false
 d int = 8 // 8
 e string = “hello” //hello
)
  • 常量

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

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

更加优雅的写法:

const(
 a = 1
 b = 2
 c = 3
)

更加专业的写法:

const (
 a = iota
 b
 c
)
const(
 a = 1 << iota
 b
 c
)

GO 语言数据类型 与 操作符

  • 数据类型

a. 布尔类型

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

golang fmt包 Printf方法详解

General
%v 以默认的方式打印变量的值
%T 打印变量的类型

Integer
%+d 带符号的整型,fmt.Printf("%+d", 255)输出+255
%q 打印单引号
%o 不带零的八进制
%#o 带零的八进制
%x 小写的十六进制
%X 大写的十六进制
%#x 带0x的十六进制
%U 打印Unicode字符
%#U 打印带字符的Unicode
%b 打印整型的二进制

Float
%f (=%.6f) 6位小数点
%e (=%.6e) 6位小数点(科学计数法)
%g 用最少的数字来表示
%.3g 最多3位数字来表示
%.3f 最多3位小数来表示

String
%s 正常输出字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值