在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
微信掃一掃
支付寶掃一掃