亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

? ??? ?? Golang ???? ?? ??? Golang? ???? ?? ????

???? ?? ??? Golang? ???? ?? ????

Dec 30, 2024 pm 04:18 PM

?? ? ???? ??? ??????

1. ?? ?? ??: ??? ?? ???. ?? ???? ??? ? ??? ?????.
2. ?? ? ??: ?? ??? ???? ?? ?? ????? ????, ?? ?? ??? ????, ??? ?? ?????.
???? ?? ?? ?? ??? ?? ? ????
3. ??? ?? ??: ??? ??? ???? ?? ??? ??? ???. ??? ?? ??? ??? ?? ??? ? ??? ??? ???. ??? ??????.
4. ?? ?? ??: ? ???? ??? ?????. ??? ??? ?? ???? ?????? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ??? "Go ??? ?????" ???? 1????.

  • ???? ?? ??? ?? ??
  • ??? ? ?? ??
  • ???? ?? ? ?? ??
  • ???? ? ? ???

???? ???? ?? ????? ???? ??? ?? ??? ???? ??????.

?? ??? ????, ? ? ???? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

??? ?? ??? ?? ?????.

???? ??

?? ??? ?????? ??? ?????? ??? ?????.

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now()

    downloadFile("file1.txt")
    downloadFile("file2.txt")
    downloadFile("file3.txt")

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ????? ???? ?? ? 2? ????? ????? ?? ??? ????? ? 6?? ?????. ?? ???? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

? ??? ?? ? ????. go ??? ????? ????? ??? ?????.

????: ?? ?? ?? ???? ?????

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    // Launch downloads concurrently
    go downloadFile("file1.txt")
    go downloadFile("file2.txt")
    go downloadFile("file3.txt")

    fmt.Println("All downloads completed!")
}

????? ???? ???? ????? ???

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ?? ???? ??? ???? ?? ?? ???? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ???? ?? ??? ???? ???? ?? ?? ??? ????? ?? ?????. ? ?? ??? ?? ???? ?? ??? ?? ??? ????? ????.

??: ?? ?? ??? ?????? ;)

? ??? ????? ?? ???? ?? ???? ??? ??? ????? ?? ??? ?????. ?? ???? ???? ?? ??? ????:

  1. ? ?? ?????(?? ??)
  2. WaitGroup ??(??? ??, ?? ??)
  3. ?? ??(? ??? ???? ??????)

go ??? ??? ??? ? ? ?? ?????.

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now()

    downloadFile("file1.txt")
    downloadFile("file2.txt")
    downloadFile("file3.txt")

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

? ??? ???? ??? ?? ??? ??? ? ? ??? ????. ??? ?? ??? ????? ?? ??????? ???? ??? ????? ?? ?? ????.

sync.WaitGroup? ?????.

Go? sync.WaitGroup? ??? ??? ??? ??? ??? ???? ? ???? ??? ?? ???????.

??? ??? ?? ???? ?????.

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    // Launch downloads concurrently
    go downloadFile("file1.txt")
    go downloadFile("file2.txt")
    go downloadFile("file3.txt")

    fmt.Println("All downloads completed!")
}

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ????? sync.WaitGroup? ??? ??? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

??? ????:

  • WaitGroup? ?? ???? ?????
  • wg.Add(n)? ???? n?? ??????.
  • wg.Done()? ???? 1? ??????.
  • wg.Wait()? ???? 0? ??? ??? ?????.

??? ??:

  • ?? ???? ???? ???? ?? Add(3)? ?????
  • ? ???? ???? Done()? ?????
  • ?? ???? ???? 0? ??? ??? Wait()?? ?????.
  • ???? 0? ???? ????? ???? ???? ?????

??? ? ???? ??
package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now() // Record start time

    go downloadFile("file1.txt")
    go downloadFile("file2.txt")
    go downloadFile("file3.txt")

    // Wait for goroutines to finish
    time.Sleep(3 * time.Second)

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

??

