据我所知fmt,此任务没有这样的动词(因为在包中调用了格式说明符)。但是,您可以做的是指定某个动词并忽略其值。不过,这对内存不是特别友好。理想情况下,这将起作用:
fmt.Scan(&a, _, &b)
可悲的是,它没有。因此,您的下一个最佳选择是声明变量并忽略您不想要的变量:
var a,b,c int
fmt.Scanf("%d %v %d", &a, &b, &c)
fmt.Println(a,c)
%v会读取一个空格分隔的标记。根据您扫描的内容,您可以将流快进到您需要扫描的位置。有关 在缓冲区中查找的详细信息,请参阅此答案。如果您正在使用 stdio 或者您不知道您的输入可能有哪个长度,那么您在这里似乎不走运。
这并不表示 %* 没有实现,所以......我做错了吗?或者它只是被悄悄地省略了?...但是,它为什么要编译?
它可以编译,因为对于编译器来说,格式字符串与其他任何字符串一样只是一个字符串。该字符串的内容在运行时由fmt包的函数进行评估。一些 C 编译器可能会检查格式字符串的正确性,但这是一个特性,而不是规范。使用 go,go vet命令将尝试警告您有关参数不匹配的格式字符串错误。
编辑:
对于需要解析一行整数并只关心其中一些的特殊情况,您可以fmt.Scan与整数切片结合使用。以下示例从 stdin 读取 3 个整数并将它们存储在名为 的切片中vals:
ints := make([]interface{}, 3)
vals := make([]int, len(ints))
for i, _ := range ints {
ints[i] = interface{}(&vals[i])
}
fmt.Scan(ints...)
fmt.Println(vals)
这可能比传统的 split/trim/strconv 链短。它制作了一个指针切片,每个指针都指向 中的一个值vals。fmt.Scan然后填充这些指针。有了这个,您甚至可以通过为您不想要的值一遍又一遍地分配相同的指针来忽略大多数值:
ignored := 0
for i, _ := range ints {
if(i == 0 || i == 2) {
ints[i] = interface{}(&vals[i])
} else {
ints[i] = interface{}(&ignored)
}
}
上面的例子将分配给ignore除第一个和第二个之外的所有值的地址,从而通过覆盖有效地忽略它们。我正在尝试使用 Gorilla 工具包的mux包在 Go Web 服务器中路由 URL。使用这个问题作为指导,我有以下 Go 代码:
func main() {
r := mux.NewRouter()
r.Handle("/", http.FileServer(http.Dir("./static/")))
r.HandleFunc("/search/{searchTerm}", Search)
r.HandleFunc("/load/{dataId}", Load)
http.Handle("/", r)
http.ListenAndServe(":8100", nil)
}
目录结构为:
...
main.go
static\
| index.html
| js\
| <js files>
| css\
| <css files>
Javascript 和 CSS 文件的引用index.html如下:
...
<link rel="stylesheet" href="css/redmond/jquery-ui.min.css"/>
<script src="js/jquery.min.js"></script>
...
当我http://localhost:8100在 Web 浏览器中访问时,index.html内容已成功传送,但是,所有js和cssURL 都返回 404。
如何让程序从static子目录中提供文件?
网络应用程序
小怪兽爱吃肉
相关分类