分类 狗浪 下的文章

go的chan

无缓冲区channel

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int) // 创建无缓冲channel
    go func() {
        fmt.Println("time sleep 5 second...")
        time.Sleep(5 * time.Second)
        <-ch
    }()
    fmt.Println("即将阻塞...")
    ch <- 1 // 协程将会阻塞,等待数据被读取
    fmt.Println("ch 数据被消费,主协程退出")
}

结果,消费完才能继续

即将阻塞...
time sleep 5 second...
ch 数据被消费,主协程退出

- 阅读剩余部分 -

Go和Excel

获取包
go get github.com/360EntSecGroup-Skylar/excelize(不需要,程序自动获取v2)
建立test.go

package main

import (
    "fmt"

    "github.com/360EntSecGroup-Skylar/excelize/v2"
)

func main() {
    f := excelize.NewFile()
    // 创建一个工作表
    index := f.NewSheet("Sheet2")
    // 设置单元格的值
    f.SetCellValue("Sheet2", "A2", "Hello world.")
    f.SetCellValue("Sheet1", "B2", 100)
    // 设置工作簿的默认工作表
    f.SetActiveSheet(index)
    // 根据指定路径保存文件
    if err := f.SaveAs("Book1.xlsx"); err != nil {
        fmt.Println(err)
    }
}

go mod init main
go run test.go
生成Book1.xlsx,包含两个Sheet

- 阅读剩余部分 -

狗浪gin做webserver

wy.mikuq.com到期了大球猫叫了一宿,主要需要两个功能
1、返回客户端IP
2、返回时间

package main

import (
    "net/http"
    "time"

    "github.com/gin-gonic/gin"
)

func doIP(c *gin.Context) {
    c.String(http.StatusOK, c.ClientIP())
}

func doTime(c *gin.Context) {
    c.String(http.StatusOK, time.Now().Format("2006-01-02 15:04:05"))
}

func main() {
    r := gin.Default()
    r.GET("/api/ip", doIP)
    r.GET("/api/time", doTime)
    r.Run(":9001")
}

- 阅读剩余部分 -

go的字符串不能简单截取

s := "hello, 世界猫"
fmt.Println(s)
fmt.Println(len(s)) // 13
fmt.Println([]byte(s)) // [72 101 108 108 111 44 32 228 184 150 231 149 140]
fmt.Println(utf8.RuneCountInString(s))
r := []rune(s)
fmt.Println(r)
fmt.Println(len(r))
s = string(r[0:8])
fmt.Println(s)
fmt.Println(len(s))
fmt.Println([]byte(s))
fmt.Println(utf8.RuneCountInString(s))

go的时间time

够浪的时间

var now time.Time
now = time.Now() //获取当前时间
fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix()) //10位
fmt.Printf("时间戳(纳秒):%v;\n", time.Now().UnixNano()) //19位
fmt.Printf("时间戳(毫秒):%v;\n", time.Now().UnixNano()/1e6) //或者秒*1000也可
fmt.Printf("时间戳(纳秒-->秒):%v;\n", time.Now().UnixNano()/1e9)
t2 := now.Add(time.Minute * -1)
//ts := t2.Sub(now).Nanoseconds() / 1000000.0
ts := t2.Sub(now).Seconds()
ts2 := float64(time.Now().Sub(now).Nanoseconds()) / 1000000
fmt.Println(ts2)
s1 := strconv.FormatFloat(ts2, 'f', 6, 64)
fmt.Println(s1)

参考:
https://www.cnblogs.com/feicheninfo/articles/12349660.html