??? ??? ???? ??? ????? ? ??????. ?? ?? ??? ??? ?????? ??? ???? ????.

Go?

??? ??? ?? ??? ???? ??? ??? ?? ?????. ?? ???? ???? ???? ??? ? ?? ??? ?????.

??? ???? ?????: ? ???? ???? ??? ?? ? ?? ?? ???? ?? ?? ? ????.

? ?? ??? ??? ????.

  1. ??? ????? ???? ????.
  2. ?? ???? ???? ??? ??? ??? ??? ?? ch ?????.
  3. ???? ?? ??? ?? ???? ??? ?? ??? <-ch ?????.
package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now()

    downloadFile("file1.txt")
    downloadFile("file2.txt")
    downloadFile("file3.txt")

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

Understanding Goroutines and Channels in Golang with Intuitive Visuals

ch <- "hello"? ?? ??? ???? ??? ?????? ??? ????? ???? ?? ???? "hello"? ???? ???? ???? ?? ??? ?? ???? ???? ???? ?? ??? ??? ???.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

???? ???? ? ??? ??? ?????

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    // Launch downloads concurrently
    go downloadFile("file1.txt")
    go downloadFile("file2.txt")
    go downloadFile("file3.txt")

    fmt.Println("All downloads completed!")
}

??? ???? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ???? ?? ????? ????? ??? ???? ???? ??? ??? ?? msg := <-ch? ???? ???? ??? ??? ?? ???? ?????. ???.

??? ???? ??? ?? ??? ???? ?? ?? ??

?? ??? ???? ?? ???? ??? ??? ?????(??? ?? ??? ??? ??? ???? ????).

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now() // Record start time

    go downloadFile("file1.txt")
    go downloadFile("file2.txt")
    go downloadFile("file3.txt")

    // Wait for goroutines to finish
    time.Sleep(3 * time.Second)

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

Understanding Goroutines and Channels in Golang with Intuitive Visuals

???:

Understanding Goroutines and Channels in Golang with Intuitive Visuals

? ? ???? ?? ??? ??????.

???? ??:

?? ???? ??? ??? ?????
3?? ???? ??? ??
? ???? ??? ??? ?? ??? ????

???? ??:

  1. ? ?? ????? ?? ??? ?????
  2. ?? 2?? ?????
  3. ??? ???? ?? ?? ????

?? ??:

  1. ?? ???? ??? ?????: for i := 0; ?? < 3; ?
  2. ? <-done? ?? ??? ??? ?????
  3. ??? ? ?? ?? ??? ?? ????? ?????

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ??:

  1. ?? 1: ? ?? ????? ??? ??? ??
  2. ?? 2: ? ?? ????? ??? ??? ??
  3. ?? 3: ?? ????? ??? ??? ??

????? ??????!

??:
? ? ??(?? <- true)?? ??? ? ?? ??(<-done)
? ????. ? ?? ???? ??? ?? ?? ?? ?????

? ?? ???? ??? ??? ? ????

??? ?? ? ?? ???? ??? ??? ? ??? ???????. ??? ???. ?? ??? ?????? ?? ?? ???.

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now()

    downloadFile("file1.txt")
    downloadFile("file2.txt")
    downloadFile("file3.txt")

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

??? ????? ??? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

?? ??:

???? ??(t=0ms)

  • ?? ???? ? ?? ??? ??????.
    • ch: ????.
    • senderDone: ?? ???? ?? ??? ????.
    • receiveDone: ?? ?? ??? ????.
  • ?? ???? ? ?? ???? ?????:
    • ???.
    • ???.
  • ?? ??? ??? <-senderDone? ??? ???? ????.

? ?? ???(t=1ms)

  1. ???? ?? ??? "??? 1"? ????.
  2. ???? ???? ???? ?????.
    • ???: "???: ??? 1".
  3. ???? 100ms ?? ?? ?? ????.

? ?? ???(t=101ms)

  1. ???? ??? ?? ??? "??? 2"? ????.
  2. ???? ???? ?????.
    • ???: "???: ??? 2".
  3. ???? 100ms ?? ?? ?? ????.

? ?? ???(t=201ms)

  1. ???? ??? ?? ??? "??? 3"? ????.
  2. ???? ???? ?????.
    • ???: "???: ??? 3".
  3. ???? ????? ?? ?? ????.

?? ??(t=301ms)

  1. ???? ?? ?? ?? ??? ????.
  2. ???? ??? ???? ?? senderDone ??? ?? ??? ????.
  3. ???? ?? ??? ?? ?? ?????.
  4. ???? ?? ??? ?????.

??(t=302-303ms)

  1. ?? ???? senderDone???? ??? ???? ??? ?????.
  2. ?? ???? ReceiverDone? ??? ???? ?????.
  3. ???? ??? ?? ??? ?? ??? ????.
  4. ?? ???? ??? ???? ??? ?????.
    • "?? ??? ???????!".
  5. ????? ?????.

???? ??

?? ??? ??? ??? ??????
????? ?? ??? ???? ??? ??? ???? ???? ?? ?????. ???? ??? ??? ?? ? ???? ??? ??? ?? ?? ??????? ??? ????? ?? ??? ?? ??? ??? ? ????.

?? ?? ??:

  1. FIFO(????, ???? ??)
  2. ?? ??, ?? ? ??
  3. ??? ?? ?? ???? ?????
  4. ??? ?? ??? ???? ?????

Understanding Goroutines and Channels in Golang with Intuitive Visuals

??? ??????:

package main

import (
    "fmt"
    "time"
)

func downloadFile(filename string) {
    fmt.Printf("Starting download: %s\n", filename)
    // Simulate file download with sleep
    time.Sleep(2 * time.Second)
    fmt.Printf("Finished download: %s\n", filename)
}

func main() {
    fmt.Println("Starting downloads...")

    startTime := time.Now()

    downloadFile("file1.txt")
    downloadFile("file2.txt")
    downloadFile("file3.txt")

    elapsedTime := time.Since(startTime)

    fmt.Printf("All downloads completed! Time elapsed: %s\n", elapsedTime)
}

??(ch<-"third" ?? ??? ???? ?)

Understanding Goroutines and Channels in Golang with Intuitive Visuals

? ?? ???? ???? ?????

  1. ?? ??? ???? ???? ???? ?? ?? ???? ??? ? ????.

  2. ??? ??? 2???. ?, ???? ?? ??? ? ?? ?? ??? ? ????.

  3. '? ??'? '? ??'? ??? ?? ?? ????. ? ?? ???? ?? ???? ?? ??? ?? ??? ??? ?????.

  4. ?? ???? ??? ???? ???? ?? ??? ?? ?? ???? ?? ??? ????? ? ?? ???? ???? ? ? ?? ??? ?????.

? ?? ???? ?? ??? ???? ?? ??? ?? ?? ?? ??? ???? ? ?? ???? ??? ??? ??? ?????.

Understanding Goroutines and Channels in Golang with Intuitive Visuals

???? ??? ????? ?? ??? ???? ??

Aspect Buffered Channels Unbuffered Channels
Purpose For decoupling sender and receiver timing. For immediate synchronization between sender and receiver.
When to Use - When the sender can proceed without waiting for receiver. - When sender and receiver must synchronize directly.
- When buffering improves performance or throughput. - When you want to enforce message-handling immediately.
Blocking Behavior Blocks only when buffer is full. Sender blocks until receiver is ready, and vice versa.
Performance Can improve performance by reducing synchronization. May introduce latency due to synchronization.
Example Use Cases - Logging with rate-limited processing. - Simple signaling between goroutines.
- Batch processing where messages are queued temporarily. - Hand-off of data without delay or buffering.
Complexity Requires careful buffer size tuning to avoid overflows. Simpler to use; no tuning needed.
Overhead Higher memory usage due to the buffer. Lower memory usage; no buffer involved.
Concurrency Pattern Asynchronous communication between sender and receiver. Synchronous communication; tight coupling.
Error-Prone Scenarios Deadlocks if buffer size is mismanaged. Deadlocks if no goroutine is ready to receive or send.

