go語(yǔ)言spring,Go語(yǔ)言設(shè)計(jì)與實(shí)現(xiàn)

目前Java碼農(nóng),還有必要從0基礎(chǔ)學(xué)go語(yǔ)言嗎?

技多又不壓身,Java Python.go都是很好的語(yǔ)言,如果你有精力學(xué)一學(xué)沒(méi)壞處,而且編程語(yǔ)言一通百通,你是Java程序員,學(xué)go語(yǔ)言學(xué)起來(lái)又不困難。

成都創(chuàng)新互聯(lián)公司主營(yíng)泉州網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,重慶APP開(kāi)發(fā),泉州h5成都小程序開(kāi)發(fā)搭建,泉州網(wǎng)站營(yíng)銷(xiāo)推廣歡迎泉州等地區(qū)企業(yè)咨詢(xún)

打造自己的滲透測(cè)試框架—溯光

TrackRay簡(jiǎn)介

溯光,英文名“TrackRay”,意為逆光而行,追溯光源。同時(shí)致敬安全圈前輩開(kāi)發(fā)的“溯雪”,“流光”。

溯光是一個(gè)開(kāi)源的插件化滲透測(cè)試框架,框架自身實(shí)現(xiàn)了漏洞掃描功能,集成了知名安全工具:Metasploit、Nmap、Sqlmap、AWVS等。

溯光使用 Java 編寫(xiě),SpringBoot 作為基礎(chǔ)框架,JPA + HSQLDB嵌入式數(shù)據(jù)庫(kù)做持久化,Maven 管理依賴(lài),Jython 實(shí)現(xiàn) Python 插件調(diào)用,quartz 做任務(wù)調(diào)度,freemarker + thymeleaf 做視圖層,Websocket 實(shí)現(xiàn)命令行式插件交互。

框架可擴(kuò)展性高,支持 Java、Python、JSON 等方式編寫(xiě)插件,有“漏洞掃描插件”、“爬蟲(chóng)插件”、“MVC插件”、“內(nèi)部插件”、“無(wú)交互插件”和“可交互插件” 等插件類(lèi)型。

功能展示

主頁(yè)

登錄

任務(wù)創(chuàng)建

任務(wù)列表

任務(wù)詳情

無(wú)交互接口插件調(diào)用

MVC插件示例

交互式插件控制臺(tái)

MSF 控制臺(tái)

依賴(lài)環(huán)境

JDK 1.8

Python 2.7

Maven

Git

Metasploit

Nmap(建議安裝)

SQLMAP(建議安裝)

AWVS

**加粗為必須環(huán)境,沒(méi)有安裝程序則無(wú)法正常編譯運(yùn)行

不論是 Windows 還是 linux 一定需要先安裝 JDK1.8 和 Maven。安裝過(guò)程這里不做演示。保證 JDK 和 Maven 都在系統(tǒng)環(huán)境變量,能執(zhí)行java -version 和 mvn --version即可。

安裝過(guò)程

第一步

手動(dòng)啟動(dòng) AWVS 服務(wù)

登錄后臺(tái),生成一個(gè)API密匙。

復(fù)制密匙和 AWVS 的地址。

找到web/src/main/resources/application.properties配置文件。

修改如下部分

第二步

找到你 python 的第三方庫(kù)目錄。

Windows 的一般在 python 安裝目錄下的/Lib/site-packages

Linux 下可以通過(guò)輸出 sys.path 來(lái)找第三方包路徑

我的是 D:/Python2/Lib/site-packages

同樣找到web/src/main/resources/application.properties配置文件。

修改python.package.path參數(shù)

第三步

安裝 Maven 后找到倉(cāng)庫(kù)位置。

如果沒(méi)有在 settings.xml 里配置指定倉(cāng)庫(kù)目錄,默認(rèn)會(huì)在當(dāng)前用戶(hù)目錄中生成一個(gè) .m2的目錄

找到倉(cāng)庫(kù)目錄后修改 application.properties 的 maven.repository.path參數(shù)

第四步

這個(gè)是 DNSLOG 回顯檢測(cè)漏洞時(shí)需要的。

去 ceye.io 注冊(cè)一個(gè)賬號(hào),拿到給你分配的域名和 TOKEN。

修改配置文件

第五步

啟動(dòng) msf 和 sqlmapapi。

如果你是 kali 操作系統(tǒng),可以直接運(yùn)行startdep.sh。

