有趣的代码样例golang

发布时间:2024-07-05 00:15:23

如今,Golang(或Go)已成为计算机科学领域中备受推崇的编程语言之一。它凭借其简洁、高效和并发性能而备受开发者的青睐。本文将为您带来一些有趣的Golang代码样例,展示出这门语言的魅力。

1. 并发爬虫

一个有趣且实用的示例是使用Golang编写并发爬虫。通过利用Goroutine和Channel,我们可以轻松实现并发处理多个URL的能力。

示例代码:

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func fetch(url string, ch chan<- string) {
    resp, err := http.Get(url)
    if err != nil {
        ch <- fmt.Sprint(err)
        return
     }
    
     defer resp.Body.Close()
     
     body, err := ioutil.ReadAll(resp.Body)
     if err != nil {
         ch <- fmt.Sprintf("Error reading %s: %v", url, err)
         return
     }
     
     ch <- fmt.Sprintf("Fetched %s", url)
}

func main() {
    urls := []string{"https://www.example.com", "https://www.google.com", "https://www.github.com"}

    ch := make(chan string)
    for _, url := range urls {
        go fetch(url, ch)
    }
    
    for range urls {
        fmt.Println(<-ch)
    }
}

2. 模板渲染

Golang提供了强大的模板引擎包text/template和html/template,可用于动态生成HTML、邮件和其他文本格式。下面的代码展示了如何使用模板引擎生成HTML页面。

import (
    "html/template"
    "os"
)

type Student struct {
    Name string
    Age  int
}

func main() {
    s := Student{Name: "Alice", Age: 20}
    
    tpl := `
        <html>
        <head>
        <title>Student Profile</title>
        </head>
        <body>
        <h1>Student Profile</h1>
        <p>Name: {{.Name}}</p>
        <p>Age: {{.Age}}</p>
        </body>
        </html>
    `
    
    t, _ := template.New("student").Parse(tpl)
    
    err := t.Execute(os.Stdout, s)
    if err != nil {
        panic(err)
    }
}

3. JSON序列化和反序列化

在Golang中,我们可以轻松地进行JSON数据的序列化和反序列化。下面的示例展示了如何将结构体转换为JSON字符串以及如何将JSON字符串解析为结构体对象。

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    p1 := Person{Name: "Alice", Age: 25}
    
    // 序列化为JSON字符串
    jsonString, err := json.Marshal(p1)
    if err != nil {
        panic(err)
    }
    
    fmt.Println(string(jsonString))
    
    // 反序列化JSON字符串为结构体对象
    var p2 Person
    err = json.Unmarshal(jsonString, &p2)
    if err != nil {
        panic(err)
    }
    
    fmt.Println(p2.Name, p2.Age)
}

以上是一些有趣的Golang代码样例,展示了Golang在并发处理、模板渲染和JSON处理方面的强大功能。通过这些示例,我们可以深入了解到Golang的魅力所在。无论是构建高性能的网络应用程序还是处理大规模数据,Golang都是一个值得尝试的选择。

相关推荐