相关疑难解决方法(0)

Go 中新的波形符 ~ 的含义是什么?

Go 引入了新的令牌~。

~T 表示具有基础类型 T 的所有类型的集合

不过我看不懂,请高人帮忙解释一下。

下面是一个例子。

type Ordered interface {
      Integer | Float | ~string
}
Run Code Online (Sandbox Code Playgroud)

generics go

45
推荐指数
2
解决办法
1万
查看次数

如何按顺序遍历golang中的地图?

请看下面我的地图

var romanNumeralDict map[int]string = map[int]string{
  1000: "M",
  900 : "CM",
  500 : "D",
  400 : "CD",
  100 : "C",
  90  : "XC",
  50  : "L",
  40  : "XL",
  10  : "X",
  9   : "IX",
  5   : "V",
  4   : "IV",
  1   : "I",
}
Run Code Online (Sandbox Code Playgroud)

我希望按照键的大小顺序遍历此映射

  for k, v := range romanNumeralDict {
    fmt.Println("k:", k, "v:", v)
  }
Run Code Online (Sandbox Code Playgroud)

然而,这打印出来

k: 1000 v: M
k: 40 v: XL
k: 5 v: V
k: 4 v: IV
k: 900 v: CM
k: …
Run Code Online (Sandbox Code Playgroud)

go

29
推荐指数
2
解决办法
4万
查看次数

Golang切片附加vs分配性能

为了使切片附加操作更快,我们需要分配足够的容量.有两种方法可以追加切片,这是代码:

func BenchmarkSliceAppend(b *testing.B) {
    a := make([]int, 0, b.N)
    for i := 0; i < b.N; i++ {
        a = append(a, i)
    }
}

func BenchmarkSliceSet(b *testing.B) {
    a := make([]int, b.N)
    for i := 0; i < b.N; i++ {
        a[i] = i
    }
}
Run Code Online (Sandbox Code Playgroud)

结果是:

BenchmarkSliceAppend-4 200000000 7.87 ns/op 8 B/op 0 allocs/op

BenchmarkSliceSet-4 300000000 5.76 ns/op 8 B/op

a[i] = i比a = append(a, i)我快,我想知道为什么?

performance go slice

11
推荐指数
2
解决办法
1万
查看次数

如何获取地图的键

我有一个命名函数Keys()来获取地图的所有键,这里是代码:

func main() {
    m2 := map[int]interface{}{
        2:"string",
        3:"int",
    }
    fmt.Println(Keys(m2))
}
func Keys(m map[interface{}]interface{}) (keys []interface{}) {
    for k := range m {
        keys = append(keys, k)
    }
    return keys
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了

cannot use m2 (type map[int]interface {}) as type map[interface {}]interface {} in argument to Keys
Run Code Online (Sandbox Code Playgroud)

Go支持泛型,我该如何修复代码?

generics go go-reflect

3
推荐指数
2
解决办法
3801
查看次数

如何在未知类型的地图上编写函数?

我感兴趣地阅读了一个关于如何在 Go 中创建映射键切片(使用范围循环)的问题,但是如何编写一个函数来为任何类型的映射执行此操作?映射值类型是一个特别麻烦的问题,因为它甚至不会影响结果切片的类型。

\n

例如,我可以编写一个函数,将 map[int]T (其中 T 是任何类型)作为参数并返回 map\xe2\x80\x99s 键的 []int (整数切片)吗?如果\xe2\x80\x99s可能的话,是否可以使函数在map[T1]T2(其中T1和T2是任何类型)上运行并返回[]T1切片?也就是说,我该如何替换下面代码中的问号?我\xe2\x80\x99m猜测我需要一个接口,但我\xe2\x80\x99m对这些接口有点初学者。

\n
    func keys(m map[?]?) []? {\n       var s []?\n       k := range m {\n          s = append(s, k)\n       }\n       return s\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

types go

-2
推荐指数
1
解决办法
1329
查看次数

标签 统计

go ×5

generics ×2

go-reflect ×1

performance ×1

slice ×1

types ×1