如果是其他系統(tǒng),則要找到 metasploit 和 sqlmap 的目錄分別執(zhí)行

啟動(dòng)成功后修改配置文件

第六步

編譯打包程序

等待依賴(lài)下載完成和編譯完成,如果以上操作都沒(méi)有出現(xiàn)問(wèn)題則會(huì)提示 BUILD SUCCESS

編譯成功后會(huì)在當(dāng)前目錄打包一個(gè)trackray.jar就是溯光的主程序。

然后直接執(zhí)行startup.bat或startup.sh溯光就會(huì)啟動(dòng)服務(wù)。

沒(méi)有拋出異常或ERROR日志,訪問(wèn) 8080 端口正常。

服務(wù)啟動(dòng)正常后,登錄 iZone 社區(qū)賬號(hào)。

**開(kāi)發(fā)插件建議使用 Intellij IDEA IDE,需要安裝 lombok 插件。

目錄結(jié)構(gòu)

插件

AbstractPlugin

這是交互式插件和非交互式插件的父類(lèi)。

BASE常量

其中的靜態(tài)常量 BASE 是 /resources/include/ 的所在目錄。

如果你的插件需要額外的靜態(tài)資源,那么你可以在 /resources/include 目錄里創(chuàng)建一個(gè)和插件 KEY 相同的文件夾,便于識(shí)別,如果沒(méi)有在 @Plugin 注解中設(shè)置 value 則默認(rèn)的插件 KEY 就是當(dāng)前類(lèi)名首字母小寫(xiě)。

如 Typecho001 = typecho001

check(Map param)

這是用于檢驗(yàn)是否合規(guī)的方法,需要被強(qiáng)制重寫(xiě),當(dāng)返回 true 時(shí)才會(huì)調(diào)用 start() 方法

param 參數(shù)是從前臺(tái)傳過(guò)來(lái)的參數(shù)鍵值對(duì)。

常被用于檢驗(yàn)參數(shù)格式是否正確或漏洞是否存在。

after()

在 start() 方法之前調(diào)用

before()

在 start() 方法之后調(diào)用

start()

這是一個(gè)抽象方法,所有繼承了該類(lèi)的子類(lèi)都需要重寫(xiě)這個(gè)方法。

在 check 方法 通過(guò)后會(huì)調(diào)用 start() 方法

start() 方法返回值最終會(huì)會(huì)當(dāng)做插件結(jié)果,響應(yīng)給前臺(tái)。

shell()

調(diào)用當(dāng)前系統(tǒng) shell 來(lái)輔助完成插件功能。

executor()

插件執(zhí)行的主方法

crawlerPage

http請(qǐng)求對(duì)象(不推薦使用)

fetcher

執(zhí)行 http 請(qǐng)求對(duì)象(不推薦使用)

errorMsg

當(dāng)校驗(yàn)不通過(guò)時(shí),返回給前臺(tái)的信息。

param

前臺(tái)傳過(guò)來(lái)的參數(shù)鍵值對(duì)

requests

HTTP 發(fā)包工具(推薦使用)

hackKit

hack 常用工具包

無(wú)交互插件

無(wú)交互插件需要你填寫(xiě)好所有要填寫(xiě)的參數(shù),直接請(qǐng)求接口來(lái)執(zhí)行插件。

默認(rèn)需要去繼承 CommonPlugin類(lèi)。

這是一個(gè)抽象類(lèi),繼承了 AbstractPlugin

主要多出來(lái)兩個(gè)屬性:request 和 response。

繼承了 CommonPlugin 的類(lèi)可以通過(guò)調(diào)用這兩個(gè)屬性來(lái)控制請(qǐng)求和響應(yīng)內(nèi)容。

無(wú)交互插件同時(shí)也需要使用 @Rule 和 @Plugin 插件,這兩個(gè)注解后面會(huì)講到。

在 ,找到相應(yīng)的插件填寫(xiě)好參數(shù)提交即可完成調(diào)用。

或直接調(diào)用接口。

交互式插件

交互式插件一般在命令行控制臺(tái)中調(diào)用,可以允許你通過(guò)命令行交互來(lái)完成插件的調(diào)用。

交互式插件由 Websocket 實(shí)現(xiàn),想要寫(xiě)一個(gè)交互式插件,首先要繼承 WebSocketPlugin 類(lèi)。

同時(shí)設(shè)置 @Rule 注解的 websocket 參數(shù)為 true ,如果需要異步交互需要將 sync 也設(shè)置為 true。

