支持动态变量名吗?

问题描述 投票:0回答:2

我想知道Go中是否可以动态创建变量?

我在下面提供了一个伪代码来说明我的意思。我将新创建的变量存储在切片中:

func method() {
  slice := make([]type)
  for(i=0;i<10;i++)
  {
    var variable+i=i;
    slice := append(slice, variablei)
  }
}

在循环结束时,切片应包含变量:variable1、variable2...variable9

go variables
2个回答
15
投票

Go 没有动态变量。 大多数语言中的动态变量都是以 Map (Hashtable) 的形式实现的。

因此,您可以在代码中使用以下地图之一来实现您想要的功能

var m1 map[string]int 
var m2 map[string]string 
var m3 map[string]interface{}

这是可以做你想做的事的 Go 代码

http://play.golang.org/p/d4aKTi1OB0

package main

import "fmt"


func method() []int {
  var  slice []int 
  for i := 0; i < 10; i++  {
    m1 := map[string]int{}
    key := fmt.Sprintf("variable%d", i)
    m1[key] = i
    slice = append(slice, m1[key])
  }
  return slice
}

func main() {
    fmt.Println(method())
}

3
投票

不;如果您在编译时不知道局部变量的名称,则无法引用它们。

如果您需要额外的间接寻址,您可以使用指针来实现。

func function() {
    slice := []*int{}
    for i := 0; i < 10; i++ {
        variable := i
        slice = append(slice, &variable)
    }
    // slice now contains ten pointers to integers
}

另请注意,for 循环中的括号应该被省略,并且将左大括号放在新行上是一个语法错误,因为在

++
之后会自动插入分号。
make
切片需要你传递一个长度,因此我不使用它,因为无论如何都使用了
append

© www.soinside.com 2019 - 2024. All rights reserved.