?? ???

??? ?? ?? ?? ??? ?????.

  1. ???? ???? ???? ???? ???.
  2. ???? ?? ????? ???? ???? ??? ??? ? ????.
  3. ??????? ??? ?? ?? ??? ?? ??? ??? ? ????.

??? ?? ?? ???? ?? ??? ?????.

  1. ??? ? ???? ?? ?????.
  2. ???? ???? ??? ??? ????.
  3. ???? ??? ?? ????? ????? ????? ???.

??? ?? ??? ?? ??? ??? ?? ??? ?????. ?? ?????? ?? ??? ???????.

?? ???:

  1. ??? ??
  2. ???? ??? ???

Go? ??? ??? ??? ?? ??? ?? ???? ?? ?? ??? ??? ????!

Understanding Goroutines and Channels in Golang with Intuitive Visuals

? ??? ???? ?? ??? Golang? ???? ?? ????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

??? ????
1597
29
PHP ????
1488
72
???
Golang Frontend ?? ?????? Golang Frontend ?? ?????? Jul 08, 2025 am 01:44 AM

Golang? ?? ??? ??? ????? ??? ?? ???? ??? ? ??? ? ?? ????. ?? ??? ???, ?? ?? ? ??? ?? ?????? ????? API ??, ???? ???, ?? ???, ?????? ?? ? CLI ??? ?? ??? ?? ????? ???? ? ?????. Golang? ? ??? ??? ?? ??? ???? Gopherjs? ?? JavaScript? ?????? Tinygo? ?? WebAssembly?? ????? ??? ?? ??? ???? ?? ??? ???? HTML ???? ?? ? ? ????. ??? ???? ??? ?? ??? ??? ??JavaScript/TypeScript ? ???? ???????. ??? Golang? ??? ???? ???? ?? ?? ??? ? ?????.

Golang?? GraphQL API? ???? ?? Golang?? GraphQL API? ???? ?? Jul 08, 2025 am 01:03 AM

GO?? GraphQlapi? ????? GQLGEN ?????? ???? ?? ???? ????? ?? ????. 1. ?? ???? ???? ?? ?? ??? ???? GQLGEN? ?? ??? ?????? ??????. 2. ?? ?? GraphQLSchema? ???? POST ?? ? ?? ??? ??? ?? API ?? ? ?? ??? ??????. 3. ?? ?? ????? ????? ?? ??? ???? Resolver?? ???? ??? ?????. 4. ????? ??? Qlhandler? httpserver? ???? ?? ???? ?? API? ???????. ?? ?? ?? ??, ?? ??, ?? ??? ? ?? ??? ???? ???? ?? ??? ?????.

GO? ???? ?? GO? ???? ?? Jul 09, 2025 am 02:37 AM

GO? ???? ?? ??? ??? ???? ?? ??? ???? ??? ???? ????. 1. ?? ???? ?? ???? ??????? ?? ? ???? ??????. Windows? .msi ??? ???? MacOS? .pkg ??? ???? Linux? .tar.gz ??? ???? /usr /local ????? ??? ????. 2. Linux/MacOS?? ?? ??, ?? ~/.bashrc ?? ~/.zshrc? ???? ??? Gopath? ???? Windows Set ??? ??? ???? ?????. 3. ?? ??? ???? ??? ???? ??? ???? Hello.Go? ???? ?? ? ??? ???? ??????. ???? ???? ?? ?? ? ??

go sync.waitgroup ?? go sync.waitgroup ?? Jul 09, 2025 am 01:48 AM

