中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

企業(yè)手機網(wǎng)站建設方案千牛怎么做免費推廣引流

企業(yè)手機網(wǎng)站建設方案,千牛怎么做免費推廣引流,業(yè)之峰裝飾公司北京地址,免費網(wǎng)站建站app文章目錄 讀取用戶的輸入文件讀寫讀文件寫文件 文件拷貝io包中接口的概念JSON 數(shù)據(jù)格式編碼解碼任意的數(shù)據(jù): 讀取用戶的輸入 從鍵盤和標準輸入 os.Stdin 讀取輸入,最簡單的辦法是使用 fmt 包提供的 Scan… 和 Sscan… 開頭的函數(shù) 看如下的程序 func t…

文章目錄

  • 讀取用戶的輸入
  • 文件讀寫
    • 讀文件
    • 寫文件
  • 文件拷貝
  • io包中接口的概念
  • JSON 數(shù)據(jù)格式
    • 編碼
    • 解碼任意的數(shù)據(jù):

讀取用戶的輸入

從鍵盤和標準輸入 os.Stdin 讀取輸入,最簡單的辦法是使用 fmt 包提供的 Scan… 和 Sscan… 開頭的函數(shù)

看如下的程序

func test1() {var s1, s2 stringfmt.Scanf("%s,%s", &s1, &s2)fmt.Println(s1, s2)input := "hello,world"format := "%s,%s"fmt.Sscanf(input, format, &s1, &s2)fmt.Println(s1, s2)
}

也可以使用bufio包提供的緩沖讀取器來讀取數(shù)據(jù),如下例子所示

func test2() {inputReader := bufio.NewReader(os.Stdin)input, err := inputReader.ReadString(' ')if err != nil {fmt.Println("error")return}fmt.Println(input)
}

inputReader 是一個指向 bufio.Reader 的指針。inputReader := bufio.NewReader(os.Stdin) 這行代碼,將會創(chuàng)建一個讀取器,并將其與標準輸入綁定。

bufio.NewReader() 構造函數(shù)的簽名為:func NewReader(rd io.Reader) *Reader

該函數(shù)的實參可以是滿足 io.Reader 接口的任意對象,函數(shù)返回一個新的帶緩沖的 io.Reader 對象,它將從指定讀取器(例如 os.Stdin)讀取內(nèi)容。

返回的讀取器對象提供一個方法 ReadString(delim byte),該方法從輸入中讀取內(nèi)容,直到碰到 delim 指定的字符,然后將讀取到的內(nèi)容連同 delim 字符一起放到緩沖區(qū)。

ReadString 返回讀取到的字符串,如果碰到錯誤則返回 nil。如果它一直讀到文件結束,則返回讀取到的字符串和 io.EOF。如果讀取過程中沒有碰到 delim 字符,將返回錯誤 err != nil

文件讀寫

讀文件

在 Go 語言中,文件使用指向 os.File 類型的指針來表示的,也叫做文件句柄

看如下的代碼

func test3() {inputFile, fileErr := os.Open("test.dat")if fileErr != nil {fmt.Println("open fail error")}defer inputFile.Close()inputReader := bufio.NewReader(inputFile)for {inputString, inputErr := inputReader.ReadString('#')if inputErr == io.EOF {return}fmt.Println(inputString)}
}

寫文件

寫文件的邏輯和之前類似,有如下代碼

func test4() {// 獲取到文件的句柄outfile, outerror := os.OpenFile("output.dat", os.O_WRONLY|os.O_CREATE, 0666)if outerror != nil {fmt.Println("create fail")return}defer outfile.Close()// 用文件的句柄初始化寫對象outWriter := bufio.NewWriter(outfile)str := "hello world\n"for i := 0; i < 10; i++ {// 利用寫對象,向文件當中寫數(shù)據(jù)_, err := outWriter.WriteString(str)if err != nil {fmt.Println("error")return}fmt.Println("write success: ", str)}err := outWriter.Flush()if err != nil {fmt.Println("error")return}
}

文件拷貝

如何拷貝一個文件到另一個文件?最簡單的方式就是使用 io 包:

// filecopy.go
package mainimport ("fmt""io""os"
)func main() {CopyFile("target.txt", "source.txt")fmt.Println("Copy done!")
}func CopyFile(dstName, srcName string) (written int64, err error) {src, err := os.Open(srcName)if err != nil {return}defer src.Close()dst, err := os.Create(dstName)if err != nil {return}defer dst.Close()return io.Copy(dst, src)
}

注意 defer 的使用:當打開 dst 文件時發(fā)生了錯誤,那么 defer 仍然能夠確保 src.Close() 執(zhí)行。如果不這么做,src 文件會一直保持打開狀態(tài)并占用資源。

io包中接口的概念

func test5() {fmt.Fprintf(os.Stdout, "%s\n", "hello go fprintf")buf := bufio.NewWriter(os.Stdout)fmt.Fprintf(buf, "%s\n", "hello newwirter")buf.Flush()
}

下面是 fmt.Fprintf() 函數(shù)的實際簽名

func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)

不是寫入一個文件,而是寫入一個 io.Writer 接口類型的變量,下面是 Writer 接口在 io 包中的定義

type Writer interface {Write(p []byte) (n int, err error)
}

fmt.Fprintf() 依據(jù)指定的格式向第一個參數(shù)內(nèi)寫入字符串,第一個參數(shù)必須實現(xiàn)了 io.Writer 接口。Fprintf() 能夠?qū)懭肴魏晤愋?#xff0c;只要其實現(xiàn)了 Write 方法,包括 os.Stdout,文件(例如 os.File),管道,網(wǎng)絡連接,通道等等。同樣地,也可以使用 bufio 包中緩沖寫入。bufio 包中定義了 type Writer struct{…}

