我正在构建一个Web API.我发现每当我使用Chrome进行POST,GET到我的API时,总会在真实请求之前发送OPTIONS请求,这非常烦人.目前我让服务器忽略任何OPTIONS请求.现在我的问题是发送OPTIONS请求以加倍服务器负载是什么好事?有没有办法完全阻止浏览器发送OPTIONS请求?
我在Go中看到很多代码来检测nil,如下所示:
if err != nil {
// handle the error
}
Run Code Online (Sandbox Code Playgroud)
但是,我有一个像这样的结构:
type Config struct {
host string
port float64
}
Run Code Online (Sandbox Code Playgroud)
和config是Config的一个实例,当我这样做时:
if config == nil {
}
Run Code Online (Sandbox Code Playgroud)
有编译错误,说:无法将nil转换为类型Config
我真的很困惑,我怎么能得到console.log不是第1091行的函数.如果我删除下面的闭包,第1091行不会抱怨这样的错误.Chrome版本43.0.2357.130(64位).

这是代码:
$scope.columnNameChanged = function (tableColumn) {
setDirtyColumn(tableColumn);
//propagate changes to the key fields
for (var i = 0; i < $scope.tableIndexes.length; ++i) {
for (var j = 0; j < $scope.tableIndexes[i].columnName.length; ++j) {
if ($scope.tableIndexes[i].columnName[j] === tableColumn.previousName) {
console.log('xxx', $scope.tableIndexes[i].columnName[j])
(function (i, j) {
$timeout(function () {
console.log($scope.tableIndexes[i].columnName[j])
$scope.tableIndexes[i].columnName[j] = tableColumn.name.toUpperCase();
console.log($scope.tableIndexes[i].columnName[j])
});
})(i, j);
}
}
}
};
Run Code Online (Sandbox Code Playgroud) 我想将字符串转换为int64.我从strconv包中找到的是Atoi功能.它似乎将一个字符串转换为int并返回它:
// Atoi is shorthand for ParseInt(s, 10, 0).
func Atoi(s string) (i int, err error) {
i64, err := ParseInt(s, 10, 0)
return int(i64), err
}
Run Code Online (Sandbox Code Playgroud)
ParseInt实际上返回一个int64:
func ParseInt(s string, base int, bitSize int) (i int64, err error){
//...
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我想从字符串中获取int64,我应该避免使用Atoi,而是使用ParseInt吗?或者某处是否隐藏了Atio64?
我对webrtc的STUN服务器的理解是,当客户端在NAT后面时(在大多数情况下,如果不是全部),STUN服务器将帮助webrtc客户端识别他们的地址和端口.我还读到一些文章说webrtc客户端需要一个信令服务器.信令服务器可以是web服务器,socket.io,甚至是通过电子邮件发送网址.我的第一个问题是:STUN服务器是信令服务器吗?
实际上现在我构建了一个非常简单的基于socket.io的服务,它将客户端的会话描述广播给所有其他客户端.所以我相信基于socket.io的服务器应该对客户端的地址和端口信息有足够的了解.如果是这种情况,为什么我们还要打扰另一台STUN服务器呢?
我对DNS如何工作的理解是这样的:首先让我们假设mydomain.com有IP地址12.34.56.78.现在,当我将url mydomain.com放入浏览器时,浏览器会向其本地dns服务器发送一个dns查询,询问,嘿,你知道mydomain.com的ip地址吗?如果本地DNS服务器不知道它,它将询问父dns服务器,如果父服务器也不知道,那么它一直询问直到root dns服务器.root dns服务器会询问负责.comtld的服务器.负责该.com意志的DNS服务器有关于mydomain.com因为mydomain.com是.com家庭的知识.然后答案将返回给初始提问者.答案也很可能会缓存在询问过程中涉及的dns服务器中.如果有错误,有人会纠正我的理解.
所以我真正的问题是关于反向DNS查找的工作原理.假设我想知道ip的域名是什么12.34.56.78.我运行命令dig -x 12.34.56.78.如果我的本地DNS服务器不知道答案,那么它还会询问哪个服务器?是吗12.in-addr.arpa.,还是34.12.in-addr.arpa.?如果是这种情况,这些名称是否就像12.in-addr.arpa.有效的域名一样?它们应该在何处部署,以便反向查找请求将知道询问谁?
math/floor.go从第13行开始阅读源代码,我读了一些这样的代码:
func Floor(x float64) float64
func floor(x float64) float64 {
if x == 0 || IsNaN(x) || IsInf(x, 0) {
return x
}
if x < 0 {
d, fract := Modf(-x)
if fract != 0.0 {
d = d + 1
}
return -d
}
d, _ := Modf(x)
return d
}
Run Code Online (Sandbox Code Playgroud)
似乎func Floor没有身体.我试图在go文件中复制并粘贴这些代码.它没有编译.错误消息是missing function body.所以我的问题是:Go的语法是一个合法的脱胎功能吗?谢谢.
在Golang中,没有恢复的恐慌会导致进程崩溃,因此我最终将以下代码片段放在每个函数的开头:
defer func() {
if err := recover(); err != nil {
fmt.Println(err)
}
}()
Run Code Online (Sandbox Code Playgroud)
只是为了防止我的程序崩溃.现在我想知道,它真的是要走的路吗?因为我认为在任何地方放置相同的代码看起来有点奇怪.
在我看来,Java方式,将异常冒泡到调用函数,直到main函数是控制异常/恐慌的更好方法.我理解这是由Go的设计,但是像Go那样立即崩溃过程有什么好处?
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
client := &http.Client{Transport: tr}
response, err := client.Get(link)
if err != nil {
fmt.Println(err)
}
defer response.Body.Close()
//block forever at the next line
content, _ = ioutil.ReadAll(response.Body)
Run Code Online (Sandbox Code Playgroud)
以上是我的代码,用于从循环中的网页中读取内容.我发现有时这条线ioutil.ReadAll(response.Body)会永远阻挡.这是随机发生的,然而,它几乎总是发生在这个网页上:http://xkcd.com/55.非常有趣的是,当我这样做时curl http://xkcd.com/55,它什么都不返回,然而,wget http://xkcd.com/55返回整个网页.
似乎unicode包中的IsDigit和IsNumber的行为不同,至少在我的下面的测试代码中:
package main
import "fmt"
import "unicode"
func main() {
r := rune('1')
fmt.Println(unicode.IsDigit(r))
fmt.Println(unicode.IsNumber(r))
//true
//true
}
Run Code Online (Sandbox Code Playgroud)
他们都打印true.
我试图从他们的源代码中理解.但是,我仍然不明白他们之间的差异,甚至来自他们的源代码.
// IsNumber reports whether the rune is a number (category N).
func IsNumber(r rune) bool {
if uint32(r) <= MaxLatin1 {
return properties[uint8(r)]&pN != 0
}
return isExcludingLatin(Number, r)
}
// IsDigit reports whether the rune is a decimal digit.
func IsDigit(r rune) bool {
if r <= MaxLatin1 {
return '0' <= r && r <= '9' …Run Code Online (Sandbox Code Playgroud)