区块链研发
服务端开发
游戏开发
分布式开发
云计算开发
区块链是一种互联网数据库技术,特点是去中心化、公开透明,让每个人可以参与数据库记录。
后台流量(排序、推荐、搜索),负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)
游戏服务端(通讯、逻辑,数据存储)
CDN(内容分发网络)调度,分发、监控系统,短域名服务,分布式文件系统
现有编程语言现状:(1)风格不统一(2)计算能力不够(3)处理大并发不够好
go语言既有静态编译语言的安全和性能又有动态语言开发维护的高效率。Go=c+python
//go语言的指针使用
func testPtr(num *int){
*num = 20
}
package main
//go语言的指针使用
func testPtr(num *int){
*num = 20
}
func main() {
}
垃圾回收机制,内存自动回收,不需要开发人员管理
天然并发(重中之重)
(1)语言层面支持并发,实现简单
(2)goroutine,轻量级线程,可以实现大并发处理,高效利用多核
(3)基于CPS(Communicating Sequential Processes)并发模型实现
吸收了管道通信机制,形成go语言特有的管道channel
通过管道可以实现不同的goroutine之间的通信
函数返回多个值
//一个函数,返回两个数的和和两个数的差
func getSumAndSub(n1 int , n2 int )(int, int){
//go语句后面不用带分号
sum := n1 + n2
sub := n1 - n2
return sum, sub
}
VSCode
(1) 下载SDK工具包
windows 64位使用 go1.9.2.windows-amd64.zip包
下载地址:https://dl.google.com/go/go1.9.2.windows-amd64.zip
注意:安装路径不要有空格、特殊字符或者中文等符号
(2)解压
解压到一个目录下,此处我的目录是
D:\GoSDK\go
(3)检验SDK
PS D:\GoSDK\go\bin> ls
目录: D:\GoSDK\go\bin
Mode LastWriteTime Length Name
---- ------------- ------ ----
------ 2017/10/25 18:32 10254848 go.exe
------ 2017/10/25 18:41 15241728 godoc.exe
------ 2017/10/25 18:32 3404288 gofmt.exe
PS D:\GoSDK\go\bin> .\go version go version go1.9.2 windows/amd64
(3)配置环境变量
环境变量 | 说明 | 具体路径 |
---|---|---|
GOROOT | 指定SDK的安装路径 | D:\GoSDK\go |
Path | 添加SDK的/bin目录 | %GOROOT%\bin |
GOPATH | 工作目录 | D:\GoProject |
(4)检验环境变量的配置
PS C:\WINDOWS\system32> go version
go version go1.9.2 windows/amd64
PS C:\WINDOWS\system32>
package main
import "fmt"
//go语言的指针使用
func testPtr(num *int){
*num = 20
}
//一个函数,返回两个数的和和两个数的差
func getSumAndSub(n1 int , n2 int )(int, int){
//go语句后面不用带分号
sum := n1 + n2
sub := n1 - n2
return sum, sub
}
func main() {
fmt.Println("hello world")
}
(3) 编译运行
PS D:\GoProject\src\project01\main> go build hello.go CreateFile hello.go: The system cannot find the file specified.
PS D:\GoProject\src\project01\main> go build main.go PS D:\GoProject\src\project01\main> ls
目录: D:\GoProject\src\project01\main
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2020/5/17 20:41 1938432 main.exe
-a---- 2020/5/17 20:27 346 main.go
PS D:\GoProject\src\project01\main> .\main.exe
hello world
PS D:\GoProject\src\project01\main>
PS D:\GoProject\src\project01\main> go run main.go hello world
PS D:\GoProject\src\project01\main>
(1)go build 可以指定可执行文件的名字
D:\GoProject\src\project01\main>go build -o myhello.exe main.go
D:\GoProject\src\project01\main>dir
驱动器 D 中的卷是 DATA
卷的序列号是 66F3-62B9
D:\GoProject\src\project01\main 的目录
2020/05/20 14:49 .
2020/05/20 14:49 ..
2020/05/17 20:41 1,938,432 main.exe
2020/05/17 20:27 346 main.go
2020/05/20 14:49 1,938,432 myhello.exe
3 个文件 3,877,210 字节
2 个目录 299,638,734,848 可用字节
(1) Go源文件以.go为扩展名
D:\GoProject\src\project01\main>copy main.go main.c
已复制 1 个文件。
D:\GoProject\src\project01\main>dir
驱动器 D 中的卷是 DATA
卷的序列号是 66F3-62B9
D:\GoProject\src\project01\main 的目录
2020/05/20 15:01 .
2020/05/20 15:01 ..
2020/05/17 20:27 346 main.c
2020/05/17 20:41 1,938,432 main.exe
2020/05/17 20:27 346 main.go
2020/05/20 14:49 1,938,432 myhello.exe
4 个文件 3,877,556 字节
2 个目录 299,638,734,848 可用字节
D:\GoProject\src\project01\main>go build main.c
can't load package: package main.c: cannot find package "main.c" in any of:
D:\GoSDK\go\src\main.c (from $GOROOT)
D:\GoProject\src\main.c (from $GOPATH)
(2) go 语言入口是main函数
(3) 严格区分大小写
(4) 语句后不用分号
(5) 一行一条语句
(6) 定义的变量或者import的包没有用到的话,代码编译不能通过
(7) 大括号成对出现,缺一不可
(1)快速在cmd控制台进入指定的目录
选中要进入的目录的文件路径
(2)直接输入cmd即可
(3)效果
求1-9000000000000之间的素数
有独立的栈空间
共享程序堆空间
调度由用户控制
协程是轻量级的线程
package main
import (
"fmt"
"strconv"
"time"
)
func test() {
for i :=1 ;i <=10 ; i++{
fmt.Println("test: hello, world " + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
func main() {
//开启协程
go test()
for i :=1 ;i <=10 ; i++{
fmt.Println("main: hello, golang " + strconv.Itoa(i))
time.Sleep(time.Second)
}
}
D:\GoProject\src\chapter16\goroutine>go run main.go
main: hello, golang 1
test: hello, world 1
test: hello, world 2
main: hello, golang 2
main: hello, golang 3
test: hello, world 3
test: hello, world 4
main: hello, golang 4
test: hello, world 5
main: hello, golang 5
test: hello, world 6
main: hello, golang 6
test: hello, world 7
main: hello, golang 7
test: hello, world 8
main: hello, golang 8
test: hello, world 9
main: hello, golang 9
test: hello, world 10
main: hello, golang 10
M:操作系统主线程(是物理线程)
P:协程执行需要的上下文
G:协程
加粗文本 加粗文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
一个简单的表格是这么创建的:
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。1
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