內(nèi)部插件

內(nèi)部插件是不可以通過(guò)外部去調(diào)用的,需要繼承 InnerPlugin 并使用 @Plugin 注解,通常在漏洞掃描時(shí)時(shí)會(huì)調(diào)用。

例如 “網(wǎng)頁(yè)爬蟲(chóng)”,“指紋識(shí)別”,“端口掃描” 等,都是通過(guò)調(diào)用內(nèi)部插件實(shí)現(xiàn)的。

還有用于檢測(cè) SSRF 等漏洞用的 FuckCeye 插件也屬于內(nèi)部插件。

通過(guò) spring 的自動(dòng)注入,來(lái)注入內(nèi)部插件到當(dāng)前對(duì)象。

例子可參考 WebLogicWLSRCE.java

爬蟲(chóng)插件

爬蟲(chóng)插件會(huì)在掃描任務(wù)被勾選“網(wǎng)頁(yè)爬蟲(chóng)”時(shí)調(diào)用,每爬取一條請(qǐng)求就會(huì)調(diào)用一次爬蟲(chóng)插件。

爬蟲(chóng)插件需要繼承 CrawlerPlugin,繼承該類(lèi)必須重寫(xiě) check 和 process 方法。

check 方法用于檢驗(yàn)請(qǐng)求是否符合插件規(guī)則,以免產(chǎn)生多余請(qǐng)求。

當(dāng) check 方法 返回為 true 時(shí)會(huì)調(diào)用 process 方法。

process 方法里寫(xiě)插件主要檢測(cè)代碼。

addVulnerable()

當(dāng)插件檢測(cè)出漏洞時(shí),可以通過(guò)調(diào)用 addVulnerable() 方法來(lái)向數(shù)據(jù)庫(kù)插入一條漏洞。

requests

requests 屬性為請(qǐng)求工具包,處理 https 和 http 都很方便。

response

response 屬性為當(dāng)前爬蟲(chóng)得到的 HTTP 響應(yīng)。

task

task 屬性為當(dāng)前任務(wù)對(duì)象,如果你的爬蟲(chóng)插件不是檢測(cè)漏洞而希望是檢測(cè)一些敏感信息的話(huà)可以修改 task.getResult() 里的屬性。

參考 FingerProbe.java 或 InfoProbe.java。

target

爬蟲(chóng)爬取到的 URL 對(duì)象。

fetcher crawlerPage

http 請(qǐng)求對(duì)象(不建議使用)。

漏洞掃描插件

漏洞掃描插件會(huì)在,掃描任務(wù)中勾選“漏洞攻擊模塊”時(shí)調(diào)用。

漏洞掃描插件分為三種

1.獨(dú)立插件

獨(dú)立的漏洞掃描插件需要繼承 AbstractExploit 并使用 @Plugin 或 @Exploit

AbstractExploit 中有以下需要了解的方法和屬性。

requests

http / https 發(fā)包工具

target 當(dāng)前掃描任務(wù)的地址。

task

當(dāng)前掃描任務(wù)對(duì)象。

check()

check 是一個(gè)抽象方法,需要被子類(lèi)強(qiáng)制重寫(xiě)。

該方法一般用于檢驗(yàn)是否符合當(dāng)前漏洞掃描插件的規(guī)則,以免產(chǎn)生多與請(qǐng)求。

attack()

attack 也是一個(gè)抽象方法,需要被子類(lèi)強(qiáng)制重寫(xiě)。

該方法是檢測(cè)漏洞的主方法。

before()

在 attack 方法前執(zhí)行

after()

在 attack 方法后執(zhí)行

addVulnerable()

當(dāng)插件檢測(cè)出漏洞時(shí),可以通過(guò)調(diào)用 addVulnerable() 方法來(lái)向數(shù)據(jù)庫(kù)插入一條漏洞。

fetcher crawlerPage

http 請(qǐng)求對(duì)象(不建議使用)。

2.漏洞規(guī)則

位于

實(shí)際上這是一個(gè)“內(nèi)部插件”,會(huì)在勾選漏洞模塊攻擊時(shí)調(diào)用。

有一些漏洞檢測(cè)方法很簡(jiǎn)單,只通過(guò)簡(jiǎn)單的判斷響應(yīng)體就能識(shí)別出來(lái),也就沒(méi)有必要再去寫(xiě)一個(gè)獨(dú)立的插件而占用空間了。

