0. 感悟
作为一个点点点,如果没有一定的代码能力是非常拉胯的。本人自学了python,学的不咋地,仅仅只能做测试自动化和简单的开发使用,深入了解?自认为达不到;也自学过Go,但当时因为太懒,学到接口觉得太绕,就放弃了。现在市场,测试岗是越来越卷,越来越不好混。本人害怕35岁被优化,所以决定重拾代码,经过几天的考虑,决定重拾go,每一个知识细节都尽量详细描述到博客上,争取保证一周输出2-3篇博客,从0开始细细打磨,磨刀不误砍柴工,希望两年后内能彻底拿下go,加油!!!!!!
1. Go语言的介绍
1. 简介
Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三位大佬于2007年开始设计发明,他们最终的目的是设计一种适应网络和多核时代的C语言。所以Go语言很多时候被描述为“类C语言”,或者是21世纪的C语言。当然从各种角度看,Go语言确实是从C语言继承了相似的表达式语法、控制流程结构、基础数据类型、调用参数传值、指针等诸多编程思想。但是Go语言更是对C语言最彻底的一次扬弃,它舍弃了C语言中灵活但是危险的指针运算,还重新设计了C语言中部分不太合理的运算符的优先级,并在很多细微的地方做了必要的打磨和改变。
Go编程语言是一个使得程序员更加有效率的开源项目,Go是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块化程序。Go编译到机器码非常快速,同时具有便利的垃圾回收和强大的运行时反射。它是快速的、静态类型编译语言,但是感觉上是动态的,解释型语言。
2. 官方文档
(1)网站:https://studygolang.com/pkgdoc
3. Go语言特性
1. 清晰并且简洁
Go努力保持着小并且优美,你可以在几行代码里做许多事情
2. 并行
Go让函数很容易成为非常轻量级的线程,这些线程在go中被叫做goroutines
3. Channel
这些goroutines之间的通讯由channel完成
4. 快速
编译很快,执行也很快。目标是跟C一样快,编译时间用秒计算
5. 安全
当转换一个类型到另一个类型的时候需要显式的转换并遵循严格的规则。Go有垃圾收集。在Go中无须free(),语言会处理这一切
6. 标准格式化
Go程序可以被格式化为程序员希望的(几乎)任何形式,但是官方格式是存在的。标准也非常简单;gofmt的输出就是官方认可的格式
7. 类型后置
类型在变量名后面,像这样var a int,来替代C中的int a
8. UTF-8
任何地方都是UTF-8的,包括字符串以及程序代码,你可以在代码中使用φ = φ+1
9. 开源
Go的许可证是完全开源的,参阅Go发布的源码中的LICENSE文件
10. 开心
用Go写程序会很开心!!!!!!!!!!!!!
4. 备注
文档!!!文档!!!文档!!!想了解底层??那么官方标准库文档可相当重要
找工作时,如果面试官:“Go语言的底层原理是什么?”
你:“下一家!”
5. Go语言特点(总结)
- 继承C语言
- 引入包的概念
- 垃圾回收机制
- 天热并发
- 管道机制
- 函数可以返回多个值
- 切片,延迟执行,结构体,接口
2. Go语言示例(Hello World!)
我的能力 — 精通各种语言基于Hello World的编程
Go的Hello World形式为
package main
import "fmt"
func main(){
fmt.Println("Hello World")
}
go语言的基本组成有:
- 包声明:编写源文件时,必须在非注释的第一行指明这个文件属于哪个包(组织程序结构),如:package main
- 引入包:告诉go编辑器这个程序需要使用的包,如:import “fmt”,就是引入了fmt包
- 函数:和c语言相同,即是一个可以实现某一功能的函数体,每一个可执行程序中必须有一个main函数
- 变量:go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字
- 语句、表达式:在go程序中,一行代表一个语句结束。每个语句不需要像C家族中的其他语言一样以分号结尾,因为这些工作都将由go编译器自动完成
- 注释:和Java注释一样,单行以//开头,多行注释为/* */
- 注:go语言中标识符
(1) 当标识符(包括常量、变量、类型、函数名、结构体字段等)以一个大写字母开头,如:Group1那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需先导入这个包),这种称为导出(像面向对象语言中的public)
(2)标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的protected)
3. 示例2:指针(继承C,但是又不完全继承C)
//在定义这部分只展示格式,具体解释以后再说
package main
func testPtr(num *int){
*num = 20
}
func main(){
}
4. Go发展方向
1. 区块链研发工程师
区块链技术,简称BT,也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录
2. Go服务器端/游戏软件工程师
(1)支撑主站后台流量(排序、推荐、搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)等功能
(2)游戏服务端(通讯、逻辑、数据存储)
Go分布式/云计算软件工程师
(1)调度系统,分发系统,监控系统,短域名服务,内部开放平台,运营报表,以及其他一些小工具等
5. Go SDK安装以及环境变量配置
1. SDK
下载,解压安装
2.环境变量配置
环境变量 | 说明 |
---|---|
GOROOT | 指定SDK安装路径 |
Path | 添加SDK的/bin目录,增加Go的bin:%GOROOT%\bin |
GOPATH | 工作目录,将来我们的go项目路径,新建环境变量 |
1. 文件运行
(1)go build生成.exe文件 —> 执行.exe文件
(2)直接go run