「GO语言」 一.为什么我要学习Golang以及GO语言入门普及


也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大

少走了弯路,也就错过了风景,无论如何,感谢经历


更多关于Android安全的知识,可前往:https://blog.csdn.net/ananasorangey/category11955914.html

本篇文章转载自公众号[娜璋AI安全之家]


作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang编程语言,一方面是督促自己不断前行且学习新知识;另一方面是分享与读者,希望大家一起进步。这系列文章入门部分将参考“尚硅谷”韩顺平老师的视频和书籍《GO高级编程》,详见参考文献,并结合作者多年的编程经验进行学习和丰富,且看且珍惜吧!后续会结合网络安全进行GO语言实战深入,加油~

这些年我学过各种编程语言,从最早的C语言到C++,再到VB、C#、PHP、JAVA,再到IOS开发、Python,到最新的GO语言,学得是真的杂。有时候觉得编程语言恰恰是最简单的,而通过一门编程语言能够解决实际问题或深入底层才是其价值所在,并且当我们学好一门编程语言后,其他编程语言都非常类似,殊途同归,学起来也很迅速。

文章目录

1.Golang的学习方向

2.Golang应用领域


一.为什么我要学习Golang

1.Golang背景知识

Go语言其实是Golanguage的简称,Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。该语言的吉祥物为金花鼠(gordon),如下图所示。

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go的语法接近C语言,但对于变量的声明有所不同,Go支持垃圾回收功能。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。

官方网站:


那么,我们为什么要学习GO语言呢?


2.Why

就我而言:
学习GO语言主要是因为它在安全领域的应用,它是区块链最主流的编程语言,同时也是当前最具发展潜力的语言。它支持数据处理和大并发处理能力,能有效解决我的很多问题。Go语言是Google公司创造的语言,也是Google主推的语言。国外如Google、AWS、Cloudflare、CoreOS等,国内如七牛、阿里、小米、京东等都已经开始大规模使用Golang开发其云计算相关产品。

就你而言:
为什么你需要学习这个编程语言呢?下面我参考知乎和网上大神的答案,谈谈GO语言的优势。

作者PingCAP说到:

以下回答来自我的同事 Nick Cameron,他是 Rust 语言 Core Team 成员,因为我们的分布式数据库产品—— TiDB 的计算层是用 Go 编写的,所以他最近开始研究用 Go 语言编写程序,他从一个“编程语言设计者”的角度,分享了自己对 Go 语言优势/不足的看法。
用 Go 编程的感觉很棒。库程序里有我想要的一切,总体实现较为完善。学习体验也十分顺畅,不得不说,Go 是一种经过精心设计的实用性语言。举个例子:一旦你知悉了 Go 的语法,就能将其他语言中惯用法延续到 Go 中。只要你学会一些 Go,就可以相对轻易地推测 Go 语言的其他特性。凭借一些来自其他语言的知识,我能够阅读并理解 Go 代码,而不需要过多的搜索(Google)。与 C/C++、Java、Python 等相比,Go 并没有那么多痛点,而且更具生产力。然而,它还是与这些语言处在同一个时代。一个很好的例证是 nil:像 Rust 和 Swift 这样的语言已经去除了 null 的概念,并且消除了相关的一整类错误。Go 降低了一部分风险:没有空值(no null values),在 nil 和 0 之间进行区分。但其核心思想仍未改变,同样还会出现解空指针引用这种常见的运行时错误。
总体而言,Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。垃圾收集确实带来了一个巨大的差异:使用 GC 使得 Go 变得更简单、更小,也更容易理解。

简单介绍Go语言背景知识后,我们开始详细讲解这门语言。Let’s go!!!


二.什么是Go语言

本文详细学习了韩顺平老师的视频和柴树杉老师的《GO高级编程》,在此表示感谢,真的感谢这些大神让我们不断进步。


1.Golang的学习方向

Go语言其实是Golanguage的简称,我们既然要学习Go语言,首先需要知道它能做什么事情?


下图简单展示了Golang工程师的薪资,相对还不错。


2.Golang应用领域

下面我们看看韩老师的Golang应用领域知识普及。

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

(2) 后端服务器应用(并发)

(3) 云计算和云服务开发


三.如何学习Golang

首先,我先补充下我是如何怎么学习编程语言的。
不要这样学习:


应该这样学习:


Golang语言的基本学习方法和其他编程语言类似,需要注意以下几点:

该系列博客作者尽量采用通俗易懂的语言讲解,主要是结合韩顺平老师、柴老师Go语言书籍、论坛观点及作者的经验进行讲解。注重Go语言体系,同时会补充一些经典的算法问题和实战技巧(安全)。正如老师所说,在实际工作中,如何快速掌握一个技术的分享,快速学习一门技术,这种能力真的重要,这也是作者分享的另一个目的。下图展示了韩老师分享的“如何快速深入学习一个新技术”路线。

如果您关注我的博客,您应该知道我自己是一个脚踏实地学习和正能量的人,朋友圈和说说也经常发一些自己的动态去感染身边的人,包括考研、考博、找工作的朋友,如果需要这种能量可以加我微信。总之,希望您能坚持学习,做一些自己喜欢的事,学一些感兴趣的技术或混口饭吃,加油!


四.程序基本概念

由于该课程尽量面向零基础的同学,所以这里简单普及下程序的基本概念知识。

(1) 什么是程序
计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。


(2) 什么是指令
指令是告诉计算机从事某一特殊运算的代码。如:数据传送指令、算术运算指令、位运算指令、程序流程控制指令、串操作指令、处理器控制指令。计算机程序发给计算机处理器的命令就是“指令(instruction)”。最低级的指令是一串0和1,表示一项实体作业操作要运行(如“Add”)。根据指令类型,某个具体的存储领域被称作“寄存器(register)”,里面包含了可用于调出指令的数据或数据存储位置。

在上图中,上部分类比为程序,老板和秘书通过对话的形式进行交互。下部分是计算机实现老板布置的指令过程,计算机通过程序实现交互,程序员将main.go源码进行编译,得到一个可执行文件(二进制)main.exe,电脑再去执行操作。


五.Golang发展史

1.Go语言开发团队

Go语言是由三位大佬设计的,他们分别是Ken Thompson(肯·汤普森)、Rob Pike(罗伯·派克)和Robert Griesemer(罗伯特·格利茨默) 。

Google为什么要创造Go语言呢?


那么,能不能开发一种既兼顾编译语言的速度,又能同时拥有脚本语言的开发速度的强大语言呢?因此创造了Go语言。


2.Go语言诞生历程

Go语言最初由Google公司的Robert Griesemer、Ken Thompson和Rob Pike三个大牛于2007 年开始设计发明,设计新语言的最初的洪荒之力来自于对超级复杂的C++11特性的吹捧报告的鄙视,最终的目标是设计网络和多核时代的C语言。到2008年中期,语言的大部分特性设计已经完成,并开始着手实现编译器和运行时,大约在这一年Russ Cox作为主力开发者加入。到了2010年,Go语言已经逐步趋于稳定,并在9月正式发布Go语言并开源了代码。下图是Go语言的基因图谱。

发布的版本信息如下所示:

Go语言很多时候被描述为“类C语言”,或者是“21世纪的C语言”。从各种角度看,Go语言确实 是从C语言继承了相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等诸 多编程思想,还有彻底继承和发扬了C语言简单直接的暴力编程哲学等。下面是Go语言中来自贝尔实验室特有并发编程基因的演化过程:

纵观整个贝尔实验室的编程语言的发展进程,从B语言、C语言、Newsqueak、Alef、Limbo 语言一路走来,Go语言继承了来着贝尔实验室的半个世纪的软件设计基因,终于完成了C语 言革新的使命。纵观这几年来的发展趋势,Go语言已经成为云计算、云存储时代最重要的基础编程语言


3.Go语言特点

Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容Go语言,如下:


说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。具体特点如下:


下面先普及几个Go语言的程序,让大家感受下Go语言的魅力。首先介绍指针,go语言函数中是将变量写在前面,类型写在后面,同时Go语言后不用带分号(;)。

package main

//go语言指针的使用特点 星号取值
func testPtr(num *int) {
	*num = 20
}