在 doSwitch() 方法中會(huì)先去根據(jù)當(dāng)前任務(wù)的指紋識(shí)別結(jié)果走一遍 switch 流程。

swtich 的每一個(gè) case 都是 WEB 指紋的枚舉對(duì)象。

當(dāng) switch 找到當(dāng)前任務(wù) WEB 指紋對(duì)應(yīng)的 case 后,case 內(nèi)的代碼會(huì)通過(guò)構(gòu)建一個(gè)漏洞規(guī)則添加到 loaders 集合里。

如果規(guī)則是通用的,可以寫(xiě)在 switch 的外面。

3.kunpeng JSON插件

kunpeng 是一個(gè) go 語(yǔ)言編寫(xiě)的 poc 測(cè)試框架,這里我對(duì) kunpeng 的 JSON 插件做了一個(gè)支持。

只需要按照 kunpeng json 插件的格式規(guī)范創(chuàng)建一個(gè) json 文件到 /resources/json 目錄。

在掃描任務(wù)勾選“漏洞攻擊模塊”時(shí)會(huì)被調(diào)用,或通過(guò) MVC 插件調(diào)用 。

MVC 插件

位于

MVC 插件的特點(diǎn)在于,他可以像是在寫(xiě)一個(gè)功能一樣,而非簡(jiǎn)單的接口式調(diào)用。

MVC 插件需要繼承 MVCPlugin 類(lèi),并使用 @Rule,@Plugin 注解。

MVCPlugin 內(nèi)置了一個(gè) ModelAndView 對(duì)象, 是 SpringMVC 提供的。

可以通過(guò) setViewName() 來(lái)指定視圖層的網(wǎng)頁(yè)模板。

通過(guò) addObject(key,value) 向視圖層網(wǎng)頁(yè)模板注入?yún)?shù)。

這里的視圖層是使用 thymeleaf 實(shí)現(xiàn)的,需要懂 thymeleaf 的語(yǔ)法。

例子可以參考:com.trackray.module.inner.JSONPlugin

繼承 MVCPlugin 必須要重寫(xiě)一個(gè) index 方法,這是插件的入口。

如果需要寫(xiě)其他的功能,就得再創(chuàng)建一個(gè) public 返回值為 void 的無(wú)參方法。

并且要在該方法上使用 @Function 注解,該注解的 value 參數(shù)如果不填寫(xiě)的話(huà)則默認(rèn)的 requestMapping 地址為方法名。

例如

最后還需要在 /module/src/main/resources/templates 創(chuàng)建一個(gè)目錄名為插件 KEY 的目錄。

里面存放擴(kuò)展名為 .html 的模板文件。

Python 插件

python 插件有兩種實(shí)現(xiàn)方式。

1.通過(guò)命令行實(shí)現(xiàn)

這種方式最為簡(jiǎn)單,通過(guò)在 include 里寫(xiě)一個(gè) python 腳本。

然后在插件里調(diào)用 shell() 方法來(lái)執(zhí)行系統(tǒng)命令。

案例可參考 com.trackray.module.plugin.windows.smb.MS17010

但這樣還需要再寫(xiě) java 的代碼,對(duì)于沒(méi)有學(xué)過(guò) java 的人來(lái)說(shuō)很不友好。

2.通過(guò)jython實(shí)現(xiàn)

jython 是一個(gè) Python 語(yǔ)言在 Java 中的完全實(shí)現(xiàn)。

我將它的調(diào)用過(guò)程寫(xiě)成了一個(gè)交互式插件。

你可以通過(guò)在 /resources/python/ 目錄下安裝如下規(guī)范去創(chuàng)建一個(gè) python 文件。

在這個(gè) python 文件中需要寫(xiě)兩個(gè)方法。

關(guān)于注解

@Rule

一般用在“可交互插件”和“無(wú)交互插件”類(lèi)上。

@Plugin

WEB指紋

這里順便再說(shuō)一下如何添加指紋庫(kù)。

指紋庫(kù)位于 base 模塊,是一個(gè)枚舉類(lèi)。

可以在首部或尾部添加一條新的枚舉,盡量使用 $ 開(kāi)頭。

第一個(gè)參數(shù)是 指紋的名稱(chēng),如果第二個(gè)參數(shù)是 String 類(lèi)型則是該指紋的說(shuō)明。

FingerBean 類(lèi)是指紋匹配對(duì)象。

