學好一門編程語言是十分不容易的,但是如果學會了,它的實用性是很強的,下面我為大家整理了學好一門編程語言的辦法,大家可以參考借鑒。
成都創新互聯主營云龍網站建設的網絡公司,主營網站建設方案,手機APP定制開發,云龍h5小程序設計搭建,云龍網站營銷推廣歡迎云龍等地區企業咨詢
如何學好一門編程語言?
一、多總結
多總結才能加深理解、增強記憶。舉例,Go 中有 slice、map、channal 類型,它們都可以用 make 生成實例,但 slice 和 map 還可以用以下形式初始化,也是編程規范中建議的初始化方式:
colors := map[string]string{}
slice := []int{}
但注意了,channal 則沒有這樣的語法:msg := chan string{}
上面兩句是生成實例,表示空集合,但下面兩句則表示實例不存在,值為 nil
var colors map[string]string
var slice []int
另外,結構體指針 slice 還可以象下面這樣初始化,結構體實例不用明確地指定類型(使用了類型推導)、不用明確地取地址運算()。
type Product struct {
name string
price float64
}
products := []*Product{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}
看到沒有,如果不經常總結,這一圈學下來會把你整的稀里糊涂的。
二、多比較
學一門新語言一定要與你之前已經熟悉的語言經常作比較,找出它們的相同與不同,這樣才能加深記憶和理解,否則學完之后腦子里會一片混亂,搞不清誰是誰非了。
就拿數組來說吧,在 Java、Scala、Go 中定義、實例化、賦值是不一樣的。
//Java
int[] arr;//定義數組,不可以指定數組長度
arr = new int[5];//創建數組對象(實例化),指定數組長度
arr[1] = 8;//賦值
//Scala
val arr = new Array[Int](5) //數組在Scala里用的是泛型類,構造函數參數指定數組大小
arr(1) = 8 //賦值,注意用的是括弧
//Go
arr := [5]int{} //創建數組,初始化5個元素都為0,注意如果不指定數組長度,則是另外一種類型Slice
arr[1] = 8 //賦值
再比如 Map 在 Scala 與 Go 語言里定義、初始化、訪問也是不同的,作了以下比較后印象會非常深刻,把它們記下來,這樣以后使用就不會搞混了。
//Scala
val capital = Map("France" - "Paris", "Japan" - "Tokyo")
println(capital.get("France"))
//Go
capital := map[string]string{"France": "Paris", "Japan": "Tokyo"}
fmt.Println(capital["France"])
Go 同時給多個變量賦值在 Scala 里可以用模式匹配做到,如下:
//Scala(使用樣本類的模式匹配)
case class Tao(name: String, age: Int);
val Tao(myName, myAge) = Tao("taozs", 18);
println(myName)
println(myAge)
//Go
myName, myAge := "taozs", 18
fmt.Println(myName)
fmt.Println(myAge)
//Scala(使用元組的模式匹配)
val (myNumber, myString) = (123, "abe")
println(myNumber)
println(myString)
//Go
myNumber, myString := 123, "abe"
fmt.Println(myNumber)
fmt.Println(myString)
以下是 Scala 和 Go 定義和實現函數的區別:
//Scala
val increase: Int = Int = (x: Int) = x + 1
println(increase(8))
//Go
var increase func(int) int = func(x int) int { return x + 1 }
fmt.Println(increase(8))
除了在 Scala 和 Go 里都可以類型推導外,在 Scala 里還可以這樣定義函數:
//Scala
val increase = (_: Int) + 1
為方便自己將來隨時查閱,可以建立下面這樣的對比表格,描述不一定要求規范,自己能看懂就行。
三、轉變思維方式,
學會用這門語言去思考
學會用語言去思考是關鍵。如果你以前是學 C 的,轉學 Java,你一定要改變以前面向過程的思維,學會用面向對象的思維去分析問題;以前學 Java 的,轉學 Scala 則要學會用函數式的編程思維解決問題。
舉一個函數式編程的例子,以下是 Java 語言常用的 for 循環,循環變量從 1 到 10 執行 10 次循環體:
// 命令式編程
for (int i = 1; i 10; i++) {
// 此處是循環體做10次
}
這被稱為命令式編程 (Imperative Programming),但學了 Scala 的函數式編程 (Functional Programming) 后,解決同樣的問題,我們可以換一種思維:構建 1 到 10 的列表序列,針對列表中的`每個元素分別執行函數,如下:
//函數式編程
val autoList = (1 to 10).map(i = /*此處是函數體,針對1到10的每一個分別調用 1次*/)
已經習慣了 Java 編程的,對 Scala 的函數式編程、樣本類、模式匹配、不可變對象、隱式轉換等需要一個逐步適應的過程,要漸漸學會用它們思考和解決問題。
再舉個 Scala 與 Go 思維方式不同的例子,要實現對一個字符串里的每個字符加 1 的操作,Scala 里可以這樣:
"abc".map(cc = cc + 1)
"abc"是一個字符串對象,調用它的方法 map,這是純面向對象的思維,但在 Go 里就要轉變為面向過程的思維:
name := "abc"
second := strings.Map(func(x rune) rune {
return x + 1
}, name)
注意,這里的 strings 是包 (package),調用它的公共函數 Map,被人操作的對象 name 字符串作為函數參數傳入。Go 提供的函數 len、cap、append、 等其實都是面向過程的,雖然 Go 也提供有面向對象的支持,已經習慣了面向對象編程的,剛開始學 Go 語言需要特別留意這一點。
四、多看開源代碼
學一門語言就是學一種思維方式,如今 GitHub 上可下載的開源代碼海量級,通過看別人的代碼,學習別人是如何解決問題的,養成用該語言思考的習慣,另外還能學習到一些非常有用的技巧,比如我在看一個 Go 語言性能測試框架代碼時看到有以下寫法:
func main() {
defer profile.Start().Stop()
...
}
這個意思是指剛進入程序時執行 Start( ) 函數,程序退出前調用 Stop( ) 函數,非常好的技巧啊!可以用于需要在程序執行前和程序完成后分別執行一段邏輯的場景。再看 Start( ) 函數是怎么實現的:
func Start(options ...func(*Profile)) interface {
Stop()
} {
...
return prof
}
該函數返回了一個實現了含有 Stop( ) 函數接口的對象,如此才能在調用 Start 調用后連調 Stop。
五、優先學會使用代碼分析工具
代碼分析的工具包括靜態檢查、測試、測試覆蓋率分析、性能分析(內存、CPU)、調試工具等,工具的價值在于它可以有效幫我們發現代碼問題,這在我們剛開始學一門編程語言時意義尤其重大。
例如,以下這句 Java 賦值語句估計沒有哪本教科書會告訴你有性能問題:
String sb = new String(“Hello World”);
以下這段 Java 代碼你也不一定能意識到有多線程問題:
synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException
{
logger.info("start");
//連接不可用,直接拋出異常,等待接收線程連接服務器成功
if (!this.avaliable)
{
try
{
//如果連接不可用,則等待2S,然后重新檢測
Thread.sleep(2000);
}
... ...
如果我們及時用 FindBugs 工具檢查就會發現上面這些問題,進而你會去分析研究為什么,如此,你對這門語言的了解也會越來越多。
另外,Go 語言自帶的 vet/test/cover/pprof/trace 都是非常有用的工具,一邊學一邊使用這些工具分析代碼,能加深對語言的理解。
六、多練習、多實踐
就象學自然語言一樣,如果只知道語法不去練是沒有任何效果的,只有反復地練習,慢慢才能變成自己的一項技能。書本上的例子代碼最好能從頭到尾親自敲一遍,多運行、多嘗試,另外再找一些題目來練習,如能有機會參與項目開發則更好啦,勤動手、勤實踐是最好的學習方法。
其它的方法還有:
做好筆記,把學習中遇到的關鍵點和自己的思考記下來,便于后面復習和對比;
復習,學習一定要重復、重復、再重復;
學習貴在堅持,每天學一點(比如堅持每天學 1 小時),日積月累。
Go語言作為出現比較晚的一門編程語言,在其原生支持高并發、云原生等領域的優秀表現,像目前比較流行的容器編排技術Kubernetes、容器技術Docker都是用Go語言寫的,像Java等其他面向對象的語言,雖然也能做云原生相關的開發,但是支持的程度遠沒有Go語言高,憑借其語言特性和簡單的編程方式,彌補了其他編程語言一定程度上的不足,一度成為一個熱門的編程語言。
最近在學習Go語言,我之前使用過C#、Java等面向對象編程的語言,發現其中有很多的編程方式和其他語言有區別的地方,好記性不如爛筆頭,總結一下,和其他語言做個對比。這里只總結差異的地方,具體的語法不做詳細的介紹。
種一棵樹最好的時間是十年前,其次是現在。
3)變量初始化時候可以和其他語言一樣直接在變量后面加等號,等號后面為要初始化的值,也可以使用變量名:=變量值的簡單方式
3)變量賦值 Go語言的變量賦值和多數語言一致,但是Go語言提供了多重賦值的功能,比如下面這個交換i、j變量的語句:
在不支持多重賦值的語言中,交換兩個變量的值需要引入一個中間變量:
4)匿名變量
在使用其他語言時,有時候要獲取一個值,卻因為該函數返回多個值而不得不定義很多沒有的變量,Go語言可以借助多重返回值和匿名變量來避免這種寫法,使代碼看起來更優雅。
假如GetName()函數返回3個值,分別是firstName,lastName和nickName
若指向獲得nickName,則函數調用可以這樣寫
這種寫法可以讓代碼更清晰,從而大幅降低溝通的復雜度和維護的難度。
1)基本常量
常量使用關鍵字const 定義,可以限定常量類型,但不是必須的,如果沒有定義常量的類型,是無類型常量
2)預定義常量
Go語言預定義了這些常量 true、false和iota
iota比較特殊,可以被任務是一個可被編譯器修改的常量,在每個const關鍵字出現時被重置為0,然后在下一個const出現之前每出現一個iota,其所代表的數字會自動加1.
3)枚舉
1)int 和int32在Go語言中被認為是兩種不同類型的類型
2)Go語言定義了兩個浮點型float32和float64,其中前者等價于C語言的float類型,后者等價于C語言的double類型
3)go語言支持復數類型
復數實際上是由兩個實數(在計算機中使用浮點數表示)構成,一個表示實部(real)、一個表示虛部(imag)。也就是數學上的那個復數
復數的表示
實部與虛部
對于一個復數z=complex(x,y),就可以通過Go語言內置函數real(z)獲得該復數的實部,也就是x,通過imag(z)獲得該復數的虛部,也就是y
4)數組(值類型,長度在定義后無法再次修改,每次傳遞都將產生一個副本。)
5)數組切片(slice)
數組切片(slice)彌補了數組的不足,其數據結構可以抽象為以下三個變量:
6)Map 在go語言中Map不需要引入任何庫,使用很方便
Go循環語句只支持for關鍵字,不支持while和do-while
goto語句的語義非常簡單,就是跳轉到本函數內的某個標簽
今天就介紹到這里,以后我會在總結Go語言在其他方面比如并發編程、面向對象、網絡編程等方面的不同及使用方法。希望對大家有所幫助。
部署簡單。Go編譯生成的是一個靜態可執行文件,除了glibc外沒有其他外部依賴。這讓部署變得異常方便:目標機器上只需要一個基礎的系統和必要的管理、監控工具,完全不需要操心應用所需的各種包、庫的依賴關系,大大減輕了維護的負擔。這和Python有著巨大的區別。由于歷史的原因,Python的部署工具生態相當混亂【比如setuptools,distutils,pip,
buildout的不同適用場合以及兼容性問題】。官方PyPI源又經常出問題,需要搭建私有鏡像,而維護這個鏡像又要花費不少時間和精力。
并發性好。Goroutine和channel使得編寫高并發的服務端軟件變得相當容易,很多情況下完全不需要考慮鎖機制以及由此帶來的各種問題。單個Go應用也能有效的利用多個CPU核,并行執行的性能好。這和Python也是天壤之比。多線程和多進程的服務端程序編寫起來并不簡單,而且由于全局鎖GIL的原因,多線程的Python程序并不能有效利用多核,只能用多進程的方式部署;如果用標準庫里的multiprocessing包又會對監控和管理造成不少的挑戰【我們用的supervisor管理進程,對fork支持不好】。部署Python應用的時候通常是每個CPU核部署一個應用,這會造成不少資源的浪費,比如假設某個Python應用啟動后需要占用100MB內存,而服務器有32個CPU核,那么留一個核給系統、運行31個應用副本就要浪費3GB的內存資源。
良好的語言設計。從學術的角度講Go語言其實非常平庸,不支持許多高級的語言特性;但從工程的角度講,Go的設計是非常優秀的:規范足夠簡單靈活,有其他語言基礎的程序員都能迅速上手。更重要的是Go自帶完善的工具鏈,大大提高了團隊協作的一致性。比如gofmt自動排版Go代碼,很大程度上杜絕了不同人寫的代碼排版風格不一致的問題。把編輯器配置成在編輯存檔的時候自動運行gofmt,這樣在編寫代碼的時候可以隨意擺放位置,存檔的時候自動變成正確排版的代碼。此外還有gofix,
govet等非常有用的工具。
執行性能好。雖然不如C和Java,但通常比原生Python應用還是高一個數量級的,適合編寫一些瓶頸業務。內存占用也非常省。
Go語言是谷歌2009發布的第二款開源編程語言。Go語言專門針對多處理器系統應用程序的編程進行了優化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進程。
Go語言也稱 Golang,兼具效率、性能、安全、健壯等特性。這套Go語言教程(Golang教程)通俗易懂,深入淺出,既適合沒有基礎的讀者快速入門,也適合工作多年的程序員查閱知識點。
Go 語言
這套教程在講解一些知識點時,將 Go 語言和其他多種語言進行對比,讓掌握其它編程語言的讀者能迅速理解 Go 語言的特性。Go語言從底層原生支持并發,無須第三方庫、開發者的編程技巧和開發經驗就可以輕松搞定。
Go語言(或 Golang)起源于 2007 年,并在 2009 年正式對外發布。Go 是非常年輕的一門語言,它的主要目標是“兼具 Python 等動態語言的開發速度和 C/C++ 等編譯型語言的性能與安全性”。
Go語言是編程語言設計的又一次嘗試,是對類C語言的重大改進,它不但能讓你訪問底層操作系統,還提供了強大的網絡編程和并發編程支持。Go語言的用途眾多,可以進行網絡編程、系統編程、并發編程、分布式編程。
Go語言的推出,旨在不損失應用程序性能的情況下降低代碼的復雜性,具有“部署簡單、并發性好、語言設計良好、執行性能好”等優勢,目前國內諸多 IT 公司均已采用Go語言開發項目。Go語言有時候被描述為“C 類似語言”,或者是“21 世紀的C語言”。Go 從C語言繼承了相似的表達式語法、控制流結構、基礎數據類型、調用參數傳值、指針等很多思想,還有C語言一直所看中的編譯后機器碼的運行效率以及和現有操作系統的無縫適配。
因為Go語言沒有類和繼承的概念,所以它和 Java 或 C++ 看起來并不相同。但是它通過接口(interface)的概念來實現多態性。Go語言有一個清晰易懂的輕量級類型系統,在類型之間也沒有層級之說。因此可以說Go語言是一門混合型的語言。
此外,很多重要的開源項目都是使用Go語言開發的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes。Go 是編譯型語言,Go 使用編譯器來編譯代碼。編譯器將源代碼編譯成二進制(或字節碼)格式;在編譯代碼時,編譯器檢查錯誤、優化性能并輸出可在不同平臺上運行的二進制文件。要創建并運行 Go 程序,程序員必須執行如下步驟。
使用文本編輯器創建 Go 程序;
保存文件;編譯程序;運行編譯得到的可執行文件。
這不同于 Python、Ruby 和 JavaScript 等語言,它們不包含編譯步驟。Go 自帶了編譯器,因此無須單獨安裝編譯器。
鏈喬教育在線旗下學碩創新區塊鏈技術工作站是中國教育部學校規劃建設發展中心開展的“智慧學習工場2020-學碩創新工作站 ”唯一獲準的“區塊鏈技術專業”試點工作站。專業站立足為學生提供多樣化成長路徑,推進專業學位研究生產學研結合培養模式改革,構建應用型、復合型人才培養體系。
作為一個測試,作為一個測試開發, 全棧化+管理 是我們未來的發展方向。已經掌握了Java、Python、HTML的你,是不是也想了解下最近異常火爆的Go語言呢?來吧,讓我們一起了解下。
Go 是一個開源的編程語言 ,它能讓構造簡單、可靠且高效的軟件變得容易。
Go是從2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持開發,后來還加入了Ian Lance Taylor, Russ Cox等人,并最終于2009年11月開源,在2012年早些時候發布了Go 1穩定版本。現在Go的開發已經是完全開放的,并且擁有一個活躍的社區。這三個人都是計算機界的大神,有的參與了C語言的編寫,有的還是數學大神,有的還獲得了計算機最高榮譽-圖靈獎。
接下來說說 Go語言的特色 :
簡潔、快速、安全
并行、有趣、開源
內存管理、數組安全、編譯迅速
Go語言的用途 :
Go 語言被設計成一門應用于搭載 Web 服務器,存儲集群或類似用途的巨型中央服務器的系統編程語言。
對于高性能分布式系統領域而言,Go 語言無疑比大多數其它語言有著更高的開發效率。它提供了海量并行的支持,這對于 游戲 服務端的開發而言是再好不過了。
Go語言的環境安裝:
建議直接打開 官方地址因為墻的原因打不開
因為我用的是windows系統,這里主要講下Windows系統上使用Go語言來編程。
Windows 下可以使用 .msi 后綴(在下載列表中可以找到該文件,如go1.17.2.windows-amd64.msi)的安裝包來安裝。
默認情況下 .msi 文件會安裝在 c:Go 目錄下。你可以將 c:Gobin 目錄添加到 Path 環境變量中。添加后你需要重啟命令窗口才能生效。個人建議還是安裝到 Program Files文件夾中。
使用什么開發工具來對Go語言進行編寫:
個人建議用VS code, 也可以用Sublime Text來編輯。如果你之前看了我講的HTML語言的學習,肯定已經下載了VS code. 那么這時你需要在VS code中下載Go語言的擴展插件。
這里有一個巨大的坑,就是在下載Go的插件和依賴包時,會提示一些包沒有。主要是因為下載的依賴包部分被墻了,只能想別的辦法去下載。
建議參考網頁:
解決vscode中golang插件安裝失敗方法
在學習go的過程中,使用的是vscode,但是一直提示安裝相關插件失敗,然后上網查方法,基本上是叫你建立golang.org目錄什么的,結果全是錯的,而且都是抄襲,很煩。無意之中看到一位博主分享的方法,他也是飽受上述的垃圾博文困擾,然后找到了解決方法,這里向他致敬,秉著讓更多人看到正確解決方法的心,我寫下正確的解決方法,希望對你有所幫助,也可以點開原博主鏈接參考:
Go有一個全球模塊代理,設置代理再去安裝golang的插件,就可以安裝成功了。步驟有,首先Windows用戶打開Powershell,一個藍色的界面,注意不是cmd!不知道的直接打開window下面的搜索,然后輸入powershell,搜索出來就可以了。
$env:GO111MODULE=“on”
$env:GOPROXY=“”
go env -w GOPROXY=
go env -w GOPRIVATE=*.corp.example.com
然后我們打開VsCode界面,下面會提示安裝插件,我們選擇Install ALL,就會安裝成功
當你在運行Go語言程序時,提示所有的插件包都已經安裝成功了時,就可以正常使用了,要不然一堆報錯會讓你非常心煩。
好了,今天先到這里,晚安、下班~
網頁標題:go語言編程規范總結,go 編程規范
鏈接URL:http://vcdvsql.cn/article28/hedhjp.html
成都網站建設公司_創新互聯,為您提供ChatGPT、外貿建站、網站營銷、手機網站建設、虛擬主機、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