分类 狗浪 下的文章

狗浪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

让狗啃文件

一步一步来

package main

import (
    "fmt"
    _ "io/ioutil"
)

func main() {
    fmt.Println("start...")
    fmt.Println("end...")
}

遇到多管闲事的狗imported and not used,导入了包,但是没有用到,在go语言中,这是不允许的,球猫说加_果然好用

path := "D:\\temp\\cy_data\\"
rd, _ := ioutil.ReadDir(path)
for _, fi := range rd {
    fmt.Println(fi.Name())
}

文件夹和文件都出来了,得研究一下怎么挑选

path := "D:\\temp\\cy_data\\"
rd, _ := ioutil.ReadDir(path)
for _, fi := range rd {
    if !fi.IsDir() {
        continue;
    }
    fullDir:= filepath.Join(path,fi.Name())
    fmt.Println(fullDir)
    c :=0
    rf, _ := ioutil.ReadDir(fullDir)
    for _, fn := range rf {
        if fn.IsDir() {
            continue;
        }
        c++
    }
    fmt.Println(c)
}

用fi.IsDir()终于快进入正题了
读文件

file, err := os.Open(fn)
if err != nil {
    fmt.Println("文件打开失败 = ", err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
    str, err := reader.ReadString('\n')
    if err == io.EOF {
        break
    }
    str = strings.Replace(str, "\n", "", -1)
    str = strings.Replace(str, "\r", "", -1)
    s := strings.Split(str, ",")
    fmt.Println(len(s))
}
fmt.Println("文件读取结束...")

写文件

outfile := filepath.Join(path,"gps.txt")
file, err := os.OpenFile(outfile, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
  fmt.Printf("打开文件错误= %v \n", err)
  return
}
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString(ss+"\r\n")
writer.Flush()

一些狗笔记

1、可以导入的东西很多,没有用掉的一定要注释掉,变量也不允许存在没用到的
2、全局变量var ht map[string]string
3、字典初始化ht = make(map[string]string)
4、枚举文件夹rd, _ := ioutil.ReadDir(path)
5、类似foreach的for _, fi := range rd
6、文件的属性fi.IsDir()、fi.Name()
7、文件全名构造fullDir:= filepath.Join(path,fi.Name())
8、字典排序var SortString []string for k := range ht { SortString = append(SortString, k) } sort.Strings(SortString)
9、=赋值定义过的,:=定义并赋值,变量的数目和结果相同,不用的_
10、分割s := strings.Split(ht[k], ",")
11、字符串转数字dj, _ := strconv.ParseFloat(s[0], 64)
12、数字转字符串6位小数djStr := strconv.FormatFloat(dj, 'f', 6, 64)
13、输出fmt.Println可以用逗号分割不同类型
14、过程定义无返回值func f2(fn string)
15、替换str = strings.Replace(str, "\n", "", -1)
16、字典v,ok := ht[1] if ok { fmt.Println("再一次确认,已经存在key=",v) }
17、判断操作系统sysType := runtime.GOOS if sysType == "linux"
18、命令行输入 input := bufio.NewScanner(os.Stdin) if input.Scan() { line := input.Text() }

Go语言一般指go(又称 Golang够浪)

够浪的下载地址
https://golang.google.cn/
https://golang.google.cn/dl/
https://golang.google.cn/doc/install?download=go1.15.windows-amd64.msi

package main

import "fmt"

func main() {
   fmt.Println("Hello, 大球Cat!")
}

go run cat.go
go build cat.go

wget https://golang.google.cn/dl/go1.15.linux-arm64.tar.gz
tar -C /usr/local -xzf go1.15.linux-arm64.tar.gz
export PATH=$PATH:/usr/local/go/bin

可以交叉编译

set GOOS=linux
set GOARCH=arm64

参考文献:
https://www.runoob.com/go/go-environment.html