2022 年將成為主導(dǎo)的頂級(jí)編程語(yǔ)言

編程語(yǔ)言是程序員(開(kāi)發(fā)人員)用來(lái)與計(jì)算機(jī)進(jìn)行通信的計(jì)算機(jī)語(yǔ)言。它是用任何特定語(yǔ)言(C、C++、Java、Python)編寫(xiě)的一組指令,用于執(zhí)行特定任務(wù)。編程語(yǔ)言主要用于開(kāi)發(fā)桌面應(yīng)用程序、網(wǎng)站和移動(dòng)應(yīng)用程序。以下是 2022 年最流行的頂級(jí)語(yǔ)言。

Python

Python 是由 Guido van Rossum 于 1980 年代后期在荷蘭構(gòu)建的。Python 最初是作為 Java 在行業(yè)中的競(jìng)爭(zhēng)對(duì)手而構(gòu)建的,后來(lái)逐漸流行起來(lái)。目前,Python 在研究人員和開(kāi)發(fā)人員社區(qū)中都非常受歡迎。Python 在 IEEE Spectrum 的語(yǔ)言排名中名列前茅,得分為滿(mǎn)分 100。此外,Python 也很受尊重,支持率高達(dá) 44.1%。

Python 幾乎適用于任何事物。Django 和 Flask 可用于 Web 開(kāi)發(fā),而 Jupyter 和 Spyder 等科學(xué)工具則用于分析和研究目的。如果您喜歡自動(dòng)化,Selenium 可以幫助您!該語(yǔ)言的靈活性使 Python 幾乎可以在任何地方使用。到目前為止,這些是 Python 中比較流行的產(chǎn)品。Python 的巨大支持基礎(chǔ)(僅次于 JavaScript)產(chǎn)生了大量使用該語(yǔ)言的包、框架,甚至是成熟的開(kāi)源軟件。

總的來(lái)說(shuō),Python 可能對(duì)數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)有最大的支持。雖然還有其他語(yǔ)言(如 R 和 MATLAB)提供競(jìng)爭(zhēng),但 Python 是數(shù)據(jù)科學(xué)領(lǐng)域的嚴(yán)格統(tǒng)治者。機(jī)器學(xué)習(xí)中使用的大多數(shù)框架和庫(kù)都僅用 Python 編寫(xiě),如果想要學(xué)習(xí)機(jī)器學(xué)習(xí)(或一般的數(shù)據(jù)科學(xué)),它可能是最好的語(yǔ)言。

JavaScript

JavaScript 在這一點(diǎn)上幾乎是行業(yè)領(lǐng)導(dǎo)者。JavaScript 最初于 1994 年作為 Netscape Navigator(當(dāng)時(shí)最好的瀏覽器之一)的腳本語(yǔ)言而構(gòu)建,它迅速崛起。直到 2008 年,Google 才在為 Google Chrome 構(gòu)建 V8 引擎時(shí)設(shè)計(jì)了現(xiàn)代 JavaScript。最初由 Netscape 構(gòu)建為 Java 的競(jìng)爭(zhēng)對(duì)手,JavaScript 現(xiàn)在在開(kāi)發(fā)領(lǐng)域擁有自己的空間。JavaScript 因其流行而被廣泛認(rèn)為是“互聯(lián)網(wǎng)語(yǔ)言”。JavaScript 在開(kāi)發(fā)者社區(qū)中的支持率最高——高達(dá) 67.7%。一般來(lái)說(shuō),JavaScript 適用于任何類(lèi)型的開(kāi)發(fā)活動(dòng),如移動(dòng)應(yīng)用程序開(kāi)發(fā)、Web 開(kāi)發(fā)、桌面應(yīng)用程序開(kāi)發(fā)等。

JavaScript 有各種各樣的庫(kù)和框架,可以在開(kāi)發(fā)過(guò)程中使用。有用于前端開(kāi)發(fā)的 Angular、Vue 和 React,而 Node.js 是一種用于后端開(kāi)發(fā)的非常靈活的語(yǔ)言。Jest 和 Mocha 是兩個(gè)靈活的工具,可幫助設(shè)置單元測(cè)試以檢查功能是否按預(yù)期工作。當(dāng)然,如果您對(duì)其中任何一個(gè)都不太滿(mǎn)意,您可以在前端使用普通的 HTML、CSS 和 JavaScript——就這么簡(jiǎn)單!由于來(lái)自世界各地開(kāi)發(fā)人員的巨大支持,JavaScript 擁有任何語(yǔ)言都可以夸耀的最多數(shù)量的支持包。盡管如此,人們繼續(xù)構(gòu)建越來(lái)越多的包,以增加使用該語(yǔ)言的便利性。

