精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

go語言基礎課 Go語言基礎

4.1 Go語言中包(Packages)基礎知識

先看一下目錄結構,注意這里的src名稱是必須的,go在設置了GOPATH后,默認會添加src去尋找package,暫未查詢是否有方法不按照src查詢

成都創新互聯-專業網站定制、快速模板網站建設、高性價比友好網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式友好網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋友好地區。費用合理售后完善,十年實體公司更值得信賴。

根據上面的描述,Go語言中通過包中函數的名稱來區分公共函數和私有函數,我們在main函數中是無法調用myPrivateFunc的

此時如果執行通過go run方式執行,會看到如下的提示信息,這與大部分語言對于包管理方式相關,所以我們通過兩種不同的方法來讓代碼執行起來

返回如下,這里面對我們后續執行有影響的兩個參數GO111MODULE和GOPATH

如果要使用gopath模式引用包,則需要關閉mod模式

設置GOPATH為當前路徑,即main.go所在的路徑

此時再查看go env時,GOPATH已經發生改變

我們再次嘗試執行代碼

可以看到public函數被調用

GO語言(十六):模糊測試入門(上)

本教程介紹了 Go 中模糊測試的基礎知識。通過模糊測試,隨機數據會針對您的測試運行,以嘗試找出漏洞或導致崩潰的輸入。可以通過模糊測試發現的一些漏洞示例包括 SQL 注入、緩沖區溢出、拒絕服務和跨站點腳本攻擊。

在本教程中,您將為一個簡單的函數編寫一個模糊測試,運行 go 命令,并調試和修復代碼中的問題。

首先,為您要編寫的代碼創建一個文件夾。

1、打開命令提示符并切換到您的主目錄。

在 Linux 或 Mac 上:

在 Windows 上:

2、在命令提示符下,為您的代碼創建一個名為 fuzz 的目錄。

3、創建一個模塊來保存您的代碼。

運行go mod init命令,為其提供新代碼的模塊路徑。

接下來,您將添加一些簡單的代碼來反轉字符串,稍后我們將對其進行模糊測試。

在此步驟中,您將添加一個函數來反轉字符串。

a.使用您的文本編輯器,在 fuzz 目錄中創建一個名為 main.go 的文件。

獨立程序(與庫相反)始終位于 package 中main。

此函數將接受string,使用byte進行循環 ,并在最后返回反轉的字符串。

此函數將運行一些Reverse操作,然后將輸出打印到命令行。這有助于查看運行中的代碼,并可能有助于調試。

e.該main函數使用 fmt 包,因此您需要導入它。

第一行代碼應如下所示:

從包含 main.go 的目錄中的命令行,運行代碼。

可以看到原來的字符串,反轉它的結果,然后再反轉它的結果,就相當于原來的了。

現在代碼正在運行,是時候測試它了。

在這一步中,您將為Reverse函數編寫一個基本的單元測試。

a.使用您的文本編輯器,在 fuzz 目錄中創建一個名為 reverse_test.go 的文件。

b.將以下代碼粘貼到 reverse_test.go 中。

這個簡單的測試將斷言列出的輸入字符串將被正確反轉。

使用運行單元測試go test

接下來,您將單元測試更改為模糊測試。

單元測試有局限性,即每個輸入都必須由開發人員添加到測試中。模糊測試的一個好處是它可以為您的代碼提供輸入,并且可以識別您提出的測試用例沒有達到的邊緣用例。

在本節中,您將單元測試轉換為模糊測試,這樣您就可以用更少的工作生成更多的輸入!

請注意,您可以將單元測試、基準測試和模糊測試保存在同一個 *_test.go 文件中,但對于本示例,您將單元測試轉換為模糊測試。

在您的文本編輯器中,將 reverse_test.go 中的單元測試替換為以下模糊測試。

Fuzzing 也有一些限制。在您的單元測試中,您可以預測Reverse函數的預期輸出,并驗證實際輸出是否滿足這些預期。

例如,在測試用例Reverse("Hello, world")中,單元測試將返回指定為"dlrow ,olleH".

模糊測試時,您無法預測預期輸出,因為您無法控制輸入。

但是,Reverse您可以在模糊測試中驗證函數的一些屬性。在這個模糊測試中檢查的兩個屬性是:

(1)將字符串反轉兩次保留原始值

(2)反轉的字符串將其狀態保留為有效的 UTF-8。

注意單元測試和模糊測試之間的語法差異:

(3)確保新包unicode/utf8已導入。

隨著單元測試轉換為模糊測試,是時候再次運行測試了。

a.在不進行模糊測試的情況下運行模糊測試,以確保種子輸入通過。

如果您在該文件中有其他測試,您也可以運行go test -run=FuzzReverse,并且您只想運行模糊測試。

b.運行FuzzReverse模糊測試,查看是否有任何隨機生成的字符串輸入會導致失敗。這是使用go test新標志-fuzz執行的。

模糊測試時發生故障,導致問題的輸入被寫入將在下次運行的種子語料庫文件中go test,即使沒有-fuzz標志也是如此。要查看導致失敗的輸入,請在文本編輯器中打開寫入 testdata/fuzz/FuzzReverse 目錄的語料庫文件。您的種子語料庫文件可能包含不同的字符串,但格式相同。

語料庫文件的第一行表示編碼版本。以下每一行代表構成語料庫條目的每種類型的值。由于 fuzz target 只需要 1 個輸入,因此版本之后只有 1 個值。

