Rumah >pembangunan bahagian belakang >Golang >Amalan pengaturcaraan tak segerak bagi fungsi golang

Amalan pengaturcaraan tak segerak bagi fungsi golang

王林
王林asal
2024-04-28 21:27:02680semak imbas

Pengaturcaraan tak segerak membolehkan tugasan dilakukan tanpa menyekat utas utama. Bahasa Go menggunakan goroutine benang ringan dan saluran paip komunikasi untuk melaksanakan pengaturcaraan tak segerak. Goroutines dicipta dengan kata kunci pergi dan saluran digunakan untuk menghantar dan menerima data antara goroutine. Kes praktikal: Permintaan web serentak menggunakan saluran untuk menerima respons permintaan dan menghantar permintaan HTTP GET secara serentak melalui goroutine. Benang utama menerima respons daripada saluran dan mencetak hasilnya, meningkatkan prestasi program dan responsif.

Amalan pengaturcaraan tak segerak bagi fungsi golang

Amalan pengaturcaraan tak segerak untuk fungsi bahasa Go

Pengaturcaraan tak segerak ialah teknik pengaturcaraan selari yang membolehkan pengaturcara melaksanakan pelbagai tugas tanpa menyekat utas utama. Dalam bahasa Go, pengaturcaraan tak segerak boleh dilaksanakan dengan mudah menggunakan goroutine dan channel. goroutinechannel 可以轻松地实现异步编程。

Goroutine

Goroutine 是 Go 语言中的轻量级线程。与传统线程不同,goroutine 非常轻量,并且由 Go 运行时管理。使用 go

Goroutine

Goroutine ialah benang ringan dalam bahasa Go. Tidak seperti benang tradisional, goroutine sangat ringan dan diurus oleh masa jalan Go. Goroutines boleh dibuat menggunakan kata kunci go.

go func() {
  // 异步任务
}

channel

channel ialah saluran paip yang digunakan oleh bahasa Go untuk berkomunikasi antara goroutin. Saluran boleh digunakan untuk menghantar dan menerima data.

ch := make(chan int)  // 创建一个无缓冲 channel

// 向 channel 发送数据
ch <- 42

// 从 channel 接收数据
x := <-ch

Kes praktikal: Permintaan web serentak

Berikut ialah kes praktikal permintaan web serentak tak segerak: 🎜
package main

import (
  "fmt"
  "net/http"
  "time"
)

func main() {
  // 创建一个 channel 来接收请求响应
  results := make(chan string)

  // 发送并发请求
  for i := 0; i < 10; i++ {
    go func(i int) {
      // 发送 HTTP GET 请求
      resp, err := http.Get(fmt.Sprintf("https://example.com/%d", i))
      if err != nil {
        results <- fmt.Sprintf("Error: %v", err)
        return
      }

      // 接收响应并发送结果
      body, err := ioutil.ReadAll(resp.Body)
      if err != nil {
        results <- fmt.Sprintf("Error: %v", err)
        return
      }

      results <- fmt.Sprintf("Response: %s", string(body))
    }(i)
  }

  // 接收并发请求的响应
  for j := 0; j < 10; j++ {
    fmt.Println(<-results)
  }
}
🎜Program ini mencipta saluran untuk menerima respons permintaan, dan kemudian memulakan 10 goroutin HTTPlyET serentak. Setiap goroutine menghantar hasilnya ke saluran selepas menerima respons. Benang utama menerima hasil daripada saluran dan mencetaknya ke konsol. 🎜🎜Dengan pengaturcaraan tak segerak, program ini boleh mengendalikan permintaan secara serentak tanpa menyekat utas utama, sekali gus meningkatkan prestasi dan responsif aplikasi. 🎜

Atas ialah kandungan terperinci Amalan pengaturcaraan tak segerak bagi fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn