golang提问,go是golang

发布时间:2022-11-26

本文目录一览:

1、golang排序问题求助
2、[常见问题之Golang—— no required module provides package XXXXX](#常见问题之Golang—— no required module provides package XXXXX)
3、[golang 100题中的问题但是只有答案,想知道为什么。](#golang 100题中的问题但是只有答案,想知道为什么。)

golang排序问题求助

如果是只有这几个的话 我们可以考虑自定义一个排序类型

func TestSort(t *testing.T) {
    data := []string{"三级", "一级", "二级"}
    rule := map[string]int{
        "一级": 1,
        "二级": 2,
        "三级": 3,
    }
    self := SelfSort{
        Rule: rule,
        Data: data,
    }
    sort.Sort(self)
    fmt.Println(self.Data)
}
type SelfSort struct {
    Rule map[string]int
    Data []string
}
func (p SelfSort) Len() int           { return len(p.Data) }
func (p SelfSort) Less(i, j int) bool { return p.Rule[p.Data[i]] < p.Rule[p.Data[j]] }
func (p SelfSort) Swap(i, j int)      { p.Data[i], p.Data[j] = p.Data[j], p.Data[i] }

如果很多,就真的要比较中文的话,就用这种

package main
import (
    "bytes"
    "fmt"
    "io/ioutil"
    "sort"
    "golang.org/x/text/encoding/simplifiedchinese"
    "golang.org/x/text/transform"
)
// ByPinyin is customized sort interface to sort string by Chinese PinYin
type ByPinyin []string
func (s ByPinyin) Len() int           { return len(s) }
func (s ByPinyin) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
func (s ByPinyin) Less(i, j int) bool {
    a, _ := UTF82GBK(s[i])
    b, _ := UTF82GBK(s[j])
    bLen := len(b)
    for idx, chr := range a {
        if idx > bLen-1 {
            return false
        }
        if chr != b[idx] {
            return chr < b[idx]
        }
    }
    return true
}
// UTF82GBK : transform UTF8 rune into GBK byte array
func UTF82GBK(src string) ([]byte, error) {
    GB18030 := simplifiedchinese.All[0]
    return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
}
// GBK2UTF8 : transform  GBK byte array into UTF8 string
func GBK2UTF8(src []byte) (string, error) {
    GB18030 := simplifiedchinese.All[0]
    bytes, err := ioutil.ReadAll(transform.NewReader(bytes.NewReader(src), GB18030.NewDecoder()))
    return string(bytes), err
}
func main() {
    b := []string{"哈", "呼", "嚯", "ha", ","}
    sort.Strings(b) // output: [, ha 呼 哈 嚯]
    fmt.Println("Default sort: ", b)
    sort.Sort(ByPinyin(b)) // output: [, ha 哈 呼 嚯]
    fmt.Println("By Pinyin sort: ", b)
}

copy from 网页链接

常见问题之Golang—— no required module provides package XXXXX

日常我们开发时,会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。 同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。 no required module provides package XXXXX 在使用包时没有找到具体的包:

  1. 检查当前包是否有效引入了或该组件包是否与实际包名称一致。
  2. 存在没有开启模块化的问题,golang1.16以后都是默认开启的,GO111MODULE=on
  3. 如果该错误后面还有其他的提示,就需要根据其他提示进行有针对性的处理了。

golang 100题中的问题但是只有答案,想知道为什么。

只把最终的函数放到defer栈中,因此

defer s.Add(1).Add(2)

等价于下面2句:

s.Add(1)
defer s.Add(2)

你可以试试:

defer s.Add(2).Add(1).Add(4)
s.Add(3)

看看执行的结果是不是 2134