Time of Update: 2017-01-18
本文執行個體講述了Go語言類比while語句實現無限迴圈的方法。分享給大家供大家參考。具體實現方法如下:這段代碼把for語句當成C語言裡的while(true)用實現無限迴圈複製代碼 代碼如下:package mainimport "fmt"func main() { sum := 0 for { sum
Time of Update: 2017-01-18
本文執行個體講述了Go語言map字典用法。分享給大家供大家參考。具體分析如下:這段代碼產生了青島、濟南、煙台三個城市拼音和漢字的對照字典,根據拼音可以輸出漢字複製代碼 代碼如下:package mainimport "fmt"func main(){ var pc map[string] string pc = make(map[string] string) pc["qingdao"] = "青島" pc["jinan"] = "濟南" pc[
Time of Update: 2017-01-18
本文執行個體講述了Go語言擷取數組長度的方法。分享給大家供大家參考。具體實現方法如下:複製代碼 代碼如下:// getting the length of an array is silly, because the length is part of the array's static typemyArray := [3]int{1, 2, 3}fmt.Println(len(myArray)) // prints 3// getting the length of a
Time of Update: 2017-01-18
本文執行個體講述了Go語言轉換所有字串為大寫或者小寫方法。分享給大家供大家參考。具體如下:Go語言的string模組包含了ToLower和ToUpper函數,用於將字串轉換成小寫和大寫複製代碼 代碼如下:package mainimport ( "fmt" "strings")func main() { fmt.Println(strings.ToUpper("hello world"))}希望本文所述對大家的Go語言程式設計有所協助。
Time of Update: 2017-01-18
本文執行個體講述了go語言實現簡單http服務的方法。分享給大家供大家參考。具體實現方法如下:複製代碼 代碼如下:package mainimport ( "flag" "log" "net/http" "text/template")var addr = flag.String("addr", ":1718", "http service
Time of Update: 2017-01-18
本文執行個體分析了go語言簡單網路程式。分享給大家供大家參考。具體分析如下:服務端代碼如下:複製代碼 代碼如下:package mainimport ( "net" "os")func serve(s net.Conn) { var buf [1024]byte for
Time of Update: 2017-01-18
本文執行個體講述了Go語言Echo伺服器的方法。分享給大家供大家參考。具體如下:複製代碼 代碼如下:package mainimport ( "net" "io")func main() { serv, e := net.Listen("tcp", ":12345") if e != nil {
Time of Update: 2017-01-18
本文執行個體分析了Go語言中關閉帶緩衝區的頻道。分享給大家供大家參考。具體分析如下:Go語言提供了兩種頻道,帶緩衝區和不帶緩衝區的。不帶緩衝區的頻道,發送和接收是同步的,必須接收端接收了訊息,發送端才能從發送調用中解脫。帶緩衝區的頻道,在緩衝區滿之前,發送和接收是非同步,發送端的發送操作只保證把訊息放入緩衝區。Go的頻道是可以關閉的,關閉頻道的目的是讓接收端知道不會再有訊息從這個頻道進入,我們可能會用某個頻道的關閉來表示某種狀態的終結。當我們關閉一個帶緩衝區的頻道時,如果緩衝區中還有訊息,接收端
Time of Update: 2017-01-18
本文執行個體分析了Go語言中的指標運算方法。分享給大家供大家參考。具體分析如下:Go語言的文法上是不支援指標運算的,所有指標都在可控的一個範圍內使用,沒有C語言的*void然後隨意轉換指標類型這樣的東西。最近在思考Go如何操作共用記憶體,共用記憶體就需要把指標轉成不同類型或者對指標進行運算再擷取資料。這裡對Go語言內建的unsafe模組做了一個實驗,發現通過unsafe模組,Go語言一樣可以做指標運算,只是比C的方式繁瑣一些,但是理解上是一樣的。下面是實驗代碼:複製代碼
Time of Update: 2017-01-18
本文執行個體分析了Go語言共用記憶體讀寫的方法。分享給大家供大家參考。具體分析如下:前面分析了Go語言指標運算和內嵌C代碼的方法,做了一個Go語言共用記憶體讀寫的實驗。先大概說下什麼是共用記憶體。我們知道不同進程見的記憶體是互相獨立的,沒辦法直接互相操作對方內的資料,而共用記憶體則是靠作業系統提供的記憶體映射機制,讓不同進程的一塊地址空間映射到同一個虛擬記憶體地區上,使不同的進程可以操作到一塊共用的記憶體塊。共用記憶體是效率最高的進程間通訊機制,因為資料不需要在核心和程式之間複製。共用記憶體用到
Time of Update: 2017-01-18
本文執行個體講述了Go語言中嵌入C語言的方法。分享給大家供大家參考。具體分析如下:Go語言官方帶了一個工具叫cgo,可以很方便的在Go語言代碼中內嵌C代碼或做C和Go代碼的整合。下面是一段簡單的在Go中內嵌C的實驗代碼:複製代碼 代碼如下:package main/*#include <stdio.h>#include <stdlib.h>void say_hello() {
Time of Update: 2017-01-18
本文執行個體講述了Go語言實現的web爬蟲方法。分享給大家供大家參考。具體分析如下:這裡使用 Go 的並發特性來並存執行 web 爬蟲。修改 Crawl 函數來並行的抓取 URLs,並且保證不重複。複製代碼 代碼如下:package mainimport ( "fmt")type Fetcher interface { // Fetch 返回 URL 的 body
Time of Update: 2017-01-18
本文執行個體講述了Go語言中Select語句用法。分享給大家供大家參考。具體分析如下:select 語句使得一個 goroutine 在多個通訊操作上等待。select 會阻塞,直到條件分支中的某個可以繼續執行,這時就會執行那個條件分支。當多個都準備好的時候,會隨機播放一個。複製代碼 代碼如下:package mainimport "fmt"func fibonacci(c, quit chan int) {
Time of Update: 2017-01-18
本文執行個體講述了Go語言的管道Channel用法。分享給大家供大家參考。具體分析如下:channel 是有類型的管道,可以用 channel 操作符 <- 對其發送或者接收值。ch <- v // 將 v 送入 channel ch。v := <-ch // 從 ch 接收,並且賦值給 v。(“箭頭”就是資料流的方向。)和 map 與 slice 一樣,channel 使用前必須建立:ch := make(chan int)預設情況下,在另一端準備好之前,發送和接收都會阻塞。
Time of Update: 2017-01-18
本文執行個體講述了Go語言輕量級線程Goroutine用法。分享給大家供大家參考。具體如下:goroutine 是由 Go 運行時環境管理的輕量級線程。go f(x, y, z)開啟一個新的 goroutine 執行f(x, y, z)f,x,y 和 z 是當前 goroutine 中定義的,但是在新的 goroutine 中運行 f。goroutine 在相同的地址空間中運行,因此訪問共用記憶體必須進行同步。 sync 提供了這種可能,不過在 Go
Time of Update: 2017-01-18
本文執行個體講述了Go語言實現簡單Web伺服器的方法。分享給大家供大家參考。具體分析如下:包 http 通過任何實現了 http.Handler 的值來響應 HTTP 要求:package httptype Handler interface {ServeHTTP(w ResponseWriter,r *Request)}在這個例子中,類型 Hello 實現了 http.Handler。注意: 這個例子無法在基於 web 的指南使用者介面運行。為了嘗試編寫 網頁伺服器,可能需要安裝
Time of Update: 2017-01-18
本文執行個體講述了Go語言中錯誤處理的方法。分享給大家供大家參考。具體分析如下:錯誤是可以用字串描述自己的任何東西。 主要思路是由預定義的內建介面類型 error,和其返回返回字串竄的方法 Error 構成。type error interface {Error() string}當用 fmt 包的多種不同的列印函數輸出一個 error 時,會自動的調用該方法。複製代碼 代碼如下:package mainimport (
Time of Update: 2017-01-18
本文執行個體講述了Go語言介面用法。分享給大家供大家參考。具體分析如下:介面類型是由一組方法定義的集合。介面類型的值可以存放實現這些方法的任何值。複製代碼 代碼如下:package mainimport ( "fmt" "math")type Abser interface { Abs() float64}func main() { var a
Time of Update: 2017-01-18
本文執行個體講述了Go語言中的方法定義。分享給大家供大家參考。具體分析如下:事實上,可以對包中的任意類型定義任意方法,而不僅僅是結構體。不能對來自其他包的類型或基礎類型定義方法。複製代碼 代碼如下:package mainimport ( "fmt" "math")type MyFloat float64func (f MyFloat) Abs() float64 { if f <
Time of Update: 2017-01-18
本文執行個體講述了Go語言中的switch用法。分享給大家供大家參考。具體分析如下:這裡你可能已經猜到 switch 可能的形式了。case 體會自動終止,除非用 fallthrough 語句作為結尾。複製代碼 代碼如下:package mainimport ( "fmt" "runtime")func main() { fmt.Print("Go runs on ") switch os := runtime.GOOS; os { case "