学习笔记 - Go - 简介
Posted 欧阳青星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记 - Go - 简介相关的知识,希望对你有一定的参考价值。
Go 特点:
Go 语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。主要目标是“兼具 Python 等
动态语言的开发速度和 C/C++ 等
编译型语言的性能与安全性”(
快速编译,高效执行,易于开发)。
可访问
底层操作系统
,提供了强大的
网络编程
和
并发编程
支持。
Go 与 C 的区别:
1. 去掉循环冗余括号。for (int i = 0 ; i < 10 ; i++) 变为 for i := 0 ; i < 10 ; i++。
2. 去掉表达式冗余括号。if (表达式) 变为 if 表达式。
3. 强制代码风格。左括号不能在单独的行上,无需分号换行。
4. 强制自增方式。只能写作 i++,其他情况视作编译错误。
Go 项目目录结构:
- src:放置项目和库的源文件。
- pkg:放置编译后生成的包/库的归档文件。
- bin:放置编译后生成的可执行文件。
静态语言与动态语言区别:
|
编译前确定
变量的
类型
|
类型匹配检查
|
优缺点
|
例子
|
静态语言
|
使用变量前
需要声明
|
有
|
IDE有较强的校验能力,对开发有保障;
第三方代码对代码侵害性低;
|
C、C++、C#、Go、
Java(先编译成.class再由JVM解释)
|
动态语言
|
使用变量前
不需要声明
|
无,自带多态
|
代码简洁可读性高,某些场景下可读性低;
|
Python、Ruby、javascript
|
编译型语言和解释型语言:
|
特点
|
优缺点
|
例子
|
编译型语言
|
解释器一句一句“翻译”成机器语言来一句一句执行
|
执行速度快,内存开销小,调试排错帮助小,文件大,安全性低,依赖平台,难实现
|
C、C++、Go
|
解释型语言
|
编译器来编译成机器语言,然后可直接运行这个编译成的“可执行文件”
|
和上者相反
|
Java、Python、JavaScript
|
Go 语言的项目:Qt、K8s、Docker。
Go 语言与 C 语言的性能差距大概在 10%~20% 之间。
IDE 推荐 JetBrains 的
Goland。
指令:
- go run hello.go 执行代码
- go build hello.go 生成二进制文件
想要构建一个项目,就需要将这个项目的目录添加到 GOPATH 中,多个项目之间可以使用;分隔。
可以说,Goroutine 是 Go 最显著的特征。它用类协程的方式来处理并发单元,却又在运行时层面做了更深度的优化处理。这使得语法上的并发编程变得极为容易,无须处理回调,无须关注线程切换,仅一个关键字,简单而自然。
虽然一些编程语言的框架在不断地提高多核资源使用效率,例如 Java 的 Netty 等,但仍然需要开发人员花费大量的时间和精力搞懂这些框架的运行原理后才能熟练掌握。
作为程序员,要开发出能充分利用硬件资源的应用程序是一件很难的事情。现代计算机都拥有多个核,但是大部分编程语言都没有有效的工具让程序可以轻易利用这些资源。编程时需要写大量的线程同步代码来利用多个核,很容易导致错误。
Go 语言正是在多核和网络化的时代背景下诞生的原生支持并发的编程语言。Go 语言从底层原生支持并发,无须第三方库,开发人员可以很轻松地在编写程序时决定怎么使用 CPU 资源。
Go 环境目录结构:
目录名
|
说明
|
api
|
每个版本的 api 变更差异
|
bin
|
Go 源码包编译出的编译器(Go)、文档工具(godoc)、格式化工具(gofmt)
|
doc
|
英文版的 Go 文档
|
lib
|
引用的一些库文件
|
misc
|
杂项用途的文件,例如
Android 平台的编译、git 的提交钩子等
|
pkg
|
Windows 平台编译好的中间文件
|
src
|
标准库的源码
|
test
|
测试用例
|
Go 标准库:
Go语言
标准库包名
|
功 能
|
bufio
|
带缓冲的 I/O 操作
|
bytes
|
实现字节操作
|
container
|
封装堆、列表和环形列表等容器
|
crypto
|
加密算法
|
database
|
数据库驱动和接口
|
debug
|
各种调试文件格式访问及调试功能
|
encoding
|
常见算法如 JSON、XML、Base64 等
|
flag
|
命令行解析
|
fmt
|
格式化操作
|
go
|
Go 语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改
|
HTML 转义及模板系统
| |
image
|
常见图形格式的访问及生成
|
io
|
实现 I/O 原始访问接口及访问封装
|
math
|
数学库
|
net
|
网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等
|
os
|
操作系统平台不依赖平台操作封装
|
path
|
兼容各操作系统的路径操作实用函数
|
plugin
|
Go 1.7 加入的插件系统。支持将代码编译为插件,按需加载
|
reflect
|
语言反射支持。可以动态获得代码中的类型信息,获取和修改变量的值
|
regexp
|
正则表达式封装
|
runtime
|
运行时接口
|
sort
|
排序接口
|
strings
|
字符串转换、解析及实用函数
|
time
|
时间接口
|
text
|
文本模板及 Token 词法器
|
以上是关于学习笔记 - Go - 简介的主要内容,如果未能解决你的问题,请参考以下文章