sync.waitgroup? ?? ? ??? ??? ?? ? ??? ???? ? ?????. ??? ??? ? ?? ??? ?? ?? ??? ???? : ??, ?? ? ??. 1. Aadd (n) ?? ? ?? ? ?? ?????. 2. DONE ()? ? ? ??? ??? ???? ???? 1 ? ?? ???. 3. Wait ()? ?? ??? ?? ? ??? ?? ? ??? ?????. ?? ??? ?? ?? ?? : ADD? ?? ? ???? ????????. ?? ??? ??? DON? ????? ??????. ??? ?? ???? ?? ????. ? ???? ?? ???, ?? ??? ?? ? ?? ?????? ????? ??? ????? ????? ?? ? ? ????.

???/??? ??? ?????? ???/??? ??? ?????? Jul 20, 2025 am 04:14 AM

??? ? ??? ??? ??? ?? ???? ? ??? ??? ???? ? ????. 1. ?? ?????? ??, ???, ??, ??? ? ??? ???? ? ???? ??? ? ???? ????. 2. ??? ? ??? ??, ?? ??, ??? ???, ??? ?? ?? ?? ???? ??? ?? ??, ?? ???, ??? ?? ??, ?? ?? ?? ?? ?? ??? ? ????. 3. FFMPEG, OPENCV, WEBRTC, GSTREAMER ? ?? ??? ???? ??? ???? ?? ????. 4. ?? ?? ???? ???? ??, ???? ??? ??? ?? ??, ?? ??? ? ??? ?? ?????? ???????. ??? ?? ???? ????? ?? ???? ??? ??? ????? ? ??????.

?? ????? ?????? ?? ????? ?????? Jul 09, 2025 am 02:46 AM

Go? Embed ???? ???? ? ???? ??? HTML, CSS, ?? ? ?? ??? ???? ? ??? ?? ???? ????? ?? ???? ? ????. 1. ?? ? ???? ????? ??????. 2. ??/*? ?? ?? ????? ??? ? ??? embed.fs? ?? ?? ?? ??? ??? ? ????. 3. ?? ?? ?? ?? ??? ?? ??? ?? ??? ???? ???? ????? ?? ????. 4. ???? ???? ?? ???, ?? ?? ?? ? ?? ?? ?????????. Embed? ???? ??? ??? ????? ???? ??? ??? ? ? ????.

?? ?? ? ??? ???? ?? ?? ?? ? ??? ???? ?? Jul 15, 2025 am 03:05 AM

?? ?? ??? ? ??? ???? ?? ??? ????. ??? Net/HTTP ???? ???? ?? ???? ???? ? ????. 1. net/http? ???? ?? ??? ??? ??????. ?? ?? ??? ???? ? ?? ??? ?? ??? ????. 2. ??? ?? : Servemux? ???? ?? ??? ? ??? ?? ?? ????? ??? ?????. 3. ???? ?? : ?? ?? ? ?? ??? ? ?? ?????? ???? ??? ??? ?????. 4. ?? ?? ??? : http.fileserver? ?? HTML, CSS ? JS ??? ?????. 5. ?? ? ?? : HTTPS ???, ?? ??? ??? ???? ?? ? ??? ????? ?? ?? ??? ?????. ??? ?? ???? ????? ??? ???? ?? ? ?? ????.

?? ???? ?????? ?? ???? ?????? Jul 14, 2025 am 02:54 AM

Select Plus Default? ??? ?? ??? ???? ??? ?? ????? ??? ? Select? ?? ??? ????? ???? ????. 1. ???? ?? ???? ???? ?? ? ? ??? ?? ??? ?? ??? ?? ?????. 2. ??? ??. ?? ?? ?? ????? ???? ?????. ??? ?? ?? ???? ?? ?? ????. 3. ?? ??? ????, ??? ?? ??? ???? ?? ?? ????? ???? ???????. ?? ??? ?? ?? ??? ?? ???? ?? ? ? ??? ?? ? ??? ?? ????? ??? ???? ????.

See all articles