package main

import (
    "fmt"
    "math/rand"
    "time"
)

// bubbl 冒泡排序
func bubbl(list []int, t int, ch chan int) {
    for i := len(list) - 1; i > 0; i-- {
        for j := 0; j < i; j++ {
            if t == 1 && list[j] > list[j+1] {
                list[j], list[j+1] = list[j+1], list[j]
            }
            if t == 2 && list[j] < list[j+1] {
                list[j], list[j+1] = list[j+1], list[j]
            }
        }
    }
    fmt.Println(list)
    //通知主协程已完成
    ch <- 1
}

// isoscelesTriangle 生成一个等腰三角
func isoscelesTriangle(num int) {
    fmt.Println("三角形的行数:", num)
    //睡一秒看效果
    time.Sleep(1 * time.Second)
    // 标记行数
    for i := 1; i <= num; i++ {
        // 打印前面的空格
        for k := 1; k <= num-i; k++ {
            fmt.Print(" ")
        }
        // 打印每行星号
        for j := 1; j <= 2*i-1; j++ {
            fmt.Print("*")
        }
        fmt.Println() // 作用:每行打印完毕换行
    }
}

func main() {
    //新建一个没有缓冲的管道
    ch := make(chan int)
    //随机生成
    list := []int{}
    for i := 10; i > 0; i-- {
        list = append(list, rand.Intn(999))
    }
    //1是升序 2是降序
    go bubbl(list, 1, ch)
    fmt.Println("等会会有1s延迟时间")
    isoscelesTriangle(len(list))
    //从空缓冲的信道读取int,将会堵塞,知道有消息到来
    _ = <-ch
    fmt.Println("打印完成")
}

运行后效果:
搜狗截图23年02月23日1516_1.png