go生成文件夹与模板
起因
以前是用C/C++刷Leetcode时,将多个C/CPP文件放在同一个目录下,没有出任何问题,但是换成Go语言刷题。
在一个目录下创建多个go文件,每个文件都是以下
package main
func main(){
}
在vscode下会出问题,会报错,这让我很难受。
这样做,在Goland下没有问题,Goland YYDS.
发现以下目录结构,一个问题件下放置一个go文件,就不会报错。
[文件夹]go
→[文件]go.mod
[文件夹]1两数相加
→[文件]1两数相加.go
.....
[文件夹]2679矩阵中的和
→[文件]2679矩阵中的和.go
但是在VSCode下得先
- 创建一个文件夹,修改文件名;
- 创建go文件,修改文件名;
- 写入go内容
但是,我们是程序员,为什么不写个程序自动生成?
所以有了下面的内容。
正文
package main
import (
"fmt"
"os"
"regexp"
"strings"
)
var Temp = []string{`package main
import (
"fmt"
)`, `func main() {
fmt.Println("Hello world!")
}`,
}
// 生成题目文件夹
func buildDirAndFile(name string, des string) {
reg := regexp.MustCompile("\\s+|\\.")
name = reg.ReplaceAllString(name, "")
path, _ := os.Getwd()
//path = "vscode_golang"
targetPath := path + "\\" + name
// fmt.Println(targetPath)
err := os.Mkdir(targetPath, 0755)
if err != nil {
fmt.Println(targetPath, " 自动生成失败!")
}
fmt.Println(targetPath, " 自动生成成功!")
file, err := os.Create(targetPath + "\\" + name + ".go")
// Temp = append(Temp, "\n\n//"+des)
newContent := Temp[0]
for _, s := range strings.Split(des, "\n") {
newContent += "\n//" + reg.ReplaceAllString(s, "")
}
newContent += "\n\n" + Temp[1]
file.WriteString(newContent)
file.Close()
}
func main() {
var name string = "76. 最小覆盖子串"
var description string = `给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。
注意:
对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
如果 s 中存在这样的子串,我们保证它是唯一的答案。`
fmt.Println("Hello world!")
buildDirAndFile(name, description)
}
效果
package main
import (
"fmt"
)
//给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。
//注意:
//对于t中重复字符,我们寻找的子字符串中该字符数量必须不少于t中该字符数量。
//如果s中存在这样的子串,我们保证它是唯一的答案。
func main() {
fmt.Println("Hello world!")
}
标签:字符,name,fmt,文件夹,go,main,Leetcode,刷题
From: https://www.cnblogs.com/auspice/p/17580903.html