Go 获取文件 md5 值


package main

import (
    "bufio"
    "crypto/md5"
    "fmt"
    "io"
    "os"

    "v.src.corp.qihoo.net/weblego/lib4go/convert"
)

func fileMdFir(filePath string) string {
    file, _ := os.Open(filePath)
    defer file.Close()
    h := md5.New()
    io.Copy(h, file)
    fileMd1 := convert.U2S(h.Sum(nil))
    return fileMd1
}

func fileMdSec(file string) string {
    f, _ := os.Open(file)
    defer f.Close()
    r := bufio.NewReader(f)
    h := md5.New()
    io.Copy(h, r)
    fileMd2 := convert.U2S(h.Sum(nil))
    return fileMd2
}

func main() {
    fileMd1 := fileMdFir("/tmp/conf/deploy.toml")
    fmt.Println(fileMd1)
    fileMd2 := fileMdSec("/tmp/conf/deploy.toml")
    fmt.Println(fileMd2)
}
阅读全文

Go 计算 md5


主要是使用 crypto/md5、encoding/hex 两个包

package process

import (
    "crypto/md5"
    "encoding/hex"
)

// MakeMD is make md5.
func MakeMD(initString string) string {
    m := md5.New()
    m.Write([]byte(initString))
    md := m.Sum(nil)
    mdString := hex.EncodeToString(md)
    return mdString
}
阅读全文

Go 中使用 base64


package main

import (
    "encoding/base64"
    "fmt"
    "log"
)

func main() {
    input := []byte("hello golang base64")

    // base64 encode
    encodeString := base64.StdEncoding.EncodeToString(input)
    fmt.Println(encodeString)

    // base decode
    decodeBytes, err := base64.StdEncoding.DecodeString(encodeString)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(decodeBytes))
}
阅读全文

Go make 和 new 的区别


new 和 make 都可以用来分配空间,初始化类型,但是它们确有不同。
new(T)返回的是 T 的指针
new(T)为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值。

package main

import "fmt"

func main() {
    p1 := new(int)
    fmt.Printf("p1 --> %#v \n ", p1)
    fmt.Printf("p1 point to --> %#v \n ", *p1)

    var p2 *int
    i := 0
    p2 = &i
    fmt.Printf("p2 --> %#v \n ", p2)
    fmt.Printf("p2 point to --> %#v \n ", *p2)
}


阅读全文

Go 字符串分割


将字符串 s 以空格为分隔符拆分成若干个字符串,若成功则返回分割后的字符串切片。

str := "Hello World Too"
for _, v := range strings.Fields(str) {
    fmt.Println(v)
}

将字符串 s 中的字符串以字符 sep 为分隔符拆分成若干个元素的字符串切片,并返回字符串切片。

for _, v := range strings.Split(str, " ") {
    fmt.Println(v)
}

将字符串 s 中的字符串以字符 sep 为分隔符拆分成若干个字符串切片并且保留原字符串中的分隔符号,并返回字符串切片。

for _, v := range strings.SplitAfter(str, ",") {
    fmt.Println(v)
}
阅读全文

Go 字符串替换


package main
 
import (
    "fmt"
    "strings"
)
 
func main() {
    str := "welcome to beijing"
    strF = strings.Replace(str, " ", ",", -1)
    fmt.Println(strF)
    strS = strings.Replace(str, " ", ",", 1)
    fmt.Println(strS)
}
阅读全文

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()
}
阅读全文