我在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))
致谢。
答案 0 :(得分:4)
使用composite literal并在循环中获取其地址:
for i := range obj {
obj[i] = &mystruct{Power: i}
}
在Go Playground上尝试。