c.運行沒有-fuzz標志的go test; 新的失敗種子語料庫條目將被使用:

由于我們的測試失敗,是時候調試了。

go語言語法(基礎語法篇)

import "workname/packetfolder"

導入多個包

方法調用 包名.函數//不是函數或結構體所處文件或文件夾名

packagename.Func()

前面加個點表示省略調用,那么調用該模塊里面的函數,可以不用寫模塊名稱了:

當導入一個包時,該包下的文件里所有init()函數都會被執行,然而,有些時候我們并不需要把整個包都導入進來,僅僅是是希望它執行init()函數而已。下劃線的作用僅僅是為了調用init()函數,所以無法通過包名來調用包中的其他函數

import _ package

變量聲明必須要使用否則會報錯。

全局變量運行聲明但不使用。

func 函數名 (參數1,參數2,...) (返回值a 類型a, 返回值b 類型b,...)

func 函數名 (參數1,參數2,...) (返回值類型1, 返回值類型2,...)

func (this *結構體名) 函數名(參數 string) (返回值類型1, 返回值類型2){}

使用大小來區分函數可見性

大寫是public類型

小寫是private類型

func prifunc int{}

func pubfunc int{}

聲明靜態變量

const value int

定義變量

var value int

聲明一般類型、接口和結構體

聲明函數

func function () int{}

go里面所有的空值對應如下

通道類型

內建函數 new 用來分配內存,它的第一個參數是一個類型,不是一個值,它的返回值是一個指向新分配類型零值的指針

func new(Type) *Type

[這位博主有非常詳細的分析]

Go 語言支持并發,我們只需要通過 go 關鍵字來開啟 goroutine 即可。

goroutine 是輕量級線程,goroutine 的調度是由 Golang 運行時進行管理的。

同一個程序中的所有 goroutine 共享同一個地址空間。

語法格式如下:

通道(channel)是用來傳遞數據的一個數據結構。

通道的聲明

通道可用于兩個 goroutine 之間通過傳遞一個指定類型的值來同步運行和通訊。操作符 - 用于指定通道的方向,發送或接收。如果未指定方向,則為雙向通道。

[這里有比較詳細的用例]

go里面的空接口可以指代任何類型(無論是變量還是函數)

聲明空接口

go里面的的強制類型轉換語法為:

int(data)

如果是接口類型的強制轉成其他類型的語法為:

go里面的強制轉換是將值復制過去,所以在數據量的時候有比較高的運行代價

Go語言基礎10——匿名函數和閉包

函數還可以作為返回值,但是在Go語言中不能再像之前那樣定義函數了,只能定義匿名函數。匿名函數就是沒有函數名的函數。

閉包 = 函數 + 外層變量的引用

Go語言基礎語法(一)

本文介紹一些Go語言的基礎語法。

先來看一個簡單的go語言代碼:

go語言的注釋方法:

代碼執行結果:

下面來進一步介紹go的基礎語法。

go語言中格式化輸出可以使用 fmt 和 log 這兩個標準庫,

常用方法:

示例代碼:

執行結果:

更多格式化方法可以訪問中的fmt包。

log包實現了簡單的日志服務,也提供了一些格式化輸出的方法。

執行結果:

下面來介紹一下go的數據類型

下表列出了go語言的數據類型:

int、float、bool、string、數組和struct屬于值類型,這些類型的變量直接指向存在內存中的值;slice、map、chan、pointer等是引用類型,存儲的是一個地址,這個地址存儲最終的值。

常量是在程序編譯時就確定下來的值,程序運行時無法改變。

執行結果:

執行結果:

Go 語言的運算符主要包括算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符以及指針相關運算符。

算術運算符:

關系運算符:

邏輯運算符:

位運算符:

賦值運算符:

指針相關運算符:

下面介紹一下go語言中的if語句和switch語句。另外還有一種控制語句叫select語句,通常與通道聯用,這里不做介紹。

if語法格式如下:

if ... else :

else if:

示例代碼:

語法格式:

另外,添加 fallthrough 會強制執行后面的 case 語句,不管下一條case語句是否為true。

示例代碼:

執行結果:

下面介紹幾種循環語句:

執行結果:

執行結果:

也可以通過標記退出循環:

--THE END--


本文題目:go語言基礎課 Go語言基礎
文章鏈接:http://m.jcarcd.cn/article/hippos.html
主站蜘蛛池模板: 精品国产电影在线 | 国产日本视频 | 国产精品专区第5页 | 欧美日韩在线一品道 | 国产在线91 | 日本丰满大 | 国产自产在| 午夜福利院在线观看 | 精品一区二区6 | 精品成人 | 国产青青操 | 91视频蓝导航 | 国产嫖妓免费视频 | 成人拍拍拍社区 | 国产v欧美v日 | 福利导航网址页面 | 国产蜜桃精品 | 国产精品码一区 | 午夜成人影视神马 | 三级国产久 | 国产精品精品 | 欧美日韩大片在 | 国产精品免费小视频 | 91同城| 国语对白精品视频在 | 国产伦理 | 日本亲近相奷中 | 91视频一区 | 乱伦综合国产免费 | 国产人妖在线 | 国产传媒 | 国产一区日韩 | 国产夫妇肉麻对白 | 午夜一日本级频 | 国产亚洲女在线精品 | 区二区三区在线 | 国产一区丝袜高 | 欧美另类video | 欧洲成人在 | 日本成本人片免 | 国产伦精品一 |