Golang

一、开篇

1、学习方向

Go语言,我们可以简单的写成 Golang

2、应用领域

1.区块链应用

区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录

2.后端服务器应用

美团后台流量支撑程序

支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标 (qps, latency)等功能 -> golang

仙侠道

产品网址:仙使道官网-心动游戏

应用范围:游戏服务端(通讯、逻辑、数据存储)

3.云计算/云服务后台应用

盛大云CDN(内容分发网络)

网址:盛太云汁算

应用范围:CDN的调度系统、分发系统、监控系统、短域名服务,CDN内部开放平台、运营报表系统以及其他一些小工具等

京东消息推送云服务/京东分布式文件系统

网址:京东云

应用范围:后台所有服务全部用go实现

如何快速深入的学习一个新技术或者是一个知识点


二、概述

一、概述

1、Google创造Golang的原因

1)计算机硬件技术更新颊繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。

2)软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。【现有的编程语言:1. 风格不统一2.计算能力不够 3. 处理大并发不够好】

3)企业运行维护很多c/c++的项目,c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决。

2、Go语言发展简史

  • 2007年,谷歌工程师Rob Pike, Ken Thompson 和Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。

  • 2009年11月10日,Google将Go语言以开放源代码的方式向全球发布。

  • 2015年8月19日,Go 1.5版发布,本次更新中移除了”最后残余的C代码”

  • 2017年2月17日,Go语言Go 1.8版发布。

  • 2017年8月24日,Go语言Go 1.9版发布。 本次教程用的是1.92的版本

  • 2018年2月16日,Go语言Go 1.10版发布。

3、Go语言的特点

简介

Go语言保证了既能到达静态编译语言的安全和性能,文达到了动态语言开发维护的高效率,使用一个表达式来形容Go语言:Go=C+ Python,说明Go语言既有c静,态语言程序的运行速度,又能达到Python动态语言的快速开发。

指针概念

从c语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等等,也保留了和c语言一样的编译执行方式及弱化的指针。

举例:

package main

//go语言的指针的使用特点(体验)
func testPtr(num *int) {
	*num = 20
}

func main() {

}

包概念

引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。

package main //一个go文件需要在一个包

import "fmt"

func sayOk() {
	//输出一句话
	fmt.Println("ok")
}

垃圾回收机制

垃圾回收机制,内存自动回收,不需开发人员管理

天然并发(重要特点)

  1. 从语言层面支持并发,实现简单

  2. goroutine,轻量级线程,可实现大并发处理,高效利用多核。

  3. 基于CPS并发模型(Communicating Sequential Processes )实现

管道通信机制

吸收了管道通信机制,形成Go语言特有的管道channel,通过管道channel,可以实现不同的goroute之间的相互通信。

函数多个返回值

package main //一个go文件需要在一个包

import "fmt"

func main() {
	sum, sub := getSumAndSub(30,30)
	fmt.Println("sum=", sum, "sub=", sub)

	sum2, _ := getSumAndSub(10,30) //只取出第一个返回值
	fmt.Println("sum=", sum2)
}

//写一个函数,实现同时返回 和,差
//go 函数支持返回多个值
func getSumAndSub(n1 int, n2 int) (int,int){
	sum := n1 + n2 //go语句后面不用带分号
	sub := n1 - n2
	return sum, sub
}

新的创新

比如切片slice、延时执行defer等

二、环境

一、windows下搭建Go开发环境

安装和配置SDK

基本介绍:

1)SDK 的全称(Software Development Kit 软件开发工具包)

2)SDK是提供给开发人员使用的,其中包含了对应开发语言的工具包。

SDK下载

1)Go语言的官网为(需魔法上网):golang.org

2)SDK下载地址:Golang中国 https://www.golangtc.com /download

3)如何选择对应的SDK版本

windows下安装sdk

1)Windows下 SDK的各个版本说明:

Windows下:根据自己系统是32位还是64位进行下载:

2)请注意:安装路径不要有中文或者特殊符号如空格等

3)SDK安装目录建议:windows一般我安装在d:/programs

4)安装时,基本上是傻瓜式安装,解压就可以使用

5)解压后,看到d:/go目录,这个是sdk

go.exe 就类似于java的javac

6)测试go的sdk是否安装成功

  • 打开dos窗口

  • cd 到sdk中的bin目录

  • 输入 go version , 就会显示版本号了

配置环境变量

为什么要配置环境变量

错误原因:当前执行的程序在当前目录下如果不存在,windows系统会在系统中己有的一个名为path的环境变量指定的目录中查找。如果仍未找到,会出现以上的错误提示。所以进入到 go安装路径bin目录下,执行go,会看到go参数提示信息

配置环境变量介绍

根据windowg系统在查找可执行程序的原理,可以将Go所在路径定义到环境变量中,让系统帮我们去找运行执行的程序,这样在任何目录下都可以执行go指令。

配置哪些环境变量

注意:配置环境变量店,需要重新打开一次 dos 的终端,这样环境变量才会生效

二、Linux下搭建Go开发环境

Linux下安装SDK

1)Linux下SDK的各个版本说明:

Linux下:根据系统是32位还是64位进行下载:

  • 32位系统:go1.9.2.linux-386.tar:gz

  • 64位系统:go1.9.2.linux-amd64.tar.gz

2)请注意:安装路径不要有中文或者特殊符号如空格等

3)SDK安装目录建议:linux 放在/opt目录下

4)安装时,解压即可

  • tar -zxvf go1.9.2.linux-amd64.tar.gz

配置环境变量

1) 在/etc/profile 文件下添加三条语句

  • export GOROOT=/opt/go

  • export PATH=$GOROOT/bin:$PATH

  • export GOPATH=$HOME/goprojects/

2)提示:修改 /etc/profile 文件,需要root 权限 或者 sudo 名字

3)source /etc/profile 刷新

三、Mac下搭建Go开发环境

Mac下安装SDK

1)Mac下SDK的各个版本说明:

2)请注意:安装路径不要有中文或者特殊符号如空格等

3)SDK安装目录建议:Mac一般放在用户目录下 go_dev/go 下

4)安装时,解压即可

配置环境变量

1)sudo vim ~/.bash_profile 文件。如果是zsh端,sudo vim ~/.zshrc

export GOROOT=$HOME/go_dev/go
export PATH=$PATH:$GOROOT/bin 
export GOPATH="$HOME/GoLang/Go_Project"

2)source ~/.bash_profile 或者 source ~/.zshrc

四、快速入门

1、输出helloworld

1.将go代码写在hello.go的文件中

说明:源码在工作目录src/go_code下,如 d:/goproject/src/go_code

2.通过 go build 命令对该 go 文件进行编译,生成.exe 文件。(linux和macos下就没有.exe后缀)

3.在命令行窗口下执行.exe 文件就可以看到运行效果。

4.注意:通过 go run 命令可以直接运行 hello.go 程序[类似执行一个脚本文件的形式]

package main  //打包,每个程序都属于一个包

import "fmt" //导包

func main() {
	fmt.Println("hello world")
}

(1) go 文件的后缀是 .go

(2) package main

表示该 hello.go 文件所在的包是main,在go 中,每个文件都必须归属于一个包。

(3) import “fmt"

表示:引入一个包,包名 fmt, 引入该包后,就可以使用 fmt包的函数,比如:fmt.Println

(4) func main(){

}

  • func 是一个关键字,表示一个函数

  • main 是函数名,是一个主函数,程序的入口

(5)fmt.Println("hello world")

  • 调用fmt包的函数,输出hello world

2、目录形式

工作目录

  • src

    • go_code

      • 项目名称1

        • 包1

          • go程序1

        • 包2

      • 项目名称2

      • 项目...

3、执行流程分析

对源码先go build编译再执行

go执行流程如下图

对源码直接进行go run 指令

go执行流程如下图

两种执行流程的方式区别

1) 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行

2) 如果我们是直接 go run go源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发环境,否则无法执行。

3) 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了很多。

4、编译和运行说明

1) 有了 go 源文件,通过编译器将其编译成机器可以识别的二进制码文件。

2) 在该源文件目录下,通过 go build 对 hello.go 文件进行编译。可以指定生成的可执行文件名, 在 windows 下 必须是 .exe 后缀。

3) 如果程序没有错误, 没有任何提示, 会在当前目录下会出现一个可执行文件(windows 下是.exe Linux 下是一个可执行文件),该文件是二进制码文件,也是可以执行的程序。

4) 如果程序有错误,编译时,会在错误的那行报错。有助于程序员调试错误

5) 运行有两种形式

  • 1)直接运行生成的可执行Go程序,比如hello.exe

  • 2)通过运行工具go run 对源代码文件进行运行。

5、Go 程序开发的注意事项

1) Go 源文件以 "go" 为扩展名。

2) Go 应用程序的执行入口是 main()函数。 这个是和其它编程语言(比如 java/c)

3) Go 语言严格区分大小写。

4) Go 方法由一条条语句构成,每个语句后不需要分号(Go 语言会在每行后自动加分号),这也体现出 Golang 的简洁性。

5) Go 编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错

6) go 语言定义的变量或者 import 的包如果没有使用到,代码不能编译通过。

7) 大括号都是成对出现的,缺一不可。

6、Go 语言的转义字符(escape char)

说明:常用的转义字符有如下:

1) \t : 表示一个制表符,通常使用它可以排版。

2) \n :换行符

3) \\ :一个\

4) \" :一个"

5) \r :一个回车 fmt.Println("天龙八部雪山飞狐\r 张飞");

7、注释(comment)

1.介绍注释

用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

2.在 Golang 中注释有两种形式

1) 行注释

// 注释内容

2) 块注释(多行注释)

/* 
 注释内容
*/

使用细节

1) 对于行注释和块注释,被注释的文字,不会被 Go 编译器执行。

2) 块注释里面不允许有块注释嵌套 [注意一下]

8、规范的代码风格

1.正确的注释和注释风格:

Go 官方推荐使用行注释来注释整个方法和语句。

2.正确的缩进和空白

1) 使用一次 tab 操作,实现缩进,默认整体向右边移动,时候用 shift+tab 整体向左移

2) 或者使用 gofmt 来进行格式化

3) 运算符两边习惯性各加一个空格。比如:

var num = 2 + 4 * 5

4) Go 语言的代码风格

package main 

import "fmt" 

func main() { 
	fmt.Println("hello,world!") 
}

5) 一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅

9、Golang 官方编程指南

Golang 官方编程指南

点击上图的 tour -> 选择 简体中文就可以进入中文版的 Go 编程指南

Golang 官方标准库 API 文档

可以查看 Golang 所有包下的函数和使用

解释术语:API

api : application program interface :应用程序编程接口。

就是我们 Go 的各个包的各个函数。

10、Golang 标准库 API 文档

1) API (Application Programming Interface,应用程序编程接口)是 Golang 提供的基本编程接口。

2) Go 语言提供了大量的标准库,因此 google 公司 也为这些标准库提供了相应的 API 文档,用于告诉开发者如何使用这些标准库,以及标准库包含的方法。

3) Golang 中文网在线标准库文档

4) Golang 的包和源文件和函数的关系简图

10、Dos 的常用指令(了解)

1.dos 的基本介绍

Dos: Disk Operating System 磁盘操作系统

2.dos 的基本操作原理

消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息

备案号:粤ICP备2024164527号-1