GO語言系列(一)- 初識go語言

1、golang語言的特性

1.垃圾回收

  • a.內存自動回收,不再須要開發人員管理內存
  • b.開發人員專一業務實現,下降了心智負擔
  • c.只須要new分配內存,不須要釋放

2.自然併發

  • a.從語言層面支持併發,很是簡單
  • b.goroute,輕量級線程,建立成千上萬個goroute成爲可能
  • c.基於CSP(Commnuncating Sequential Process)模型併發
func main() {
    go fmt.Println(「hello")
}

3.channel

  • a.管道,相似unix/linux中的pipe
  • b.多個goroute之間經過channel進行通訊
  • c.支持任何類型
func test_pipe() {
	pipe := make(chan int, 3)
	pipe <- 1
	pipe <- 2
	pipe <- 3

	sum = <-pipe
	// pipe <- 4

	fmt.Println("sum=", sum)
	fmt.Println(len(pipe))
}

 4.多返回值

  a.一個函數返回多個值python

package main

func clac(a int, b int) (int, int) {
	// 多è¿」回值
	c := a + b
	d := (a + b) / 2

	return c, d
}

2、開發環境搭建

1. Go 語言支持如下系統:

  • Linuxlinux

  • FreeBSDgit

  • Mac OS X(也稱爲 Darwin)github

  • Windowsgolang

安裝包下載地址爲:https://golang.org/dl/json

若是打不開可使用這個地址:https://golang.google.cn/dl/windows

根據操做系統選擇對應的安裝包,點擊安裝包進行安裝(linux直接解壓)併發

設置環境變量函數

2.配置環境變量

linux
  
export GOROOT=$PATH:/path/to/go/
export PATH=$PATH:$GOROOT/bin/
export GOPATH=/home/user/project/go

windows安裝的若是是msi安裝文件,Go語言的環境變量會自動設置好。若是後面的測試沒法經過,能夠從新設置環境變量。post

set GOBIN=D:\Go\bin        /* 設置go的可執行文件路徑 */
set GOPATH=E:\go\project  /* 設置工做目錄路徑 */
set GOROOT=D:\Go          /* 設置安裝go的根目錄 */

第一個golang程序

hello world, 在新建hello.go

package main

import "fmt"

func main() {
	fmt.Println("hello world")
}

在終端輸入go run hello.go,如何成功打印hello world則證實配置成功

3. IDE搭建(vscode)

新建項目目錄結構

4. 安裝插件

首先打開擴展,搜索Go,點擊安裝

使用VScode時,當咱們安裝完go語言擴展時,新建一個go的源碼文件,進行保存時,會提示咱們須要安裝一些go的擴展插件,可別小看這些插件,這些插件都是很是有用的,好比說自動補全等,通常咱們都會選擇install all去進行安裝全部插件,這些插件均是從github上進行下載,可是由於地處中國被牆的緣由,大多插件都會下載失敗。

這些失敗的庫,不是沒有下載下來,而是依賴的文件在go官網上,致使失敗。如下爲解決辦法:

一、在%GOPATH%\src\ 目錄下,創建golang.org 文件夾,並再新建x文件夾。最終目錄爲 "%GOPATH%\src\golang.org\x\"

二、完成目錄切換後,開始下載插件包:

git clone https://github.com/golang/tools.git tools

三、執行完之後,會多一個tools文件夾。

四、打開vsCode終端,切換到 終端,進入「%GOPATH」目錄,執行下述命令

注意:下述命令根據須要進行下載,並非所有都要下載,此處博主僅僅下載了vscode提示須要裝的。
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
go install github.com/josharian/impl
go install github.com/rogpeppe/godef
go install github.com/sqs/goreturns
go install github.com/golang/lint/golint
go install github.com/cweill/gotests/gotests
go install github.com/ramya-rao-a/go-outline
go install github.com/acroca/go-symbols
go install golang.org/x/tools/cmd/guru
go install golang.org/x/tools/cmd/gorename
go install github.com/josharian/impl
go install github.com/rogpeppe/godef
go install github.com/sqs/goreturns
go install github.com/golang/lint/golint
go install github.com/cweill/gotests/gotests
go get -u -v github.com/mdempsky/gocode
go install golang.org/x/tools/cmd/goimports

可是,有一個插件仍是安裝失敗了,這個插件就是golint

下面將介紹golint插件的安裝方法,爲手動安裝,其餘插件安裝失敗都可以採用此方法進行手動安裝

手動安裝golint插件

手動安裝至關於直接從github上將該插件源碼下載下來。

一、在vscode終端中咱們首先進入%GOPATH%\src\golang.org\x\下,而後執行以下命令進行golint源碼包下載:

git clone https://github.com/golang/lint.git lint

二、 而後執行以下命令便可安裝成功

go get -u github.com/golang/lint/golint

5. vscode配置

設置位置:文件-首選項-設置-打開json設置,打開json添加以下設置:

 {
    "go.autocompleteUnimportedPackages": true,
    "go.inferGopath": true,
    "go.gotoSymbol.includeImports": true,  
    "go.useCodeSnippetsOnFunctionSuggest": true,
    "go.gocodePackageLookupMode": "go",
} 

參考 https://www.liwenzhou.com/posts/Go/00_go_in_vscode/?tdsourcetag=s_pcqq_aiomsg

3、包的概念

  • a.和python同樣,把相同功能的代碼放到一個目錄,稱之爲包
  • b.包能夠被其餘包引用
  • c.main包是用來生成可執行文件,每一個程序只有一個main包
  • d.包的主要用途是提升代碼的可複用性

實例: 代碼目錄

 

add.go

package calc

func Add(a int, b int) int {
	return a + b
}

sub.go

package calc

func Sub(a int, b int) int {
	return a - b
}

 main.go

package main

import (
	"fmt"
	"go_dev/day1/package_example/calc"
)

func main() {
	sum := calc.Add(100, 300)
	sub := calc.Sub(100, 300)

	fmt.Println("sum=", sum)
	fmt.Println("sub=", sub)
}

編譯

go build -o 輸出路徑(相對於GOPATH) 包的路徑(相對於GOPATH/src)
go build -o bin/calc.exe go_dev/day1/package_example/main 

4、goroute 

1. goroute實現併發

goroute.go

package main

import "fmt"

func test_goroute(a int) {
	fmt.Println(a)
}

main.go

package main

import "time"

func main() {
	for i := 0; i < 100; i++ {
		go test_goroute(i)
	}

	time.Sleep(3 * time.Second)
}

// go build go_dev/day1/goroute 

2. goroute管道通訊

add.go

package goroute

func Add(a int, b int, c chan int) {
	sum := a + b
	c <- sum
} 

main.go

package main

import (
	"fmt"
	"go_dev/day1/goroute_example/goroute"
)

func main() {
	var pipe chan int
	pipe = make(chan int, 1)
	go goroute.Add(100, 300, pipe)
	sum := <-pipe
	fmt.Println("sum=", sum)
相關文章
相關標籤/搜索