第二章 Golang的概述

简介: 第二章 Golang的概述

2.1 什么是程序

why is Go语言?

Go语言 是区块链最主流的编程语言,

同时也是当前最具发展潜力的语言。

Go语言是Google公司创造的语言,也是Google主推的语言。

国外如Google、AWS、Cloudflare、CoreOS等,国内如七牛,阿里,小米,京东等都已经开始大规模使用Golang开发其云计算相关产品。

Go语言诞生的小故事

Go语言的核心开发团队

Ken Thompson(肯·汤普森)。1983年图灵奖(Turing Award)和1998年美国国家技术奖得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言,同时也是C语言的主要发明人。

RobPike(罗布·派克):曾是贝尔实验室的Unix团队,和Plan9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8字元编码。

Robert Griesemer:曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8

Google为什么要创造Go语言

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

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

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

2.2Go语言发展简史

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

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

2015年8月19日,Go1.5版发布,本次更新中移除了 “最后残余的C代码”

2017年2月17日,Go语言Go1.8版发布。

2017年8月24日,Go语言Go1.9版发布。

2018年2月16日,Go语言Go1.10版发布。

2.3 Golang的语言特点

简介

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

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

举一个案例(体验):

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

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

package main // 一个go文件需要在一个包
import "fmt"
func sayOk(){
  // 输出一句话
  fmt.Println('ok')
}
  1. 垃圾回收机制,内存自动回收,不需要开发人员管理【C容易出现内存泄漏】

4.天然并发【重要特点】

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

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

c. 基于CPS并发模型(Communicating Sequenlal Processess) 实现

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

// 写一个函数,实现同时返回 和,差
// go函数支持返回多个值
func getSumAndSub(n1 int,n2 int)(int,int){
  sum := n1 + n2 // go语言后不要加;
  sub := n1 - n2 
  return sum,sub
}
e.新的创新:比如切片slice、延时执行defer等

2.4 Golang 开发工具的介绍

工具选择(vscode)

1.下载地址

https://code.visualstudio.com/download

2.window安装

简单下一步下一步,略

VSCode的安装和使用

在d盘创建gocode

3.如何在Liunx中安装vscode

略(一般不在liunx上来开发)

2.5 Windows下搭建Go开发环境-安装和配置SDK

介绍SDK

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

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

SDK下载:

1.Go语言的官网为:golang.org,因为各种原因,可能无法访问

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

Windows下安装SDK:

1.Windows下SDK的个个版本说明:

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

32位系统:go1.9.2.windows-386.zip

64位系统:go1.9.2windows-amd64.zip

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

3.SDK安装目录建议,Windows放在d盘

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

Windows下配置Golang环境变量:

为什么配置环境变量

1.看一个现象

2.原因分析

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

在Go开发中,需要配置那些环境变量

a. GOROOT

b.Path

c.GOPATH

安装完之后,检查一下是否安装成功,重新打开cmd命令窗口。如下图

Liunx下搭建Go开发环境-安装和配置SDK

1.Liunx下安装SDK:

Liunx下:根据系统是32位和64位(uname -a查看命令)

2.请注意:环境路径不要有中文或者特殊符号如空格等

3.SDK安装目录建议:liunx放在/opt目录下

4.安装时,解压即可,我们使用的是tar.gz

Linux下配置Golang环境变量

1.在/etc/profile文件夹下添加

export GOROOT=/opt/go
export PATH=$PATH:$GOROOT$/bin
export GOPATH=$HOME/goprojects/

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

2.7 Mac下搭建Go开发环境-安装和配置SDK

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

Mac OS 下,只有64位的软件安装包

Mac OS 系统的安装包:go1.9.2.darwin-amd64.tar.gz

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

3.sdk安装目录建议:Mac一般放在用户目录下go_devigo下

4.安装时,解压即可

Mac下配置Golang环境变量:

步骤1:使用root用户,修改/etc/profile增加环境变量的配置

export GOROOT=$HOME/go_dev/go
export PATH=$PATH/bin
export GOPATH=$HOME/goproject

步骤2:配置成功后,需要注销。再次启动。执行go version查看是否配置成功

2.8Go语言快速开发入门

需求

要求开发一个hello.go程序,可以输出“hello,world”

1.目录结构

2.代码如下:

对上图说明

a.go文件的后缀是.go

b.package.main

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

c.import “fmt” 表示引入一个包,包名fmt,引入改包后就可以使用fmt包中的函数,比如:fmt.Prinln

d.func main(){

} func 是一个关键字,表示一个函数。main是函数名。是一个主函数,即我们程序的入口。

e. fmt.Println(“hello”) 表示使用fmt这个包的函数输出“hello”

  1. 通过go build命令对该go文件进行编译,生成.exe文件

4.运行hello.exe文件即可

5.注意:通过go run命令可以直接运行 hello.go 程序

Liunx下如何开发Go程序

说明:liunx下开发go和Windows开发基本是一样的,只是在运行可执行的程序时以./文件名方式

演示:

编译和运行

// 编译
go build hello.go
// 运行
./hello

也可以直接用go run hello.go方式运行

Mac下如何开发Go程序

说明:在Mac下开发go程序和Windows基本一样

演示一下:如何在Mac下开发一个Go程序

编译再运行,或者go run来运行

编译和运行说明

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

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

修改编译文件名指令

go build -a myhello.exe hello.go

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

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

