在C语言中,您可以使用write()
库中的函数unistd.h
。
write()
比printf()
更快,并且可以让您在Segfault破坏代码之前写入标准输出(或文件)。
调试时,我希望在Go代码出现恐慌之前写入标准输出。一般来说,我该怎么做?
我有以下代码(在字符串中找到最短的单词),这很恐慌,我想通过插入写入方法来隔离哪里。
func FindShort(s string) int {
i := 0
j := 0
min := math.MaxInt32
for true {
for s[i] == ' ' {
i++
j++
}
for s[j] != ' ' && j < len(s) {
j++
}
if j > i && (j - i) < min {
min = j - i
}
i = j
if j == len(s) {
break
}
}
return min
}
答案 0 :(得分:1)
您可以使用延迟函数来调用恢复函数,下面的函数将导致“在此处恢复恐慌”
<dependencies>
<dependency>
<groupId>org.liquibase.ext</groupId>
<artifactId>liquibase-hibernate5</artifactId>
<version>3.6</version>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
</exclusion>
</exclusions>
</dependency>
答案 1 :(得分:0)
您的代码检查所有行是否包含空格,但不检查行是否结束(行尾/文件尾/换行)。有一种更简便的方法来检查最短单词是什么:
package main
import (
"fmt"
"math"
"strings"
)
func main() {
min := math.MaxInt32
shortest := math.MaxInt32
s := strings.Split("this is a test", " ")
for key, value := range s {
if len(value) < min {
min = len(value)
shortest = key
}
}
fmt.Print(s[shortest])
}