寫給大忙人看的Go語言

2021-09-25 11:53:12 字數 3848 閱讀 2311

寫給大忙人看的golang教程(一)

閱讀本文之前,我認為你已經掌握其他語言基礎並寫出乙個簡單的專案。

(15.1)順序控制

(15.2) 分支控制

(15.3)迴圈控制

// 設定隨機數的種子為當前的系統時間

rand.seed(time.now().unix())

// 生成0-99範圍的隨機數

randomnumber := rand.intn(100)

label:

for

label:

for

​ 包的本質就是乙個目錄,go的每乙個檔案都必須屬於乙個包。

func init() {}
// util.helloworld.go

package utils

import "fmt"

func init()

func helloworld()()

// main.test.go

package main

import (

"studygo/utils"

"fmt"

)func init()

func main()

// util.helloworld() init

// main.main() init

// hello world

time.now().unix() int64:返回unix秒時間戳

time.now().unixnano() int64:返回unix納秒時間戳

陣列的長度是固定的,切片 的長度不是固定的。

str := "hello world."

arr := byte(str)

arr[11] = '!'

str = string(arr)

fmt.println(str)

var map名稱 map[keytype]valuetype

for key, value := range mapname
介面

type 介面名稱 inte***ce
型別斷言

var number float32

var x inte***ce{}

x = t

t = x.(float32) // 判斷一下是否可以轉換成為float32型別

func (recv type) funcname (paramslist)(returnlist)
通常為了執行效率一般不會直接傳入結構體型別作為接收器,而是結構體型別指標:

func (dog *dog) function()()

// 呼叫時

var d dog

(&d).function()

var d dog

d.function()

package main

import (

"fmt"

"os"

)func main()

err = file.close()

if err != nil

}

os.args string保管了所有命令列引數,第乙個引數是程式名稱。

flag包可以實現更加高階的命令列引數處理:

var username string

// 繫結引數

flag.strin**ar(&username, "u", "root", "username")

// -- 儲存引數字串的位址

// -- 引數名稱

// -- 預設值

// -- 引數釋義

// 解析引數

flag.parse()

結構體、切片、map等都可以解析為json字串,使用encoding/json.marshal(i inte***ce{},)(byte, error)來實現各種型別到json資料;使用encoding/json.unmarshal(json字串, 例項物件的引用)反序列化。

go語言自帶輕量級的測試框架和go test -v命令來實現單元測試和效能測試。go的測試指令會自動識別以test***命名的函式:

import "testing"

func test***(t *testing.t)

go主線程可以理解為執行緒也可以理解為程序,乙個go執行緒可以包含多個協程(微程),go程具備以下幾點特質:

主線程是乙個重量級物理執行緒,直接作用在cpu上,非常消耗資源,協程從主線程開啟,是邏輯態的輕量級執行緒,相對資源消耗少。在go中可以輕鬆開啟成千上萬個協程,其他語言的併發機制一般是執行緒實現,這就是go的優勢。使用go關鍵字修飾乙個函式等即可開啟乙個go程。go可以充分發揮多核多cpu的優勢,使用runtime.numcpu()可以獲取當前機器的cpu個數,使用runtime.gomaxprocs(n int)設定可用的cpu數量。在go1.8之前需要手動設定,go1.8以後預設使用多cpu。

不同的go協程如何實現通訊,下面給出兩種方法:

在go中,sync包提供了基本的同步單元,大部分適用於低水平的程式執行緒,高水平的同步一般使用管道解決。

通過reflect.typeof()獲取變數型別,返回reflect.type型別

通過reflect.valueof()獲取變數的值,返回reflect.value型別

listen, err := net.listen("tcp", "0.0.0.0:8888")

if err != nil

defer listen.close()

for

}()}

}

connect, err := dial("tcp", "127.0.0.1:8888")

if err != nil

num, err := connect.write(byte("hello"))

connect.close()

寫給大忙人的模電複習資料(002)

對於rc低通電路而言,fh 12 r cf frac fh 2 rc1 對於rc高通電路而言,fl 單極性器件 載流子只有一種 空穴或者自由電子 工作電流 半導體中多子的漂移 一般我們都是考慮共源極n溝道的增強型mos管,其輸出特性曲線如下 這要與npn三極體的共射極輸出特性曲線相區別,如下圖所示 ...

寫給大忙人看的如何優雅設定執行緒池的大小

執行緒池需要設定合適的大小,假如設定的太大,執行緒上線文切換過於頻繁,造成大量資源開銷,反而會使效能降低。假如設定的太小,存在很多可用的處理器資源卻未在工作,會造成資源的浪費和對吞吐量造成損失。為了充分利用處理器資源,建立的執行緒數至少要等於處理器核心數。如果所有的任務都是計算密集型的,那麼執行緒數...

寫給大忙人看的工作中的知識 錕斤拷問題

乙 嗨,你幫我個忙,今天領導說要我處理這個 可我看不懂這是啥玩意,你幫我瞧瞧。甲 哦,這是亂碼。乙 為什麼會出現亂碼呢?甲 說來話可長了 乙 快說!快說!甲 美國人發明電腦時,需要儲存字元,所以使用了乙個數字乙個字元的方法,有128個字元。乙 太少了。甲 嗯。確實少。它只有7個位元,當時有個1mb記...