Go 字符串查找


判断字符串 string 中是否有字符 chars,如果有返回 true,否则返回 false。

str := "Hello World"
fmt.Println(strings.Contains(str, "l"))
fmt.Println(strings.Contains(str, "T"))

匹配多个字符,用法同上。

fmt.Println(strings.ContainsAny(str, "W"))
fmt.Println(strings.ContainsAny(str, "T"))

判断字符串 string 中字符 chars 的位置,如果有返回位置,否则返回0。

fmt.Println(strings.Count(str, "e"))
fmt.Println(strings.Count(str, "T"))

判断字符串 string 是否以字符 chars 开头,如果是返回 true,否则返回 false。

fmt.Println(strings.HasPrefix(str, "He"))
fmt.Println(strings.HasPrefix(str, "T"))

阅读全文

Go 中 string、int、int64、float64类型相互转换


主要使用包 strconv

import "strconv"

func main() {
    // string to int
    int, _ := strconv.Atoi(string)
    // string to int64
    int64, _ := strconv.ParseInt(string, 10, 64)
    // string to float64
    float64, _ := strconv.ParseFloat(value, 64)
    // int to string
    string := strconv.Itoa(int)
    // int64 to string
    string := strconv.FormatInt(int64, 10)
}
阅读全文

Go 读写 excel


读 excel

package main

import (
    "fmt"

    "github.com/tealeg/xlsx"
)

func main() {
    excelFileName := "test.xls"
    xlFile, _ := xlsx.OpenFile(excelFileName)
    for _, sheet := range xlFile.Sheets {
        for _, row := range sheet.Rows {
        for _, cell := range row.Cells {
            fmt.Println(cell.String())
        }
        }
    }
}

写 excel

package main

import (
    "encoding/csv"
    "os"
)

func main() {
    f, err := os.Create("test.xls")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    // 写入 utf-8 编码
    f.WriteString("\xEF\xBB\xBF")
    w := csv.NewWriter(f)
    w.Write([]string{"编号", "姓名", "年龄"})
    w.Write([]string{"1", "张三", "23"})
    w.Write([]string{"2", "李四", "24"})
    w.Write([]string{"3", "王五", "25"})
    w.Write([]string{"4", "赵六", "26"})
    w.Flush()
}
阅读全文

使用 Visual Studio Code 开发 Go


设置 Windows 环境变量:

GOPATH = E:\Soft\GoPath

GOROOT = C:\Program Files\Go

Path = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Python\;C:\Program Files\Python\Scripts;C:\Program Files\Go\bin;

阅读全文

安装 Go


Mac OS X 安装 go:

  • 下载 go 安装包并执行
  • 配置环境变量
  • 执行编译测试
export GOROOT=/usr/local/go
export GOPATH=$HOME/.gopath
export PATH=$PATH:$GOROOT/bin

GOROOT:
其中 GOROOT 是 go 的安装目录,也是 go 二进制执行文件的路径。

GOPATH:
go install/go get 和 go 的工具等会用到 GOPATH 环境变量。
GOPATH 是作为编译后二进制的存放目的地和 import 包时的搜索路径。其实也是你的工作目录, 你可以在 src 下创建你自己的 go 源文件, 然后开始工作。GOPATH 之下主要包含三个目录: bin、pkg、src。
bin 目录主要存放可执行文件; pkg 目录存放编译好的库文件; src 目录下主要存放 go 的源文件。不要把 GOPATH 设置成 go 的安装路径。





阅读全文

深入浅出 Kafka(四)Kafka 简介


Kafka 特性:

  • 具有近乎实时的消息处理能力 顺序读写磁盘
  • 支持批量读写磁盘 并且会对消息进行批量压缩
  • 支持消息分区 可以在线增加分区,为每个分区创建多个副本,只会有一个 Leader 负责读写,其他副本与 Leader 同步。
  • 支持水平扩展

阅读全文

深入浅出 Kafka(三)稀疏索引与稠密索引


聚集索引:在一张表中,如果一个索引有如下特性,数据的物理顺序与键值的逻辑顺序相同。

稠密索引和稀疏索引都属于聚集索引。

1.稠密索引
定义:它是由键值和指针(指向记录本身地址)组成的一系列存储块,该存储块的键值与文件的逻辑顺序一致。
特性:每个存储块的每一个键对应的指针都指向每个数据块每一条记录,当要查找指定键 K 时,采用二分查找即可找到键K对应的记录,复杂度为 log2n。

2.稀疏索引
定义:它是由键值和指针(指向记录本身地址)组成的一系列存储块,该存储块的键值与文件的逻辑顺序单调性一致。
特性:每个存储块的每一个键对应的指针都指向每个数据块的第一条记录,当要查找指定建 K 时,先采用二分查找找到 <=K 的键 S,如果 S=K,则命中记录,如果 S<k,则顺序查找 =K 的键,复杂度大于 log2n,小于 n。

比较:

  • 稀疏索引占用的索引存储空间比较小,但是查找时间较长;
  • 稠密索引查找时间较短,索引存储空间较大。
阅读全文