精华内容
下载资源
问答
  • 2021-03-23 18:01:21

    一,GO语言的优劣势

    Go开发中的痛点

    编译慢,失控的依赖,个工程师只是用了一个语言里面的一部分,程序难以维护(可读性差、文档不清晰等),更新的花费越来越长,交叉编译困难

    Go语言的优势

    学习曲线容易MGo语言语法简单,包含了类C语法。效率: 快速的编译时间,开发效率和运行效率高,自由高效: 组合的思想、无侵入式的接口,强大的标准库.

    二,GO与java的比较

    编译语言,速度适中(2.67s),目前的大型网站都是拿java写的,比如淘宝、京东等。 主要特点是稳定,开源性好,具有自己的一套编写规范,开发效率适中,目前最主流的语言。作为编程语言中的大腕。 具有最大的知名度和用户群。 无论风起云涌,我自巍然不动。 他强任他强,清风拂山岗; 他横由他横,明月照大江。

     

    三,综合建议

    go语言虽然有很多很强大的特性,但是由于推出时间相对不久,一些坑没有填,再加上各种库比较少,造成开发成本较高,不如java那样成熟,所以目前岗位不多,因为敢第一个吃螃蟹的人比较少。可以先学java就业,然后再利用业余时间学go,目前是java领先,未来go的前景会很不错。

     

    最后


    如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的Java技术qq交流群自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。

    更多相关内容
  • go语言学习

    千次阅读 2022-01-23 20:41:52
    go语言学习笔记(一)

    go语言学习笔记(一)

    1.学习方向

    区块链研发工程师、go服务端/游戏软件工程师、Golang分布式/云计算软件工程师。

    2.go的应用领域

    区块链的应用开发、后台的服务应用、云计算/云服务后台应用。

    3.go语言的特点

     用一个表达式来形容go:go=c+python,说明go既有C静态语言程序运行速度,又能达到Python动态语言快速开发;

    3.1 go从c中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,弱化指针等等;

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

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

    3.4天然并发(重要特点)

    (1)、从语言层面支持并发,实现简单。

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

    (3)、基于CPS并发模型实现、。

    (4)吸收管道通信机制,形成go语言特有的管道。

    (5)、函数可以返回多个值(若C++想要实现返回多个值,需要利用数组)。

     (6)、新的创新:切片、延时执行defer等。

    4.go语言快速开发入门

    开发一个可以输出hello word的程序。

    (1)、目录结构:go代码编程写到扩展名为**.go(后缀.go)的文件中。

    目录结构图:

    (2)、代码如下:

    对代码的说明:

         1)、go文件后缀是 .go;

         2)、Package main  表示该文件所在的包是main这个包,在go中,每个文件都要呕包含在一个包中。

         3)、Import “fmt”   表示引入一个包,包名 fmt。引入后,可以使用fmt包的函数,比如:fmt Println。

         4)、func main(){

       }

       func是一个关键字,表示一个函数。main是函数名,是一个主函数。

         5)、fmt.Println(“hello,word!”)   表示调用fmt包的函数 Println 输出“hello,word!”。

    (3)、通过go build 命令对文件进行编译,生成.exe文件。

    (4)、运行hello.exe文件即可。

    小结注意

    1、所有的代码包括在一个包中;

    2、go中先写变量,再写函数名 如(num,*int);

    3、go可以返回多个参数值,形式 func getssunsub(n1,int,n2,int)(int,int);

    4、go语言,语句后面不用带分号;

    展开全文
  • 手把手教你学习汇编语言——从入门到起飞

    万次阅读 多人点赞 2021-05-11 08:07:33
    希望大家看完这些找一些样例练习一下会的更好,这里有一些练习题希望能帮助到大家 汇编语言编程题总结 汇编语言环境安装 这里用的是Masm,相比较纯Dosbox会简单很多的 汇编语言和CodeBlock安装包 密码:dqs9 下载...

    专接本交流群:1051749714 (有什么问题欢迎进群讨论)
    关于这篇博客,笔者会尽量用最简单的方式教会大家汇编语言以便应付各种考试
    有什么不足的忘大佬评论或私信指出。

    汇编环境安装
    汇编运行调试
    汇编指令

    希望大家看完这些找一些样例练习一下会学的更好,这里有一些练习题希望能帮助到大家
    汇编语言编程题总结

    汇编语言环境安装

    这里用的是Masm,相比较纯Dosbox会简单很多的
    汇编语言和CodeBlock安装包 密码:dqs9

    下载以后打开运行
    下一步
    在这里插入图片描述
    安装
    在这里插入图片描述
    完成即可
    在这里插入图片描述
    安装完成后打开,进来是默认的程序框

    在这里插入图片描述
    汇编语言运行的话,一定要保存文件到本地才可以运行,调试的话也需要先运行一下才能调试,否则就是调试的上次运行的程序。

    汇编运行调试

    当我们写好以后,它会提示我们先保存在运行
    在这里插入图片描述

    ctrl+s保存在一个地方,记得改名字,把 * 换成名字
    在这里插入图片描述

    再点击运行,出现这个就可以了,这是没有屏幕输出的程序,如果有屏幕输出,还会先输出程序输出的,在输出这一行。
    在这里插入图片描述

    (如果到时候一闪而过,说明你的程序有问题)
    下面会有提示哪一行有问题的,双击就会高亮显示那一行
    (笔者这个就是在AL后面多打了一个S)

    在这里插入图片描述

    运行可以了,那就大概说一下调试的过程(如果要调试的话,一定要先运行一遍才可以,否则就是调试的上一次运行的代码)

    调试的话,输入 T 是运行一步,你可以选择一步一步的运行,
    我们输入一个T 出来的划线位置就是下一次要运行的代码
    我们可以看到命令框第二个划线的 MOV AL,[0000H] 我们的AL赋值是12H 第二次AX的低四位还不是12H
    当我们再输入一个T,才是12H,也就是调试出来的代码是下一次将要运行的代码。
    在这里插入图片描述

    也许有些时候可能会觉得一步一步调试太麻烦了,这里也有直接跳转调试的

    我们之间输入一个U就会出现每一步代码所对应的数。
    在这里插入图片描述

    通过G 在写对应的号,就可以跳转到指定的位置
    在这里插入图片描述

    其他的话,可能会有更方便的,但是笔者认为这些就很够用了。

    软件安装运行调试大概就是到这里了,接下来我们来简述一下基本的命令语句吧

    汇编指令

    先来看一下基本的结构(分号后面的都是注释的,汇编语言用分号注释)

    DATAS SEGMENT	;数据段
        ;此处输入数据段代码  
    DATAS ENDS
     
    CODES SEGMENT	;代码段
        ASSUME CS:CODES,DS:DATAS		;数据段给DS,代码段给CS
    START:			;开始代码
        MOV AX,DATAS	;需要先把DATAAX寄存器,然后再从AXDSDATA不能直接给DS
        MOV DS,AX
        ;此处输入代码段代码
        MOV AH,4CH		;结束语句
        INT 21H
        
    CODES ENDS		;代码段结束
        END START	;结束代码
    
    

    先来说常用的命令符号,如果大家有什么其他命令符使用的话,可以评论或者私信我,我看到会尽快给大家展示出来如何使用

    MOV AL,BL
    这里就是把BL的值放到AL中。
    
     
    

    然后就是类似于C语言的函数
    这个函数就是起个名字加个分号
    汇编语言的函数没有结束的地方,一般如果需要结束的加,就要加一个跳转到其他地方
    如果没有跳转,他就会一直运行到下面

    DATA SEGMENT 
    A DB 12H	;定义两个变量
    B DB 24H
    DATA ENDS 
    CODES SEGMENT 
    	ASSUME DS:DATA,CS:CODES
    START:
    	MOV AX,DATA
    	MOV DS,AX
    	
    	JMP EXIT	;这里就是直接跳转到EXIT  JMP就是跳转的方法
    	
    	MOV AL,A	;A->AL
    	MOV BL,B	;B->BL
    	MOV A,BL	;BL->A
    	MOV B,AL	;AL->B
    	 
    	 
    EXIT:
        MOV AH,4CH
        INT 21H
    CODES ENDS
        END START
    
    
    

    当然还有很多特别的JMP 也就是一些带标志位的 就是标志寄存器里面的六个状态位

    1、进位标志CF(Carry Flag)
    进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
    
    2、奇偶标志PF(Parity Flag)
    
    奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    
    利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
    
    3、辅助进位标志AF(Auxiliary Carry Flag)
    在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
    
    (1)、在字操作时,发生低字节向高字节进位或借位时;
    (2)、在字节操作时,发生低4位向高4位进位或借位时。
    
    对以上6个运算结果标志位,在一般编程情况下,标志位CFZFSFOF的使用频率较高,而标志位PFAF的使用频率较低。
    
    4、零标志ZF(Zero Flag)
    零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
    
    5、符号标志SF(Sign Flag)
    
    符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
    在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为16、溢出标志OF(Overflow Flag)
    
    溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,
    OF的值被置为1,否则,OF的值被清为0。 
    (有些时候,有些问题会问你是不是溢出了,这里有个巧计的方法,负数加负数是正数,正数加正数是负数,如果出现这种情况就是溢出了)
    

    然后衍生出来的就是几个条件跳转指令
    一般情况下,条件跳转上面要跟一些影响标志寄存器的命令

    
    JE   ;等于则跳转
    JNE  ;不等于则跳转
     
    JZ   ;0 则跳转
    JNZ  ;不为 0 则跳转
     
    JS   ;为负则跳转
    JNS  ;不为负则跳转
     
    JC   ;进位则跳转
    JNC  ;不进位则跳转
     
    JO   ;溢出则跳转
    JNO  ;不溢出则跳转
     
    JA   ;无符号大于则跳转
    JNA  ;无符号不大于则跳转
    JAE  ;无符号大于等于则跳转
    JNAE ;无符号不大于等于则跳转
     
    JG   ;有符号大于则跳转
    JNG  ;有符号不大于则跳转
    JGE  ;有符号大于等于则跳转
    JNGE ;有符号不大于等于则跳转
     
    JB   ;无符号小于则跳转
    JNB  ;无符号不小于则跳转
    JBE  ;无符号小于等于则跳转
    JNBE ;无符号不小于等于则跳转
     
    JL   ;有符号小于则跳转
    JNL  ;有符号不小于则跳转
    JLE  ;有符号小于等于则跳转
    JNLE ;有符号不小于等于则跳转
     
    JP   ;奇偶位置位则跳转
    JNP  ;奇偶位清除则跳转
    JPE  ;奇偶位相等则跳转
    JPO  ;奇偶位不等则跳转
    
    

    说完跳转类的指令,接下来我们看一看左移右移指令
    左移这种指令左移一位就是二进制左移一位,也就是乘2的操作。

    SHL(Shift Left)SAL(Shift Arithmetic Left): 每位左移, 低位补 0,  高位进 CF
    SHR(Shift Right)     : 每位右移, 低位进 CF, 高位补 0
    SAR(Shift Arithmetic Right)     : 每位右移, 低位进 CF, 高位不变(也就是高位复制到第二位)
    
    使用的时候就是 
    SHL AL,1
    左移一位
    如果移动的位数大于1位,就要放到CX

    循环左移右移

    ;ROL(Rotate Left): 循环左移, 高位到低位并送 CF
    ;ROR(Rotate Right): 循环右移, 低位到高位并送 CF
    ;RCL(Rotate through Carry Left): 循环左移, 进位值(CF)到低位, 高位进 CF
    ;RCR(Rotate through Carry Right): 循环右移, 进位值(CF)到高位, 低位进 CF
    
    使用的时候就是 
    ROL AL,1
    循环左移一位
    如果移动的位数大于1位,就要放到CX

    然后就是加减乘除

    加法add和adc、inc
    ADD AL,BL
    ALBL加起来放到AL
    
    ADC的话就是ADD的运算在家一个CF状态位的值,
    
    INC AL
    AL1
    
    
    减法sub和sbb、dec
    SUB 对应ADD
    SBB 对应ADC
    DEC 对应INC
    用法都是一样的,就是一个是加一个是减
    
    乘法mul和imul
    MUL是无符号乘法
    MUL 8位的   就是AL乘这个数放到AL 高位放到AH
    MUL 16位的   就是AX乘这个数放到AX中	高位放到DX
    
    除法div和idiv
    DIV是无符号除法
    DIV 8位的   就是 AX除这个数,商放AL  余数放AH
    DIV16位的   就是(DX:AX)除这个数,商放AX  余数放DX
    
    异或运算XOR
    
    XOR AL,BL
    ALBL异或运算放入AL
    
    与运算AND   或运算OR都是一样的
    
    然后就是CMPTEST
    CMP 就是对应的减法,但是这个不会影响AL的值,他只会影响状态标志位
    TEST 就是AND的用法,也是不会影响AL,只影响状态标志位
    
    

    最后就是DOS功能的输入输出

    字符输入输出
    
    DATA SEGMENT 
    	 
    DATA ENDS 
    
    CODES SEGMENT 
    	ASSUME DS:DATA,CS:CODES
    START:
    	MOV AX,DATA
    	MOV DS,AX
    	
    	MOV AH,01H	 ;键盘输入的时候,给AH  1
    	INT 21H		 ;然后INT 21H调用,默认输入到ALMOV DL,AL	 ;CMD窗口输出的时候,要把输出的放到DLMOV AH,02H	 ;AH  2
    	INT 21H
    	
    	 
    	 
    EXIT:
       		MOV AH,4CH
            INT 21H
    CODES ENDS
        END START
    
    字符串输入输出
    
    DATA SEGMENT 
    	 BUF DB 20 DUP('$')
    	 BUFF DB 'Hello World!$'
    DATA ENDS 
    
    CODES SEGMENT 
    	ASSUME DS:DATA,CS:CODES
    START:
    	MOV AX,DATA
    	MOV DS,AX
    	
    	MOV DX,OFFSET BUF	;把偏移地址给DX,也可以用 LEA DX,BUF  二者皆可
    	MOV AH,0AH	 ;键盘输入的时候,给AH  10
    	INT 21H		 ;然后INT 21H调用,默认输入到BUFMOV DX,OFFSET BUFF	 ;CMD窗口输出的时候,要把输出偏移地址放到DXMOV AH,09H	 ;AH  2
    	INT 21H
    	
    	 
    	 
    EXIT:
       		MOV AH,4CH
            INT 21H
    CODES ENDS
        END START
    
    展开全文
  • 作为网络安全初学者,会遇到采用Go语言开发的恶意样本。因此从今天开始从零讲解Golang...这些年我过各种编程语言,从最早的C语言到C++,再到C#、PHP、JAVA,再到IOS开发、Python,到最新的GO语言得是真的杂。有时

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

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

    在这里插入图片描述

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

    在这里插入图片描述


    一.为什么我要学习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语言的优势。

    • Go 语言特色
      简洁、快速、安全
      并行、有趣、开源
      内存管理、数组安全、编译迅速

    • Go 语言用途
      Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

    • C/C++的问题:
      开发效率低,对开发者要求高;libc只向后兼容,运维难度偏大。

    • Lua/Python的问题:
      动态语言,缺少编译过程,低级错误频出;缺少有效的性能分析及调试工具。

    作者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语言,首先需要知道它能做什么事情?

    • 区块链研发工程师
      区块链的核心思想是去中心化,让每个人都能参加数据库的记录,比如虚拟货币
    • Go服务端
      目前服务器端主要采用C和C++实现,只要是C和C++能做的事情,Go语言就可以实现且做的不错。因为Go的作者Ken Thompson也是C语言的设计者,相当于对C语言设计的部分优化,比如处理日志、数据打包、虚拟机处理等,据说美团后台的流量处理就是采用Go语言编写。Go语言据处理和大并发处理的能力非常突出
    • 游戏软件工程师
      游戏数据通道会使用Go语言
    • Golang分布式/云计算软件工程师
      盛大云CDN、京东分布式文件系统

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

    在这里插入图片描述


    2.Golang应用领域

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

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

    在这里插入图片描述

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

    • 美团后台流量支撑程序,支撑主站后台流量(排序、推荐、搜索等),提供负载均衡、cache、容错、按条件分流,统计运行指标(qps、latency)等功能。
    • 仙侠道游戏,包括游戏服务端通讯、逻辑和数据存储等架构。下面推荐davyxu大佬分享的Go语言的游戏服务器底层网络库。
      https://github.com/davyxu/cellnet

    在这里插入图片描述

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

    • 盛大云CDN(内容分发网络),包括CDN的调度系统、分发系统、监控系统、短域名服务,CDN内部开放平台、运营报表系统及其他一些小工具等。
      PS:2019年参加极棒安全大会,清华大学利用CDN发起DDoS攻击值得安全圈的朋友去学习下,利用分发实现攻击挺有意思的。
    • 京东消息推送云服务(京东云),包括京东分布式文件系统,后台服务采用Go语言实现。

    在这里插入图片描述


    三.如何学习Golang

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

    • 只看书,不上机
    • 只运行,不调试
    • 只收藏,不实践,半途而废
    • 只做课后练习,不做工程项目

    应该这样学习:

    • 多敲代码,多敲代码,多敲代码
    • 多读代码,重视实战
    • 良好的兴趣和信念支撑,无论是书本或视频,都坚持学到最后
    • 根据自己的兴趣或者市场的需要做一些有一定规模的项目

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

    • 高效愉快地学习
    • 先建立一个整体框架,然后细节
    • 在实际工作中,要培养用到什么,能够快速学习什么能力
    • 先know how,再know why
    • 软件编程是一门“做中学”的学科,不是会了再做,而是做了才会
    • 适当的“囫囵吞枣”
    • 学习软件编程是在琢磨别人怎么做,而不是我认为应该怎么做的过程,重点放在逻辑上,而不是语法本身

    在这里插入图片描述

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

    在这里插入图片描述

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


    四.程序基本概念

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

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

    • 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合

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

    在这里插入图片描述

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

    在这里插入图片描述


    五.Golang发展史

    1.Go语言开发团队

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

    • Ken Thompson:主要是B语言、C语言的作者、Unix之父。1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言。
    • Rob Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。
    • Robert Griesemer:在开发Go之前是Google V8、Chubby和HotSpot JVM的主要贡献者,曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。

    在这里插入图片描述

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

    • 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能
    • 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。现有编程语言风格不统一,计算能力不够,不能处理大并发。
    • 企业运行维护很多C/C++的项目,C/C++程序运行速度虽然很快,但是编译速度却很慢,同时还存在内存泄露的一系列困扰需要解决。

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


    2.Go语言诞生历程

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

    在这里插入图片描述

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

    • 2007年,谷歌工程师开始设计一门全新的语言,这是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版发布。
    • 2018年2月16日,Go语言Go 1.10版发布。

    在这里插入图片描述

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

    在这里插入图片描述

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


    3.Go语言特点

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

    • Go = C + Python

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

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

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

    package main
    
    //go语言指针的使用特点 星号取值
    func testPtr(num *int) {
    	*num = 20
    }
    
    func main() {
    
    }
    
    • (2) 引入包的概念,用于组织程序结构,Go语言的 一个文件都要归属于一个包,而不能单独存在。比如新建“test.go”文件,需要在一个包main中。
    package main    //一个go文件需要在一个包中
    
    import "fmt"
    func sayOK() {
    	fmt.Println("ok")
    }
    
    • (3) 垃圾回收机制。内存自动回收,不需要开发人员管理,防止造成内存泄露。
    • (4) 天然并发性能。从语言层面支持并发,实现简单;goroutine轻量级线程,可实现大并发处理,高效利用多核;基于CPS并发模型(Communicating Sequential Process)实现。
    • (5) 吸收了管道通信机制。形成Go语言特有的管道channel。通过管道channel可以实现不同的goroute之间的相互通信。
    • (6) 函数可以返回多个值。
    //写一个函数实现同时返回多个值
    func getSumAndSub(n1 int, n2 int) (int, int) {
    	sum := n1 + n2   //go语言后面不用带分号
    	sub := n1 - n2
    	return sum, sub
    }
    
    • (7) 新的创新比如切片(slice)、延时执行defer等。

    六.Windows系统Golang环境配置

    1.开发工具

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

    • Visual Studio Code
      微软的产品,一个运行于Mac OS、Windows和Linux之上的工具,默认提供G语言的语法高亮。安装Go语言插件,还可以支持智能提示,编译运行等功能。
    • Sublime Text
      可以免费试用,默认也支持Go代码语法高亮,只是保存次数达到一定数量后需要购买。
    • Vim
      它是从vi(Linux)发展出来的一个文本编辑器,代码补全、编译及错误跳转等方便编程的功能非常丰富。
    • Emacs
      它不仅仅是一个编辑器,因为功能强大,可称为集成开发环境。
    • Eclipse IDE工具
      开源免费,并提供GoEclipse插件。
    • LiteIDE
      LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),是国人开发的。
    • JetBrains公司的产品
      PhpStrom、WebStrom和PyCharm等IDE工具,都需要安装Go插件。

    在这里插入图片描述

    官方下载地址:

    在这里插入图片描述

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


    2.安装VSCode

    下载VScode安装软件:

    在这里插入图片描述

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

    在这里插入图片描述

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

    • VSCodeSetup-x64-1.52.0.exe

    在这里插入图片描述

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

    • D:\Microsoft VS Code

    在这里插入图片描述

    这里建议选择勾选“添加到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为:

    • go1.15.6.windows-amd64.zip

    在这里插入图片描述

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

    • C:\Software\go

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

    在这里插入图片描述

    在这里插入图片描述

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

    • cd go\bin
    • dir
    • go version

    在这里插入图片描述

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

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

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    添加的环境变量如下:

    • 新建:GOROOT C:\Software\go

    在这里插入图片描述

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

    在这里插入图片描述

    • GOPATH D:\Microsoft VS Code\Goproject
      其中,GOPATH表示以后Go项目存放的路径,即工作目录。

    在这里插入图片描述

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

    在这里插入图片描述


    3.Go语言程序快速运行

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

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述

    package main    //把test.go文件归属到main
    
    import "fmt"    //引入包fmt
    func main() {
    	//输出内容
    	fmt.Println("hello, My name is Eastmount!")
    }
    

    代码解释:

    • Go程序的后缀是 .go
    • Go项目结构通常采用:GOPROJECT -> src -> go_code -> 项目名称
    • package main:表示test01.go文件所在包是main,在go中,每个文件都必须归属于一个包
    • import “fmt”:表示引入了一个包,包名为fmt,引入该包后就能使用其函数,比如fmt.Println
    • func main() {:这是一个关键字,后面对应是一个函数。main是主函数,即程序的入口。
    • fmt.Println(“hello, My name is Eastmount!”):调用fmt包中函数输出内容

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

    在这里插入图片描述
    输入命令“go build test01.go”,发现生成exe文件。

    在这里插入图片描述

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

    在这里插入图片描述

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

    在这里插入图片描述


    八.总结

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

    • 一.为什么我要学习Golang
    • 二.什么是Go语言
    • 三.如何学习Golang
    • 四.程序基本概念
    • 五.Golang发展史
    • 六.Windows系统Golang环境配置
    • 七.Golang语言快速入门

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

    • 读万卷书,行万里路。且行且珍惜,爱你们喔!

    在这里插入图片描述

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

    在这里插入图片描述

    (By:娜璋AI之家 Eastmount 2020-12-14 星期天 写于武汉 https://blog.csdn.net/Eastmount)


    参考文献:

    展开全文
  • 编程语言选择学哪个

    千次阅读 2019-08-19 18:19:05
    编程语言选择学哪个好? 1、java-大众化的编程语言 Java是历史最悠久的编程语言之一。Java可谓是Web应用程序、桌面程序、操作系统及更多系统的立足之本。这种面向对象、基于类的编程语言广泛使用;此外,它也是最受...
  • 第一门编程语言学什么? 如果你是一名刚入门的学生,大学通常都回上一门 C 语言课,无论是计算机专业,电子通信等理工科类专业都会学习作为基础入门语言,因为 C 语言是很多语言的母语言,很多语言都是借鉴的 C 语言...
  • 作为一名程序员,我们的目标之一是学习新技术和编程语言,但是你应该学习哪些语言呢?因为学习一门编程语言需要时间和耐心,所以你应该学习一门值得努力的语言;我的意思是,它可以奖励你更好的工作和职业发展。在...
  • 计算机语言入门先什么?

    千次阅读 2021-06-18 06:15:25
    刚想开始计算机学习的小白难免会有这样的困惑:计算机语言入门先什么?简单来讲,初学者需要先了解各种计算机语言,熟悉计算机组成原理,学习数据结构与算法、数据库、基础语法等等,这些都是必须经历的基础学习...
  • 最易/难学习的编程语言榜单出炉,C++最难

    万次阅读 多人点赞 2021-12-29 13:44:56
    最易学和最难的编程语言Top 5
  • 2021最新go语言学习路线

    千次阅读 2021-10-06 12:41:45
    去年圣诞节的前一周我开始编写Go语言学习路线图,路线图分为初阶、中阶和高阶三个层次,覆盖全面,因此内容很多,并且每个知识点都要提供相关的学习资料(最好是公开的,实在不成,收费的亦 学习线路图如下: 读书...
  • 今天就不发项目了,来和大家分享一下对于刚接触编程培训学习的小白来说,常常会问到一个问题:如何学习一门新的编程语言,关于学习编程语言这个主题,可能每个人都有不同的看法和做法,下面给初次接触编程语言学习的...
  • python和r语言各有各的难点...python和r语言哪个适合新手r语言入门较为简单,初学者不需要对编程有任何事先的了解,只需要简单的几行代码,r语言就能进行常用的数据分析操作并构建绚丽的图表;然而,r语言学习曲线...
  • JAVA与GO语言哪个更容易

    千次阅读 2020-12-29 14:26:30
    学习曲线容易MGo语言语法简单,包含了类C语法。效率: 快速的编译时间,开发效率和运行效率高,自由高效: 组合的思想、无侵入式的接口,强大的标准库. 二,GO与java的比较 编译语言,速度适中(2.67s),目前的大型...
  • 软件开发什么编程语言

    千次阅读 2022-04-25 16:10:29
    IT行业是块金饽饽,既等于金饭碗,也很吃香,对于想转行的人来说,因为IT培训机构的发展,学习编程成为了一个很好的选择,特别是现在互联网的发展及普及程度,都给编程带来了很多机会,IT技术已经深入到每一个人的...
  • Go语言为什么值得学习

    千次阅读 2022-03-08 21:47:07
    下面通过介绍我的亲身经历来介绍我为什么说 Go语言值得学习 我的经历 我是2015年夏天入行编程,使用Java语言做Android开发。15年正是创业热潮,那时候中关村创业大街如火如荼,那时候还没有小程序,出去玩就是地推...
  • VHDL语言学习

    千次阅读 2020-04-23 10:48:56
    但是由于语法复杂的人也变得少了起来,致使大多数同学学习verilog语言。但是,VHDL语法依旧具有很大的市场份额,如果说一个FPGA工程师不会VHDL语言,这V绝对是一个硬伤,所以这篇文章我们将给出学习VHDL语言的详细...
  • 即,你想要一门编程语言,可以在3个月内,通过自学来掌握语法,且能用到的知识来做点有意义的小项目。 那我推荐 Python,因为入门很容易,这点从雨后春笋般的面向中小学生的 Python 编程培训就可以看出来。你也...
  • 2、完后可以找到一个不错薪资的工作。 所以,我们应该先了解下这些开发语言的特征。 一、C C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行...
  • 自然语言处理(NLP)学习路线总结

    万次阅读 多人点赞 2019-03-20 21:01:53
    目录 自然语言处理概述 ...自然语言处理学习资料 1、自然语言处理概述 自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究人与计算机之间...
  • 学习汇编语言的必要性

    千次阅读 2020-01-27 18:59:39
    但我们仍要学习汇编语言,但学习汇编的目的不是用它去进行实实在在的程序设计,而是充分获得底层的编程体验和深刻理解机器运行程序的机理。 另外,对于一个人来说,不能没有常识,尽管常识不能直接挣钱吃饭,但它...
  • 04 Go语言实战开发一个WEB项目博客系统05 Go语言深度讲解(推荐 2018年1月更新)06 Go语言快速入门(2018年2月更新)07 Go语言协程流量统计(2018年3月更新)08 Go语言入门到实战视频教程(2018年3月更新)09 Go语言...
  • 其中,感知解决what,在机器学习和深度学习技术的推动下,各行各业的AI应用得到了长足的发展,如计算机视觉、自然语言处理等等;决策解决how,强化学习在游戏、机器人等领域取得了一定效果;认知解决why,知识图谱、...
  • R跟Python都是编程语言,也是目前数据处理这块比较热门的语言,有小伙伴之前问我这2种语言到底哪个好,学哪个能一劳永逸,其实不管是什么语言,他都有优缺点,到底学哪个主要看你的需求,另外还要看你的兴趣、精力和...
  • 自然语言处理的学习心得

    千次阅读 2019-07-31 12:04:06
    自然语言处理(NLP)作为AI领域皇冠上的明珠,主要涵盖两个过程,自然语言理解和自然语言生成,用一个公式来表达,即可表示为:NLP=NLU+NLG。以机器翻译为例,对于两种语言之间的翻译,机器翻译模型充当一个中间角色,...
  • 学习java哪个网课最好 Java是某些人可能会说很难学习语言之一,而其他人则认为它与其他语言具有相同的学习曲线。 两种观察都是正确的。 但是,由于Java具有平台无关性,因此在语言方面具有相当大的优势。 Java是...
  • 如果想快速掌握一门后端编程语言,而且未来想自己独立完成前后端的整体开发任务,那么PHP是不错的选择,一方面前端程序员学习PHP会更容易,另一方面PHP语言本身的开发技术体系比较成熟,有大量的案例可以参考。...
  • 大数据开发需要学习哪些编程语言

    千次阅读 2022-01-26 12:11:50
    大数据开发需要什么编程语言?随着大数据的持续升温,越来越多的人投身于大数据的浪潮之中,不少完全没基础的小伙伴,难免会有这样的疑问,从事大数据需要学习什么编程语言呢?其实这个问题没有固定的答案,像...
  • 学习编程语言最好的方法是什么

    万次阅读 多人点赞 2016-04-07 07:24:43
    每个人都有自己独特的学习模式,我们要做的第一件事,就是发现自己的学习模式。你的方式是什么?
  • 为什么要学习多种编程语言

    万次阅读 多人点赞 2019-02-23 11:51:38
    如果一直看我博文的人应该了解,我掌握的编程语言就不少,系统编程的C/C++,Web开发的Java和JavaScript,脚本语言Python和Shell,最近非常喜爱的全能语言Golang,迫于Android开发使用的Kotlin,iOS开发的O...
  • go语言和python哪个

    千次阅读 2020-12-22 10:32:22
    Q1:Python,Ruby,Go语言哪个更值得学习你这问的,你的是不是哪个语言更有发展前景是不?一,Python 简单易懂,入门快,偏向处理数据分析,图形化,脚本现今流行的爬虫,数据分析,django开发二,ruby, 简单易懂,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,059,391
精华内容 823,756
关键字:

哪个语言最好学