Java

Java 由 James Gosling、Mike Sheridan 和 Patrick Naughton 于 1991 年構(gòu)建為“Oak”語(yǔ)言,是第一種在全球產(chǎn)生重大影響的語(yǔ)言。雖然新的編程語(yǔ)言使用與 C/C++ 相同的格式,但它融入了某些新思想,使其對(duì)更多人更具吸引力。Java 運(yùn)行的原則是“一次編寫(xiě),隨處運(yùn)行”——這意味著具有不同硬件和操作系統(tǒng)配置的系統(tǒng)可以輕松運(yùn)行 Java 程序。

Java 也有各種各樣的庫(kù)和框架,它們?cè)诘讓邮褂?Java。Java 用于通過(guò) Spring 和 Hibernate 進(jìn)行應(yīng)用程序開(kāi)發(fā)。JUnit 幫助我們?yōu)?Java 項(xiàng)目設(shè)置單元測(cè)試。最重要的是,Java 被用于開(kāi)發(fā)原生 Android 應(yīng)用程序(Android SDK 本身由 Java 開(kāi)發(fā)工具包或 JDK 提供支持)。Java 可能是大多數(shù)人在大學(xué)或?qū)W校的計(jì)算機(jī)編程入門(mén)課程中被介紹的語(yǔ)言。Java 是用于向大眾教授面向?qū)ο缶幊痰恼Z(yǔ)言。

Java 在分析和研究領(lǐng)域也備受推崇。Java 唯一的問(wèn)題是目前該語(yǔ)言的支持包和項(xiàng)目很少。很少有社區(qū)參與——這是大多數(shù)主流語(yǔ)言都有的。盡管如此,Java 是一種非常容易掌握和學(xué)習(xí)的語(yǔ)言——這在一定程度上解釋了該語(yǔ)言的吸引力。但是,要掌握某種形式的語(yǔ)言確實(shí)需要一些時(shí)間。

C++

也許人們?cè)诒疚闹锌梢云诖淖盍钊苏痼@的答案之一是 C++。盡管是大多數(shù)人用來(lái)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法概念的語(yǔ)言,但該語(yǔ)言本身在實(shí)際世界中卻很少使用。C++ 最初由 Bjarne Stroustrup 于 1982 年創(chuàng)建,作為 C 編程語(yǔ)言的擴(kuò)展,在接下來(lái)的幾年中繼續(xù)聲名鵲起。

C++ 可用于分析、研究以及 游戲 內(nèi)開(kāi)發(fā)。流行的 游戲 開(kāi)發(fā)引擎——虛幻引擎——使用 C++ 作為腳本語(yǔ)言,用于構(gòu)建 游戲 時(shí)可以定義的所有功能。C++ 在軟件開(kāi)發(fā)中也有廣泛的用途。介于面向?qū)ο蠓椒ê兔嫦蚍椒ǚ椒ㄖg,C++ 可以靈活地使用它生成的軟件的性質(zhì)。在 TIOBE 指數(shù)中排名第 4 意味著 C++ 至今仍具有吸引力。C++也廣泛用于系統(tǒng)軟件開(kāi)發(fā),比其他語(yǔ)言更容易理解。在操作系統(tǒng)等敏感領(lǐng)域使用 C++ 的主要原因是 C++ 程序的編譯時(shí)間非常短。

C++ 可能擁有所有語(yǔ)言中最大的學(xué)習(xí)社區(qū)。大多數(shù)學(xué)生會(huì)開(kāi)始他們的算法課程,用 C++ 構(gòu)建樹(shù)、鏈表、堆棧、隊(duì)列和許多其他數(shù)據(jù)結(jié)構(gòu)。當(dāng)然,只要注意細(xì)節(jié),它就很容易上手和學(xué)習(xí),也很容易掌握。

Typescript

TypeScript 是 JavaScript 的超集,具有與 JavaScript 幾乎相同的應(yīng)用程序。TypeScript 可用于 Web 開(kāi)發(fā)、移動(dòng)應(yīng)用程序開(kāi)發(fā)、桌面應(yīng)用程序開(kāi)發(fā)等。在 StackOverflow 的最受歡迎語(yǔ)言列表中,TypeScript 是第二受歡迎的語(yǔ)言,受到 67.1% 的開(kāi)發(fā)人員的喜愛(ài)(僅次于 Rust)。

