leedstyh

第 1321 号会员 /

回复了 tangramgis 创建的主题: 如何将一个多返回值的函数做为另一个函数的参数?

如果你是在每次Println的时候都嫌check err麻烦,可以写一个帮助函数:

func Print(b []byte, err error) {
    if err != nil {
        fmt.Println("Marshal error:", err.Error())
    } else {
        fmt.Println(string(b))
    }
}

func main() {
    Print(json.Marshal(map[string]string{"key":"val"}))
}

回复了 jimmykuu 创建的主题: Go 1.5.3 发布

站长能不能提供一个latest的本地下载链接,提供正式版本的最新版下载

比如linux 64位的:

http://golangtc.com/static/go/latest/linux-amd64.tar.gz

这样的

回复了 jimmykuu 创建的主题: Go 排序代码悬赏

我也来个,不是程序猿,太复杂的做法不会。

package main

import (
    "log"
    "sort"
    "strconv"
    "strings"
)

//基本思路:
//将版本号,统一格式化成x.yy.zzz的形式,然后转化成xyyzzz的int

var mp = map[string]string{
    "alpha": ".01",
    "beta":  ".02",
    "rc":    ".03",
    // .040
}

func main() {
    slc := []string{"1.6beta1", "1.5rc1", "1.5beta2", "1.5beta1", "1.5.1", "1.5", "1.4rc2", "1.4rc1", "1.4beta1", "1.4.2", "1.4.1", "1.4", "1.3rc2", "1.3rc1", "1.3beta2", "1.3beta1", "1.3.3", "1.3.2", "1.3.1", "1.3", "1.2rc5", "1.2rc4", "1.2rc3", "1.2rc2", "1.2rc1", "1.2.2", "1.2.1", "1.2", "1.1.2", "1.1.1", "1.1", "1.0.3", "1.0.2", "1.5.2", "1.5alpha1"}
    log.Println(VersionSort(slc))
}

func VersionSort(versions []string) []string {
    index := []int{}
    mp := map[int]string{}
    for _, item := range versions {
        n := convert(sub(item))
        index = append(index, n)
        mp[n] = item
    }

    sort.Ints(index)

    ret := []string{}
    for _, n := range index {
        ret = append(ret, mp[n])
    }
    return ret
}

func sub(s string) string {
    for k, v := range mp {
        if strings.Contains(s, k) {
            s = strings.Replace(s, k, v, -1)
            break
        }
    }
    return s
}

// x.yy.zzz -> xyyzzz which is an int
func convert(s string) int {
    slc := strings.Split(s, ".")

    if len(slc[1]) == 1 { //兼容以后次级版本号到两位数
        slc[1] = "0" + slc[1]
    }

    if len(slc) == 3 && len(slc[2]) == 1 {
        slc[2] = slc[2] + "00"
    }

    if len(slc) == 2 {
        //无第三级版本号(如1.2),将之设置为.040
        slc = append(slc, "040")
    }

    s = strings.Replace(strings.Join(slc, "."), ".", "", -1)

    i, _ := strconv.Atoi(s)
    return i
}