在Golang中初始化Struct类型的Slice

时间:2019-10-01 13:42:24

标签: pointers go struct slice

我在Golang中具有以下结构

function createSS() {    
  // gets first folder with the given foldername
  var destFolder=DriveApp.getFoldersByName('GAS Logs').next(); 

  // create spreadsheet
  var ss = SpreadsheetApp.create('TEST123');

  // get fist sheet and rename it
  var sheet = ss.getSheets()[0];
  sheet.setName('SHEET123');

  // Add cell data
  sheet.appendRow(['Do','Something', 'Here']);
  sheet.appendRow(['Thanks','For','The', 'Help!']);

  // Make a copy to destination folder and remove the original file
  var copySS = DriveApp.getFileById(ss.getId());
  destFolder.addFile(copySS);
  DriveApp.getRootFolder().removeFile(copySS);
}

我的目的是编写一个函数,该函数将* mystuct类型的片作为输入,并返回一个int类型的片,其中包含从输入片中获取的“ Power”属性。

我的代码如下:

type mystruct struct {
        Name  string
        Power int
    }

我的问题是package main import ( "fmt" ) func main() { obj := make([]*mystruct, 15) for i, s := range obj { s.Power = i } fmt.Println(extractpowers(obj)) } func extractpowers(obj []*mystruct) []int { powers := make([]int, len(obj)) for i, s := range obj { powers[i] = s.Power } return powers } 创建了一个由15个* mystruc指针组成的切片,它们初始化为nil;这会导致for循环中的代码引发“无效内存或nil指针取消引用”类型的紧急情况。

我的问题是初始化切片的正确且最快的方法是什么? (相当于.net中的var lst = new List(of mystruct))

致谢。

1 个答案:

答案 0 :(得分:4)

使用composite literal并在循环中获取其地址:

for i := range obj {
    obj[i] = &mystruct{Power: i}
}

Go Playground上尝试。