func main() {

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

import "fmt"
func sayOK() {
	fmt.Println("ok")
}
//写一个函数实现同时返回多个值
func getSumAndSub(n1 int, n2 int) (int, int) {
	sum := n1 + n2   //go语言后面不用带分号
	sub := n1 - n2
	return sum, sub
}

六.Windows系统Golang环境配置

1.开发工具

常用的Go开发工具如下图所示:

官方下载地址:


建议大家先选择VSCode或Vim文本编辑器,当大家对Go语言有一定了解后,再使用Eclipse等IDE集成开发工具。这样能让你更好地理解Go语言技术和基本语法,后续更深入的理解Go语言,尤其对于初学者来说,找工作时记住一些常见的函数非常必要。


2.安装VSCode

下载VScode安装软件:


它有不同版本供大家下载,Windows包括32位和64位版本,zip是压缩包,Installer需要安装;Linux中.tar.gz表示解压后就能使用64位,Mac系统只有一个下载。

作者习惯Windows系统编程,所以会选择在该环境下安装,其他操作系统建议读者可以百度解决。


直接运行EXE程序安装。这里选择安装路径:


这里建议选择勾选“添加到PATH”,环境变量能省去我们以后的很多麻烦。

安装过程如下图所示:

安装成功后打开VSCode如下图所示。


七.Golang语言快速入门

1.编写第一个Go程序

首先我们简单编写Golang程序。

第一步,创建一个文件夹用于存放Go程序,命名为“Goproject”。

第二步,选择“文件(File)”->“打开文件夹(Open Folder)”,可以看到GOPROJECT打开。

第三步,点击按钮创建一个新的文件“test01.go”。

第四步,编写最简单的代码。

package main    //把test.go文件归属到main

import "fmt"    //引入包fmt
func main() {
	//输出内容
	fmt.Println("hello, My name is Eastmount!")
}

同时,我们会看到右下角不断弹窗,因为这款工具功能检测到你正在做Go开发,它会提示你去安装相应的扩展包。目前我们暂时不安装相关插件,直接关掉即可。


2.Go语言开发环境搭建

现在我们能直接开发了吗?其实不行。写好源代码之后,我们还需要进行编译和运行源代码,因此需要搭建Go语言的开发环境,它需要SDK。

第一步,下载SDK。
SDK全称是(Software Development Kit)软件开发工具包,SDK是提供给开发人员使用的,其中包含了对应开发语言的工具包。其下载地址是Go语言的官方地址。


作者64位操作系统下载的SDK为:


第二步,解压部署SDK。
需要注意,安装路径不要在有中文或特殊符号如空格等,作者将其解压复制到如下文件夹:


其中,bin文件中的go.exe用于编译可执行文件,godoc.exe用于生产文档,dofmt.exe用于代码格式化。

第三步,测试Go语言的SDK安装成功。


注意如果返回上一层目录执行“go version”会提示错误信息,这涉及到环境变量配置问题。


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

右击“我的电脑”->属性->高级系统设置->高级->环境变量->新建系统变量。

添加的环境变量如下:



Path环境变量系统自带,不需要新建增加内容即可;同时增加的“%GOROOT%”路径表示引用上一步添加的变量。

其中,GOPATH表示以后Go项目存放的路径,即工作目录。

重新打开DOS在运行命令,接着测试配置的环境变量是否成功。


3.Go语言程序快速运行

Go程序的目录结构如下图所示:

第一步,在Goproject文件夹中创建“srcgo_code”目录,并创建第一个项目“project01”。

第二步,VSCode打开刚才创建的文件目录。

package main    //把test.go文件归属到main

import "fmt"    //引入包fmt
func main() {
	//输出内容
	fmt.Println("hello, My name is Eastmount!")
}

代码解释:


第三步,通过go_build命令对该go文件进行编译,生成.exe文件
进入项目main路径下,然后“dir”查看该目录下的文件。


输入命令“go build test01.go”,发现生成exe文件。

第四步,在DOS命令行下执行.exe文件,并查看运行效果。

第五步,通过go run命令可以直接运行test01.go程序,但真实环境是需要先编译后运行的。该命令的运行时间更长,因为编译过程中隐藏在命令中,而上面的步骤是运行编译后的程序。


八.总结

写到这里,这篇基础性Golang文章介绍完毕,希望您喜欢!


希望这篇基础性文章对您有帮助,写得不好的地方还请海涵。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。也希望自己能深入下去,未来四年好好研究Go编程语言,做更多实际工程,写更好的文章,共勉!

2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

(By:Eastmount 2021-01-26 夜于11点)


参考文献:


你以为你有很多路可以选择,其实你只有一条路可以走


展开阅读全文

页面更新:2024-04-25

标签:语言   指令   语法   环境变量   入门   快速   代码   文件   程序   作者   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top