首页 > 其他分享 >第二章 Golang的概述

第二章 Golang的概述

时间:2022-10-14 16:34:52浏览次数:87  
标签:语言 fmt Golang go 概述 Go world 第二章 hello


2.1 什么是程序

第二章 Golang的概述_环境变量

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 开发工具的介绍

第二章 Golang的概述_环境变量_02

工具选择(vscode)

1.下载地址

​https://code.visualstudio.com/download ​

2.window安装
简单下一步下一步,略

VSCode的安装和使用
在d盘创建gocode

第二章 Golang的概述_golang_03


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.看一个现象

第二章 Golang的概述_环境变量_04

2.原因分析

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

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

第二章 Golang的概述_Go_05

a. GOROOT

第二章 Golang的概述_Go_06


b.Path

第二章 Golang的概述_Go_07

c.GOPATH

第二章 Golang的概述_golang_08

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

第二章 Golang的概述_环境变量_09

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.目录结构

第二章 Golang的概述_Go_10


2.代码如下:

第二章 Golang的概述_环境变量_11

对上图说明

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文件

第二章 Golang的概述_golang_12


4.运行hello.exe文件即可

第二章 Golang的概述_go语言_13

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

第二章 Golang的概述_go语言_14

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

演示:

第二章 Golang的概述_环境变量_15

编译和运行

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

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

Mac下如何开发Go程序

说明:在Mac下开发go程序和Windows基本一样
演示一下:如何在Mac下开发一个Go程序

第二章 Golang的概述_golang_16

编译再运行,或者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张飞厉害")
}

作业

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

第二章 Golang的概述_golang_17

代码如下:

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的目录结构

第二章 Golang的概述_Go_18

  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")
}

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


标签:语言,fmt,Golang,go,概述,Go,world,第二章,hello
From: https://blog.51cto.com/u_15565664/5757446

相关文章

  • java语言概述
    java语言的平台版本1JavaSE标准版2JAVAEE企业版3JAVAME小型版电脑的两种操作方式1图形化界面2命令行(功能更强大)在黑窗口转换路径:d:加回车    查看当前......
  • Python爬虫之数据提取概述
    数据提取概述知识点了解响应内容的分类了解xml和html的区别1.响应内容的分类在发送请求获取响应之后,可能存在多种不同类型的响应内容;而且很多时候,我们只需要响应内容中的......
  • CMT: Convolutional Neural Networks Meet Vision Transformers概述
    0.前言相关资料:arxivgithub论文解读(CSDN,CSDN)论文基本信息:作者单位:华为诺亚,悉尼大学发表时间:CVPR2022(2021.7.13)1.针对的问题当前将......
  • Redis延迟队列golang高效实践
    一、背景 业务中经常会有这样的场景: 到期后自动执行指定操作; 查询某个任务是否完成,未完成等待一定时间再次查询; 回调通知,当回调失败时,等待后重试;等等还......
  • 【监控】 linux系统监控的概述
    入门1.识别监控对象2.理解监控对象3.细分监控对象的指标4.确定报警的基准线。 预中级  1工具化和监控分离  2监控对象的分类    2.1硬件监控 (IPMI,SNMP)......
  • Go语言学习日记【二十五】golang格式化输出字符串左右对齐
    packagemainimport"fmt"funcmain(){fmt.Printf("%-40s\t%s\n","aaaaaaaaaaaaaaaaaa","a")fmt.Printf("%-40s\t%s\n","bb","b")} ......
  • Golang Gorm time 时间字段格式化模型类 重写
    问题:在使用GORM中如果我们使用到了CreateAt和UpdateAt就会发现这个时间的类型是time.Time而其数据是"2022-10-13T10:14:02.973528+08:00"这样的,然而这样的数据你......
  • Golang复杂json结构体解析
    1、示例一{"id":"8667597b-bcd9-51de31b655cd","name":"ali-redis-analyse","category":"db","category_display":"数据库","type":"redis","type_display":......
  • golang usps api对接
    golanguspsapi对接简介实现对接uspsapi接口使用gogetgithub.com/wms3001/USPS实例获取跟踪信息usps:=&USPS{}usps.UserId="680CHUAN3141"resp:=usps.Track("930......
  • 反射_Class对象功能概述与反射_Class对象功能_获取Field
    反射_Class对象功能概述Constructor:构造方法创建对象;TnewInstance​(Object...initargs)使用由此Constructor对象表示的构造函数,使用指定的初始化参......