兄弟連教育建議,使用者在考慮培訓周期時要切實結合自身目前所掌握的區塊鏈知識的多少、培訓的目的是簡單的認知提升還是藉此高薪就業等等。兄弟連Go全棧與區塊鏈培訓課程設定為5個半月共計22周的學習時間長度,由淺入深進行講解,助力於小白使用者向區塊鏈工程師的轉型。
課程體系設計架構包括了區塊鏈的基礎語言Go語言、區塊鏈後端技術體系、區塊鏈公鏈、區塊鏈分布式應用開發等內容講解,以及到最後的面試指導和項目實戰。課程由清華微軟Google名師團隊精心打造,曆時半年時間共同研發而出。
上次用Scala寫了個爬蟲。最近在閑工夫之時,學習Go語言,便用Go移植了那個用Scala寫的爬蟲,代碼如下:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"regexp"
)
var (
ptnIndexItem = regexp.MustCompile(`(.+)`)
ptnContentRough = regexp.MustCompile(`(?s).*
(.*).*`)
ptnBrTag = regexp.MustCompile(`
`)
ptnHTMLTag = regexp.MustCompile(`(?s)`)
ptnSpace = regexp.MustCompile(`(^\s+)|( )`)
)
func Get(url string) (content string, statusCode int) {
resp, err1 := http.Get(url)
if err1 != nil {
statusCode = -100
return
}
defer resp.Body.Close()
data, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil {
statusCode = -200
return
}
statusCode = resp.StatusCode
content = string(data)
return
}
type IndexItem struct {
url string
title string
}
func findIndex(content string) (index []IndexItem, err error) {
matches := ptnIndexItem.FindAllStringSubmatch(content, 10000)
index = make([]IndexItem, len(matches))
for i, item := range matches {
index[i] = IndexItem
}
return
}
func readContent(url string) (content string) {
raw, statusCode := Get(url)
if statusCode != 200 {
fmt.Print("Fail to get the raw data from", url, "\n")
return
}
match := ptnContentRough.FindStringSubmatch(raw)
if match != nil {
content = match[1]
} else {
return
}
content = ptnBrTag.ReplaceAllString(content, "\r\n")
content = ptnHTMLTag.ReplaceAllString(content, "")
content = ptnSpace.ReplaceAllString(content, "")
return
}
func main() {
fmt.Println(`Get index ...`)
s, statusCode := Get
if statusCode != 200 {
return
}
index, _ := findIndex(s)
fmt.Println(`Get contents and write to file ...`)
for _, item := range index {
fmt.Printf("Get content %s from %s and write to file.\n", item.title, item.url)
fileName := fmt.Sprintf("%s.txt", item.title)
content := readContent(item.url)
ioutil.WriteFile(fileName, []byte(content), 0644)
fmt.Printf("Finish writing to %s.\n", fileName)
}
}
程式碼數比Scala版的有一定增加,主要原因有以下幾方面原因:
1 golang 重視代碼書寫規範,或者說代碼格式,很多地方寫法比較固定,甚至比較麻煩。比如就算是if判斷為真後的執行語句只有一句話,按照代碼規範,也要寫出帶大括弧的三行,而在Scala和很多其他語言中,一行就行;
2 golang 的strings包和regexp包提供的方法並不特別好用,特別是和Scala相比,使用起來感覺Scala的正則和字串處理要舒服的多;
3 scala版的爬蟲裡面用到了Scala標準庫中的實用類和方法,它們雖然不是文法組成,但用起來感覺像是文法糖,這裡很多方法和函數式編程有關,golang的函數式編程還沒有去仔細學習。
當然golang版的爬蟲也有一個優勢,就是編譯速度很快,執行速度在現在的寫法裡面體現不出優勢;golang的特性goroutine在這裡沒有用到,這段代碼今後會不斷改進。
高能預警,兄弟連教育區塊鏈直播課程8月持續火爆來襲!
原價1188元的12節區塊鏈進階課程,現僅需1元!
還可免費領取《Go語言基礎實戰項目開發》與《Go語言進階實戰項目開發》教材兩本!!
限時限量!!先到先得!!
http://www.ydma.cn/open/course/24