Golang方向
-
区块链
-
go服务器端 (后台流量支撑程序)
支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标 (qps, latency 中)等功能
-
游戏软件(数据平台)
-
golang分布式/云计算/云服务
如何快速深入学习新技术 or 知识点
我们有一个需求
- 项目开发时,我们需要解决某个问题
- 跳槽,学习新技术
先看现有技术是否可以解决
传统方法可以,但不够好
使用新技术 ajax
解决快速入门问题
1. 学习基本原理 和 基本语法
快速入门案例
案例要求:
1. 简单
2. 了解新技术 or 知识点的 基本适用
3. 不涉及 技术细节
讨论新技术/知识点 的细节(这里非常考察程序员的水平)
1. 怎么使用规范
2. 使用陷阱
3. 使用时,需要注意什么
小节
编程通识基本概念
什么是程序
完成某个功能指令的集合。
编写源代码
Write source code
源代码编译 得到 二进制可移植性文件
Compile source code to obtain binary portability files
类比 理解
什么是指令
程序是 一系列 有序 指令的集合。
Go语言发展史
核心开发人员
Ken Thompson: C语言 和 B语言 发明人
Rob Pike: Unix团队成员, BEll Labs
Rovert Griesemer: Java的HotSpot编辑器,Chrome浏览JS
长处
可以合理利用多核多CPU
风格统一
计算能力增强
处理大并发
C/C++ 运行快,但是编译慢,而且内存泄露
时间
2007开始
2009 开源
2015 1.5版本
2018 Go 1.10
Go特点
Go = C + Python
继承 C, 存在 参数调用 和 指针
- 指针
func testPtr(num *int) {
*num =20
}
- 包的概念
Go 语言的—个文件都要归属于—个包,而不能单独存在。
-
垃圾回收机制
内存自动回收 -
天然并发
goruitine 轻量级线程, 实现 大并发处理
局域CPS并发模型 Communicating Sequential Processes实现 -
管道通信机制
channel 实现 goroute 之间相互通信 -
函数返回多值
-
切边slice 和 延时执行defer
编辑器
VS code
Sublime Text
Vim
Emacs
环境搭建 + 安装SDK(Mac)
bashrc配置环境变量路径
我用的是bash
所以打开根目录下的bashrc添加go的路径就好了
下面只是一个例子,具体的路径,需要你在自己电脑上找
source 一下bashrc
检查是否安装成功
go version
简单程序入门
开发一个hello.go 程序
开发步骤
目录结构
写程序
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
执行文件
go run hello.go
或者先
go build hello.go
再
./hello
如果要指定文件名
go build -o myhello.exe hello.go
Golang执行流程
如果是对源码编译后,再执行,Go的执行流程如下图
如果我们是对源码直接执行 go run 源码,Go 的执行流程如下图
在VScode编写项目
配置go.mod
要在你创建的project下,通过
go mod init 项目名
生成一个go.mod配置
用于管理模块依赖关系的文件
模块路径(Module Path):go.mod 文件中包含了当前项目的模块路径,模块路径是项目在代码仓库中的唯一标识符,通常以域名逆序形式(例如 github.com/user/project)。
依赖项管理:go.mod 文件列出了项目所依赖的其他模块以及它们的版本信息。这些依赖项通常包括项目引用的外部库。Go 模块系统会确保依赖项的版本不会与其他依赖项冲突,以确保构建稳定的代码。
版本信息:对于每个依赖项,go.mod 文件记录了所使用的版本号或版本范围,以确保项目在不同的构建之间具有一致的依赖关系。
自动依赖管理:Go 模块系统允许开发者引入新的依赖项,同时自动更新 go.mod 文件,以确保依赖项版本的一致性。
改成下面可以通过vscode看到输出结果
package main
// import "fmt" //fmt包中提供格式化,输出,输入的函数。
import (
"log"
)
func main() {
// fmt.Println("Hello, world!")
log.Println("Hello world!")
log.Println("tom\tjack")
}
转义字符
\t 制表符
\n 换行符
\r 回车
改进,并增加 测试 两个输出的
package main
import (
"log"
"fmt" //fmt包中提供格式化,输出,输入的函数。
)
func getVal(num1 int, num2 int) (int, int) {
sum := num1 + num2
sub := num1 - num2
return sum, sub
}
func main() {
// fmt.Println("Hello, world!")
log.Println("Hello world!")
log.Println("tom\tjack")
// log.Println("天龙八部\r张飞")
fmt.Println("天龙八部\r张飞")
// a, b := getVal(1, 2)
a, b := getVal(1, 2)
fmt.Println("Sum:", a)
fmt.Println("Subtraction:", b)
var str1 = "hello1"
var str2 = "world2"
fmt.Println(str1 + str2)
}
常见问题
文件名 和 路径问题
The system cannot find the file specified.
官网Doc
https://go.dev/learn/
https://go.dev/tour/welcome/1
中文文档
https://studygolang.com/pkgdoc
API
application program interface
包的应用的各个接口
数据类型
data type
基本数据类
整数类型
int
int8 (1个字节)
int16 (2个字节)
int32 (4个字节)
int64 (8个字节)
有符号
推导
第一位用来表示符号位
其余用来表示数值大小
所以 int8
是 -2的7次方 到 2 七次方-1
无符号
int其他类型
浮点类型
float32
float64
字符型
没有,用bye 保存单个字符
布尔型
bool
字符串
string
byte unit8的别名
rune int32的别名