JSON 數(shù)據(jù)格式

編碼

數(shù)據(jù)結構要在網(wǎng)絡中傳輸或保存到文件,就必須對其編碼和解碼;目前存在很多編碼格式:JSON,XML,gob,Google 緩沖協(xié)議等等。Go 語言支持所有這些編碼格式

結構可能包含二進制數(shù)據(jù),如果將其作為文本打印,那么可讀性是很差的。另外結構內(nèi)部可能包含匿名字段,而不清楚數(shù)據(jù)的用意

通過把數(shù)據(jù)轉換成純文本,使用命名的字段來標注,讓其具有可讀性。這樣的數(shù)據(jù)格式可以通過網(wǎng)絡傳輸,而且是與平臺無關的,任何類型的應用都能夠讀取和輸出,不與操作系統(tǒng)和編程語言的類型相關

比如給出如下的代碼,主要會進行一些json數(shù)據(jù)的編碼或解碼

json.Marshal() 的函數(shù)簽名是 func Marshal(v interface{}) ([]byte, error),下面是數(shù)據(jù)編碼后的 JSON 文本(實際上是一個 []byte)

出于安全考慮,在 web 應用中最好使用 json.MarshalforHTML() 函數(shù),其對數(shù)據(jù)執(zhí)行 HTML 轉碼,所以文本可以被安全地嵌在 HTML

解碼任意的數(shù)據(jù):

json 包使用 map[string]interface{}[]interface{} 儲存任意的 JSON 對象和數(shù)組;其可以被反序列化為任何的 JSON blob 存儲到接口值中。

來看這個 JSON 數(shù)據(jù),被存儲在變量 b 中:

b := []byte(`{"Name": "Wednesday", "Age": 6, "Parents": ["Gomez", "Morticia"]}`)

不用理解這個數(shù)據(jù)的結構,我們可以直接使用 Unmarshal() 把這個數(shù)據(jù)編碼并保存在接口值中:

var f interface{}
err := json.Unmarshal(b, &f)

f 指向的值是一個 map,key 是一個字符串,value 是自身存儲作為空接口類型的值:

map[string]interface{} {"Name": "Wednesday","Age":  6,"Parents": []interface{} {"Gomez","Morticia",},
}

要訪問這個數(shù)據(jù),我們可以使用類型斷言

m := f.(map[string]interface{})

我們可以通過 for range 語法和 type switch 來訪問其實際類型:

for k, v := range m {switch vv := v.(type) {case string:fmt.Println(k, "is string", vv)case int:fmt.Println(k, "is int", vv)case []interface{}:fmt.Println(k, "is an array:")for i, u := range vv {fmt.Println(i, u)}default:fmt.Println(k, "is of a type I don’t know how to handle")}
}

通過這種方式,你可以處理未知的 JSON 數(shù)據(jù),同時可以確保類型安全

http://m.risenshineclean.com/news/66238.html

相關文章:

  • 網(wǎng)站備案 名稱 不一致網(wǎng)站推廣seo是什么
  • 建設網(wǎng)站程序下載凡科建站后屬于自己的網(wǎng)站嗎
  • 建站平臺 做網(wǎng)站網(wǎng)絡營銷服務的特點有哪些
  • 企業(yè)建站多站點管理系統(tǒng)惠州seo排名公司
  • 黃岡貼吧黃岡論壇吧今日頭條seo
  • 長沙哪個平臺做網(wǎng)站好滄州seo公司
  • 云南個舊建設局網(wǎng)站深圳營銷型網(wǎng)站定制
  • 公司網(wǎng)站怎么做店鋪seo是什么意思
  • 重慶做營銷型網(wǎng)站建設公司關鍵詞優(yōu)化一年的收費標準
  • 商業(yè)網(wǎng)站建設案例教程seo是干什么的
  • 怎么制作網(wǎng)站客服百度網(wǎng)頁版鏈接地址
  • 網(wǎng)站建設報價單表格深圳網(wǎng)站seo推廣
  • 做網(wǎng)站的人怎么上傳內(nèi)容的湖南網(wǎng)站建站系統(tǒng)哪家好
  • 溫州網(wǎng)站建設方案報價seo優(yōu)化排名易下拉用法
  • 四川省網(wǎng)站建設百度網(wǎng)頁打不開
  • 建筑工程信息頻道寧波受歡迎全網(wǎng)seo優(yōu)化
  • 網(wǎng)站開發(fā)php怎么樣百度推廣代理商加盟
  • wordpress菜譜網(wǎng)站站長之家ip地址查詢
  • github 建網(wǎng)站行業(yè)網(wǎng)站有哪些平臺
  • 網(wǎng)站怎么做播放器促銷活動推廣語言
  • 設計素材網(wǎng)站源碼seo谷歌外貿(mào)推廣
  • 自己的簡歷網(wǎng)站怎么做百度收錄查詢工具官網(wǎng)
  • 做網(wǎng)站建設的電話銷售免費建立網(wǎng)站
  • 網(wǎng)站服務器要多少錢南寧推廣軟件
  • 做電氣設計有哪些好的網(wǎng)站四川省人民政府官網(wǎng)
  • 網(wǎng)站首頁不被收錄上海廣告公司
  • 香港公司能在國內(nèi)做網(wǎng)站個人免費網(wǎng)上注冊公司
  • 企業(yè)網(wǎng)站的建設流程南昌seo數(shù)據(jù)監(jiān)控
  • 帝國cms怎么做網(wǎng)站谷歌ads
  • 電腦哪里做模板下載網(wǎng)站查找關鍵詞的工具叫什么