运行

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

2.通过运行工具go run对源码文件进行运行

Go开发注意事项

1.Go源文件以“go”为扩展名

2.Go应用程序的执行入口是main()函数

3.Go语言严格区分大小写

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

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

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

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

2.9 Go语言的转意字符

常用的转义字符有

  1. \t : 相当于一个tab空格键
  2. \n :换行符
  3. \ :一个\
  4. " :一个"
  5. \r : 一个回车

案例:

package main
import "fmt" // 格式化,输入,输出的函数
func main(){
    // 演示转义符  \t
  fmt.Println("tom\tjack")
  fmt.Println("hello\nworld")
  fmt.Println("C:\\Users\\Administrator.S4RSCM1IE7T6BE7\\Desktop\\Project\\public")
  fmt.Println("tom说\"i love you\"")
  // \r 回车,从当前的最前面的开始输出,覆盖掉以前的内容
  fmt.Println("天龙八部雪山飞狐\r张飞厉害")
}

作业

要求用一句话输出一下语句,达到下图效果

代码如下:

package main
import "fmt"
func main(){
  fmt.Println("姓名\t年龄\t籍贯\t地址\njohn\t16\t河北\t北京")
}

2.11 注释

行注释

// 注释内容

块注释

/*

注释内容

*/

2.12 规范的代码风格

正确的注释和代码风格

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

正确的缩进和空白

1.使用一次tab操作,实现缩进默认整体向右边移动,快捷键shfit+tab向左移动

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

gofmt -w xxx.go

3.运算符两边各加一个空格。

var num = 1 + 1

4.代码风格

正确

package main
import "fmt"
func main(){
  fmt.PrintLn("hello,world!") // shift+alt+向下箭头  复制
}

错误

package main
import "fmt"
func main(){
fmt.PrintLn("hello,world!") // shift+alt+向下箭头  复制
}

5.一行最长不要超过80个字符,超过要换行展示

fmt.PrintLn("hello,world!hello,world!hello,world!hello,world!hello,world!hello",
",world!hello,world!hello,world!hello,world!",
"hello,world!hello,world!hello,world!")

Golang官方编辑指南

Golang官方网站 https://golang.org

Golang官方标准库API文档,https://golang.org/pkg 可以查看所有包下的函数和使用

Golang 中文网 在线标准库文档:https://studygolang.com/pkgdoc

2.15 Dos的常用指令

dos的基本介绍

Dos:Disk Operating System 磁盘操作系统,简单说一下windows的目录结构

  1. 查看当前目录 dir
  2. 切换到F盘符 cd /d f:
  3. 切换到上级目录 cd …
  4. 切换到顶级目录 cd \

目录操作

1.创建目录ok200 **md ok200 **

创建ok300和ok400 md ok300 ok400

2.删除目录

rd /q/s ok200 q表示不需要询问s代表包含子文件

创建文件

echo helloworld > abc.txt

echo helloworld > d:/go/gocode/abc.txt

复制和移动

复制 copy abc.txt d:\test //使用原来文件名

copy abc.txt d:\test\a.txt // 使用新文件名

移动

move abc.txt d:\test

删除

del xxx.txt // 删除所有.txt (*.txt)

清屏

cls

退出

exit

课后习题

1.写一个输出 hello,golang的程序

package main
import "fmt"
func main(){
  fmt.Println("hello,Golang")
}

2.将个人信息 姓名 性别 表格输出出来

package main
import "fmt"
func main(){
  fmt.Println("姓名\t性别\n张三\tman")
}

感谢大家观看,我们下次见

目录
相关文章
|
5月前
|
存储 监控 Go
Golang框架实战-KisFlow流式计算框架(1)-概述
KisFlow是针对缺乏数仓平台但又有实时计算需求的企业的解决方案,它提供分布式批量消费、有状态流式计算、数据流监控和分布式任务调度等功能。通过KisFunction实现业务逻辑复用,减轻对业务数据库的压力。系统包括流式计算层和任务调度层,支持多种数据源和中间件集成。KisConfig用于配置管理,KisFunction是基本计算单元。设计目标是使业务工程师能轻松进行流式计算。项目源码可在GitHub查看:https://github.com/aceld/kis-flow。
135 0
Golang框架实战-KisFlow流式计算框架(1)-概述
|
Web App开发 JavaScript Unix
【第一章:Golang系列篇】Go(Golang)概述
【第一章:Golang系列篇】Go(Golang)概述
105 0
|
28天前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
53 4
Golang语言之管道channel快速入门篇
|
28天前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
46 4
Golang语言文件操作快速入门篇
|
28天前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
52 3
Golang语言之gRPC程序设计示例
|
28天前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
43 4
|
28天前
|
Go
Golang语言错误处理机制
这篇文章是关于Golang语言错误处理机制的教程,介绍了使用defer结合recover捕获错误、基于errors.New自定义错误以及使用panic抛出自定义错误的方法。
39 3
|
28天前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
27 4
Golang语言goroutine协程篇
|
28天前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
25 3
Golang语言之Prometheus的日志模块使用案例
|
28天前
|
Go
Golang语言之函数(func)进阶篇
这篇文章是关于Golang语言中函数高级用法的教程,涵盖了初始化函数、匿名函数、闭包函数、高阶函数、defer关键字以及系统函数的使用和案例。
17 3
Golang语言之函数(func)进阶篇