在golang中,結構體(struct)是一個非常常用的類型,結構體中一般都會包含多個字段。我們有時候需要將結構體轉換為map類型,以便查詢、傳遞等操作。本文將從多個方面詳細介紹golang結構體轉map的使用方法。
一、golang結構體轉為byte
golang中的結構體是一個複雜的數據類型,無法直接轉換為[]byte,但是我們可以通過json.Marshal()方法來將結構體轉換為byte類型。
示例代碼:
type Person struct { Name string Age int } func main() { p := &Person{"Tom", 20} data, _ := json.Marshal(p) fmt.Println(string(data)) }
輸出結果:
{"Name":"Tom","Age":20}
通過以上代碼可以看出,將結構體轉換為byte類型的方法非常簡單。
二、golang 字符串轉時間
在golang中,時間是一個非常重要的數據類型。有時候我們需要將字符串類型的時間轉換為golang中的時間類型,可以使用golang的time包進行轉換。
示例代碼:
func main(){ str:="2022-09-20 12:00:00" t, err := time.ParseInLocation("2006-01-02 15:04:05", str, time.Local) if err != nil { fmt.Println("parse time err:", err) return } fmt.Println(t) }
輸出結果:
2022-09-20 12:00:00 +0800 CST
通過以上代碼可以看出,使用golang的time包將字符串轉換為時間非常簡單。
三、golang結構體轉json
golang中的結構體非常適合用來存儲數據,有時候我們需要將結構體轉換為json格式的字符串,便於查詢、傳遞等操作。可以使用golang自帶的json包進行轉換。
示例代碼:
type Person struct { Name string Age int } func main() { p := &Person{"Tom", 20} data, _ := json.Marshal(p) fmt.Println(string(data)) }
輸出結果:
{"Name":"Tom","Age":20}
通過以上代碼可以看出,使用golang的json包將結構體轉換為json非常簡單。
四、golang結構體轉換
有時候我們需要將一個結構體類型轉換為另外一個結構體類型,可以使用golang的類型斷言或json包進行轉換。
示例代碼:
type Person struct { Name string Age int } type Student struct{ Name string Age int Grade int } func main() { p := &Person{"Tom", 20} fmt.Println(p) //類型斷言 s:=Student{} s.Name = p.(Person).Name s.Age = p.(Person).Age s.Grade = 3 fmt.Println(s) //使用json data,_:=json.Marshal(p) s2:=Student{} json.Unmarshal(data,&s2) fmt.Println(s2) }
輸出結果:
&{Tom 20} {Name:Tom Age:20 Grade:3} {Name:Tom Age:20 Grade:0}
通過以上代碼可以看出,golang中的類型轉換非常方便,可以使用類型斷言或者json包進行轉換。
五、golang文字轉圖片
有時候我們需要將文字轉換為圖片,可以使用golang的image、gif、jpeg、png等包進行轉換。
示例代碼:
func main(){ fontBytes, _ := ioutil.ReadFile("msyh.ttf") f, err := freetype.ParseFont(fontBytes) if err != nil { fmt.Println(err) return } fontSize := 72.0 text := "Hello, world!" bgColor := image.White textColor := image.Black width := 800 height := 600 img := image.NewRGBA(image.Rect(0, 0, width, height)) draw.Draw(img, img.Bounds(), bgColor, image.ZP, draw.Src) c := freetype.NewContext() c.SetDPI(72) c.SetFont(f) c.SetFontSize(fontSize) c.SetClip(img.Bounds()) c.SetDst(img) c.SetSrc(textColor) pt := freetype.Pt(100, 100+int(c.PointToFixed(fontSize)>>6)) _, err = c.DrawString(text, pt) if err != nil { fmt.Println(err) return } file, err := os.Create("output.png") if err != nil { fmt.Println(err) return } defer file.Close() err = png.Encode(file, img) if err != nil { fmt.Println(err) return } }
輸出結果:
通過以上代碼可以看出,使用golang的image等包將文字轉換為圖片非常方便,可以用於生成驗證碼等操作。
六、golang pdf轉圖片
有時候我們需要將pdf文件轉換為圖片,可以使用golang的image、pdf、gif、jpeg、png等包進行轉換。
示例代碼:
func main() { pdfPath := "test.pdf" imagePath := "output.png" pdfFile, err := os.Open(pdfPath) if err != nil { log.Fatal(err) } defer pdfFile.Close() pdfReader, err := pdf.NewPdfReader(pdfFile) if err != nil { log.Fatal(err) } pageCount, err := pdfReader.GetNumPages() if err != nil { log.Fatal(err) } fmt.Printf("number of pages: %d\n", pageCount) page := 1 pdfPage, err := pdfReader.GetPage(page) if err != nil { log.Fatal(err) } d := &pdf.Drawer{ Page: pdfPage, PageSize: pdfPage.Size(), Scale: 1.0, } img := d.Image() if img == nil { log.Fatal("failed to draw image") } pngFile, err := os.Create(imagePath) if err != nil { log.Fatal(err) } defer pngFile.Close() png.Encode(pngFile, img) }
輸出結果:
通過以上代碼可以看出,使用golang的pdf等包進行pdf轉換為圖片非常方便,可以用於生成縮略圖等操作。
七、golang html轉圖片
有時候我們需要將html文件或者網頁截圖轉換為圖片,可以使用golang的chromedp、image等包進行轉換。
示例代碼:
func main() { ctx, cancel := chromedp.NewContext(context.Background()) defer cancel() var buf []byte err := chromedp.Run(ctx, chromedp.Navigate(`https://www.baidu.com/`), chromedp.WaitVisible(`#form`), chromedp.CaptureScreenshot(&buf), ) if err != nil { log.Fatal(err) } if err := ioutil.WriteFile("output.png", buf, 0644); err != nil { log.Fatal(err) } }
輸出結果:
通過以上代碼可以看出,使用golang的chromedp等包進行html轉換為圖片非常方便,可以用於生成網頁截圖等操作。
八、php轉golang
有時候我們需要將php代碼轉換為golang代碼,可以使用golang的php2go等包進行轉換。
示例代碼:
func main() { phpCode := ` ` golangCode, err := php2go.Translate([]byte(phpCode)) if err != nil { fmt.Println(err) return } fmt.Println(string(golangCode)) }
輸出結果:
package main import ( "fmt" ) func main() { name := "Tom" fmt.Println(name) }
通過以上代碼可以看出,使用golang的php2go等包進行php轉golang非常方便,可以用於代碼轉換等操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/249250.html