TypeScript 主要是一種用于開(kāi)發(fā)的語(yǔ)言,因此它對(duì)科學(xué)界沒(méi)有太大吸引力。但是,由于 TypeScript 的新功能,可以預(yù)期它可能會(huì)激發(fā)更大程度的研究興趣。該語(yǔ)言的技能上限比 JavaScript 低得多——并且 JavaScript 的許多“難以理解”的行為已在 TypeScript 中得到簡(jiǎn)化。換句話(huà)說(shuō),您將頭撞到墻上的機(jī)會(huì)略小。

Golang

新語(yǔ)言正在迅速崛起,新的競(jìng)爭(zhēng)者即將挑戰(zhàn) JavaScript 和 Python 擁有的寶座。由谷歌(兩者的名字中都有“Go”?。┲饕菫榱送七M(jìn)函數(shù)式編程的事業(yè),Golang 在短時(shí)間內(nèi)建立了大量的追隨者。Golang 已經(jīng)成為 StackOverflow 第五大最適合學(xué)習(xí)的語(yǔ)言,受到 62.3% 的開(kāi)發(fā)人員的喜愛(ài)。

Golang 用于多個(gè)領(lǐng)域,用于開(kāi)發(fā)強(qiáng)大的軟件以及用于 Web 和移動(dòng)應(yīng)用程序的后端。目前,Golang 甚至支持一些基本的 Web 開(kāi)發(fā)。雖然它仍處于取代 JavaScript 作為網(wǎng)絡(luò)語(yǔ)言的階段,但它正在迅速成為支持下一階段網(wǎng)絡(luò)的語(yǔ)言。

Golang 比此列表中的其他語(yǔ)言更難學(xué)習(xí)。此外,Golang 是一種開(kāi)源語(yǔ)言,每次重大更新都會(huì)頻繁更改,因此保持更新是必要的。

Dart

Dart 是工業(yè)領(lǐng)域發(fā)展最快的語(yǔ)言之一。谷歌在語(yǔ)言領(lǐng)域的貢獻(xiàn)顯著增加,以與微軟的 TypeScript 日益流行的競(jìng)爭(zhēng)相抗衡。Dart 因其簡(jiǎn)單性而受到世界各地程序員的高度喜愛(ài)。

Dart 用于多平臺(tái)應(yīng)用程序開(kāi)發(fā)。與 JavaScript 一樣,Dart 用于構(gòu)建任何人都可以使用電子設(shè)備運(yùn)行的軟件。目前 Dart 最著名的用途是 Flutter 框架,F(xiàn)lutter 是一種用于移動(dòng)應(yīng)用程序開(kāi)發(fā)的語(yǔ)言。最近的谷歌趨勢(shì)表明,F(xiàn)lutter 盡管是一個(gè)較新的框架,但比 React Native 更受歡迎,后者是業(yè)界已經(jīng)建立的移動(dòng)應(yīng)用程序開(kāi)發(fā)框架。

Dart 比 JavaScript 更容易學(xué)習(xí),并且能夠很好地簡(jiǎn)化甚至難以理解的案例。隨著市場(chǎng)上的 TypeScript 和 Dart 的出現(xiàn),程序員在選擇一種他們真正想要學(xué)習(xí)的語(yǔ)言時(shí)會(huì)面臨多種選擇。

編程有哪些語(yǔ)言

編程語(yǔ)言有:Python語(yǔ)言、C語(yǔ)言、Java語(yǔ)言、PHP語(yǔ)言、GO語(yǔ)言等。編程語(yǔ)言有很多種,總的來(lái)說(shuō)可以劃分成三類(lèi):機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言。目前使用的較多的是匯編語(yǔ)言和高級(jí)語(yǔ)言。編程語(yǔ)言也就是計(jì)算機(jī)語(yǔ)言,通過(guò)編程語(yǔ)言更好的控制計(jì)算機(jī)。計(jì)算機(jī)能識(shí)別的語(yǔ)言有機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言。其中高級(jí)語(yǔ)言使用的較多一些,常見(jiàn)高級(jí)語(yǔ)言也非常多,比如:Perl,pascal,lisp,C等等。而且每種語(yǔ)言都有自己的優(yōu)勢(shì),比如Java語(yǔ)言,簡(jiǎn)單易學(xué),有很強(qiáng)的交互性,跨平臺(tái)性也非常強(qiáng),常用來(lái)開(kāi)發(fā)與商業(yè)相關(guān)的網(wǎng)絡(luò)應(yīng)用。

Go語(yǔ)言與Java之間性能相差多少

Java是一門(mén)較為成熟的語(yǔ)言,相對(duì)于C++要簡(jiǎn)單的多,C++里沒(méi)有內(nèi)存回收,所以比較麻煩,Java加入了內(nèi)存自動(dòng)回收,簡(jiǎn)單是簡(jiǎn)單,卻變慢了,go語(yǔ)言是一門(mén)新興的語(yǔ)言,現(xiàn)在版本是1.9 ? go語(yǔ)言的性能比Java要好,但由于出現(xiàn)晚,資料較Java少,有些Java的功能go也沒(méi)有,并且有許多的軟件是支持Java但支持go的很少.所以在短期內(nèi)Java是比go通用的

C語(yǔ)言的最大的優(yōu)勢(shì)是時(shí)間性能好,只比匯編慢20%~30%,C++最大的優(yōu)勢(shì)是快且面向?qū)ο?Java最大的優(yōu)勢(shì)是垃圾回收機(jī)制,GO語(yǔ)言的目標(biāo)是具備以上三者的優(yōu)勢(shì)

