我使用以下代码在Go中读取文件:
spoon , err := ioutil.ReadFile(os.Args[1])
if err!=nil {
panic ("File reading error")
}
Run Code Online (Sandbox Code Playgroud)
现在我检查我选择的每个字节是什么字符.例如:
spoon[i]==' ' //for checking space
Run Code Online (Sandbox Code Playgroud)
同样我读了整个文件(我知道可能还有其他方法可以阅读)但保持这种方式完好无损,我怎么知道我已达到文件的EOF而我应该再停止阅读?
请不要建议找到长度spoon并开始循环.我想要找到EOF的确定镜头方式.
在查看math.Ceil方法的源代码时,我发现了这种语法,其中有一个没有正文的导出函数签名,以及包含该实现的相同签名的非导出版本:
// Ceil returns the least integer value greater than or equal to x.
//
// Special cases are:
// Ceil(±0) = ±0
// Ceil(±Inf) = ±Inf
// Ceil(NaN) = NaN
func Ceil(x float64) float64
func ceil(x float64) float64 {
return -Floor(-x)
}
Run Code Online (Sandbox Code Playgroud)
我假设这是一些允许您轻松导出本地函数的语法.那是对的吗?为什么要这样做而不是只有一个导出的函数并在包中使用它?
如果我有这样的结构
type myStruct struct {
mystring string
myint int
}
Run Code Online (Sandbox Code Playgroud)
如果我有一个函数返回一个像这样的新myStruct
func New() myStruct {
s := myStruct{}
s.mystring = "string"
s.myint = 1
return s
}
Run Code Online (Sandbox Code Playgroud)
因为我在返回它之前首先将它存储在"s"变量中,我的函数实际上是在制作2个myStruct值而不是一个吗?
如果是这样,那么确保我不首先将其存储在变量中是一种更好的做法吗?
鉴于http.ResponseWriter已经完成了一些.Write()操作,可以直接获得当前累积的响应长度吗?
我很确定这可以通过Hijack转换完成,但我想知道它是否可以直接完成.
要处理Web应用程序中的每个请求,有关模板的常规代码如下所示:
t:= template.New("welcome")
t, _ = t.ParseFiles("welcome.tpl")
t.Execute(w, data)
Run Code Online (Sandbox Code Playgroud)
我想ParseFiles每次都要花很多钱.是否可以重用模板?所以我改进了这样:
//templateMap := make(map[string][template])
//...
tplName :="welcome"
t := templateMap[tplName]
if t=nil{
t:= template.New(tplName )
t, _ = t.ParseFiles("welcome.tpl")
templateMap[tplName] = t
}
t.Execute(w, data)
Run Code Online (Sandbox Code Playgroud)
我想通过将模板放入地图或缓存来提高效率是可行的还是可行的?我也想知道函数 Execute是否是线程安全的?
func (t *Template) Execute(wr io.Writer, data interface{}) (err error)
根据这篇Go Data Structures文章,在Strings部分下,它指出采用一个字符串片段会将原始字符串保留在内存中.
"(另外,在Java和其他语言中有一个众所周知的问题,当你切割一个字符串来保存一小块时,对原始文件的引用会将整个原始字符串保留在内存中,即使只有少量仍然存在Go也有这个问题.我们尝试和拒绝的替代方案是使字符串切片如此昂贵 - 分配和副本 - 大多数程序都避免使用它.)"
所以如果我们有一个很长的字符串:
s := "Some very long string..."
Run Code Online (Sandbox Code Playgroud)
我们采取一小部分:
newS := s[5:9]
Run Code Online (Sandbox Code Playgroud)
在s我们发布之前,原件不会发布newS.考虑到这一点,如果我们需要newS长期保留,但是s为垃圾收集发布,采取什么方法?
我想也许这个:
newS := string([]byte(s[5:9]))
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否真的有用,或者是否有更好的方法.
这个问题是关于jsFiddle本身的; 特别是区域如何调整大小.
jsFiddle使用4个可独立调整大小的区域,它们之间有边框,边框中有此图形:

这些调整大小句柄会导致iframe在需要时滚动; 它的光滑.我已经搜索了jQueryUI Resizable思想就是这样.不...
我真的只知道jQueryUI.这是一个不同的库,他们正在使用它来解决这个问题吗?你能识别和/或链接我用于调整大小的内容吗?
我试图弄清楚如何给16个不同的div提供存储在16个元素长数组中的id名称.
这样我就可以将div的"位置"随机化为记忆游戏,因为如果可能的话,将会有8种不同的div样式与div id一起变化.
我的计划是为div id设置与该特定div的样式相同的名称.
有没有办法将第一个div的id和样式设置为myarray [0]中的值,将第二个div的id和样式设置为myarray [1],依此类推?
编辑:
var card = ["orange","orange","pink","pink","red","red","purple","purple",
"blue","blue","green","green","brown","brown","yellow","yellow"];
for(var j, x, i = card.length; i; j = parseInt(Math.random() * i),
x = card[--i], card[i] = card[j], card[j] = x);
Run Code Online (Sandbox Code Playgroud)
然后在身体我试图实现代表这一点的东西:
<div id="card[0]"></div>
<div id="card[1]"></div>
<div id="card[2]"></div>
Run Code Online (Sandbox Code Playgroud)
等等...
var a [4]int和之间有什么区别b := make([]int, 4)?在b可扩展,但不是a吧?但是,如果我知道我真的需要4个元素,那么一个数组比一个切片更快吗?
有没有之间的性能差异var d []int和e := make([]int)?是否会f := make([]int, 5)提供比没有第一个即5个元素的长度更多的性能?
这c := make([]int, 5, 10)不会分配比我可以访问更多的内存吗?