gin專案準備

2021-09-27 09:12:14 字數 4596 閱讀 4786

set goproxy=

set go111module=on
export goproxy=
export go111module=on
gin的**:

golang100day:

千峰golang平台:

切片 指標,指向陣列中slice指定的開始位置

長度,即slice的長度

最大長度,也就是slice開始位置到陣列的最後位置的長度

集合map

map是無序的,每次列印出來的map都不一樣,也不能通過index獲取,必須通過key獲取

map的長度是不固定的,也就是和slice一樣是一種引用型別

內建的len函式同樣適用於map,map擁有的key的數量

map的key可以是所有可比較的型別,如布林型,整數型,浮點型,複雜型,字串型

package main

import (

"fmt"

)func change(val *int)

func main()

type books struct 

var book1 books

book1.title = "go 語言"

var struct_pointer *books
struct_pointer = &book1;
struct_pointer.title;
package main

import (

"fmt"

)type address struct

type person struct

func main()

fmt.println("name:", p.name)

fmt.println("age:",p.age)

fmt.println("city:",p.address.city)

fmt.println("state:",p.address.state)

}

make用於內建型別(map、slice 和channel)的記憶體分配。new用於各種型別的記憶體分配 內建函式new本質上說跟其它語言中的同名函式功能一樣:new(t)分配了零值填充的t型別的記憶體空間,並且返回其位址,即乙個*t型別的值。用go的術語說,它返回了乙個指標,指向新分配的型別t的零值。有一點非常重要:new返回指標

內建函式make(t, args)與new(t)有著不同的功能,make只能建立slice、map和channel,並且返回乙個有初始值(非零)的t型別,而不是*t。本質來講,導致這三個型別有所不同的原因是指向資料結構的引用在使用前必須被初始化。例如,乙個slice,是乙個包含指向資料(內部array)的指標、長度和容量的三項描述符;在這些專案被初始化之前,slice為nil。對於slice、map和channel來說,make初始化了內部的資料結構,填充適當的值。

make返回初始化後的(非零)值。

package main

import (

"fmt"

"os"

)func main()

fmt.printf("%t\n",fileinfo)

//檔名

fmt.println(fileinfo.name())

//檔案大小

fmt.println(fileinfo.size())

//是否是目錄

fmt.println(fileinfo.isdir()) //isdirectory

//修改時間

fmt.println(fileinfo.modtime())

//許可權

fmt.println(fileinfo.mode()) //-rw-r--r--

//file3, err := os.open("d:/project/src/gindemo1/demo2/cui.txt")

//if err != nil

err1 := os.remove("d:/project/src/gindemo1/demo2/cui.txt")

if err1 != nil

fmt.println("刪除成功")

}

package main

import (

"fmt"

"io/ioutil"

)func copyfile(srcfile, destfile string)(int, error)

err = ioutil.writefile(destfile, input, 0644)

if err != nil

return len(input), nil

}func main()

package main

import (

"fmt"

"io"

"os"

)func copyfile1(srcfile, destfile string)(int, error)

file2,err:=os.openfile(destfile,os.o_wronly|os.o_create,os.modeperm)

if err != nil

defer file1.close()

defer file2.close()

bs := make(byte,1024,1024)

n := -1

total := 0

for else if err !=nil

total += n

_, _ = file2.write(bs[:n])

} return total,nil

}func main()

package main

import (

"fmt"

"io"

"os"

)func run(srcfile, destfile string)(int64, error)

file2, err := os.openfile(destfile,os.o_wronly|os.o_create,os.modeperm)

if err != nil

defer file1.close()

defer file2.close()

return io.copy(file2, file1)

}func main()

結論:copy和ioutil效能都不錯

io包下read()和write()直接讀寫:我們自己建立讀取資料的切片的大小,直接影響效能

斷點續傳思路,想實現斷點續傳就是記住上一次傳遞了多少的資料,可以建立乙個臨時檔案,記錄已經傳遞的資料量,當恢復傳遞時,先從臨時檔案中讀取已經傳遞的資料量,然後通過seek方法,設定該讀和寫的位置,再繼續傳遞資料。

package main

import (

"fmt"

"os"

"strconv"

"io"

)func main()

//將資料寫入到目標檔案

n3,_=file2.write(data[:n2])

total += n3

//將複製總量,儲存到臨時檔案中

file3.seek(0,io.seekstart)

file3.writestring(strconv.itoa(total))

//假裝斷電

//if total>8000

}}

io操作本身的效率並不低,低的是頻繁的訪問本地磁碟的檔案。所以bufio就提供了緩衝區(分配一塊記憶體),讀和寫都先在緩衝區中,最後再讀寫檔案,來降低訪問本地磁碟的次數,從而提高效率。

pass

data := <- a // read from channel a  

a <- data // write to channel a

/*

雙向:chan t -->

chan <- data,寫出資料,寫

data <- chan,獲取資料,讀

單向:定向

chan <- t,

只支援寫,

<- chan t,

唯讀*/

select
go語言的最大兩個亮點,乙個是goroutine,乙個就是chan了。二者合體的典型應用csp,基本就是大家認可的並行開發神器,簡化了並行程式的開發難度,我們來看一下csp。

gin 專案結構 Gin框架 專案目錄

go go語言 golang gin框架 專案目錄 概述今天給大家分享,在 api 端使用 gin 框架時,專案的目錄。目錄 project name config 配置檔案 controller 控制器層 service 業務層 repository 資料庫操作層 model 資料庫orm ent...

gin go筆記 建立gin專案二

花不知名分外嬌 gin 框架的選擇 經過各種網路搜尋各個框架效能及優缺點,最終鎖定beego和gin 兩款框架。本人又經過長期思想鬥爭,耗死千萬腦細胞的情況下選擇了gin 原因就是效能好。沒有框架應有的目錄結構,才是真正的目錄結構 這樣可以想怎麼搞怎麼搞!當然,作為乙個資深的php碼農,使慣了mvc...

接手專案準備

一 xcode需要安裝的外掛程式 二 把自己定義的 塊,覆蓋xcode本身的 三 安裝cocopads 若沒有 四 映象沒有解決辦法 gem sources l 只有在終端中出現下面文字才表明你上面的命令是成功的 current sources sudo gem install cocoapods ...