Go微服務(wù)--常見(jiàn)的微服務(wù)框架

近幾年誕生了很多微服務(wù)框架,比如JAVA的Spring Cloud、Dubbo;Golang的GoKit和GoMicro以及NodeJs的Seneca。幾乎每種主流語(yǔ)言都有其對(duì)應(yīng)的微服務(wù)框架。

Go在微服務(wù)框架中有其獨(dú)特的優(yōu)勢(shì),至于優(yōu)勢(shì)在哪,自行g(shù)oogle。

1、GoKit框架

這是一個(gè)工具包的集合,可以幫助攻城獅構(gòu)建強(qiáng)大、可靠和可維護(hù)的微服務(wù)。提供了用于實(shí)現(xiàn)系統(tǒng)監(jiān)控和彈性模式組件的庫(kù),例如日志、跟蹤、限流、熔斷等。

基于這個(gè)框架的應(yīng)用程序架構(gòu)由三個(gè)主要的部分組成:

傳輸層:用于網(wǎng)絡(luò)通信,服務(wù)通常使用HTTP或者gRPC等網(wǎng)絡(luò)傳輸協(xié)議,或者使用NATS等發(fā)布訂閱系統(tǒng)相互通信。

接口層:是服務(wù)器和客戶(hù)端的基本構(gòu)建塊。每個(gè)對(duì)外提供的接口方法都會(huì)定義為一個(gè)Endpoint,一遍在服務(wù)器和客戶(hù)端之間進(jìn)行網(wǎng)絡(luò)通信,每個(gè)端點(diǎn)使用傳輸層通過(guò)HTTP或gRPC等具體通信模式對(duì)外提供服務(wù)

服務(wù)成:具體的業(yè)務(wù)邏輯實(shí)現(xiàn)

2、GoMicro框架

這是一個(gè)基于Go語(yǔ)言實(shí)現(xiàn)的插件化RPC微服務(wù)框架。提供了服務(wù)發(fā)現(xiàn)、負(fù)載均衡、同步傳輸、異步通信以及事件驅(qū)動(dòng)等機(jī)制,嘗試簡(jiǎn)化分布式系統(tǒng)之間的通信,讓開(kāi)發(fā)者更專(zhuān)注于自身業(yè)務(wù)邏輯的開(kāi)發(fā)。

GoMicro的設(shè)計(jì)哲學(xué)是可插拔的架構(gòu)理念,提供了可快速構(gòu)建系統(tǒng)的組件,并且可以根據(jù)自身的需求對(duì)GoMicro提供的默認(rèn)實(shí)現(xiàn)進(jìn)行定制。所有插件都可在倉(cāng)庫(kù)github.com/micro/go-plugins 中找到。

當(dāng)前題目:go語(yǔ)言spring,Go語(yǔ)言設(shè)計(jì)與實(shí)現(xiàn)
網(wǎng)站網(wǎng)址:http://muchs.cn/article34/hcihpe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、用戶(hù)體驗(yàn)、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)