简化,我有两个表,contacts和donotcall
CREATE TABLE contacts
(
id int PRIMARY KEY,
phone1 varchar(20) NULL,
phone2 varchar(20) NULL,
phone3 varchar(20) NULL,
phone4 varchar(20) NULL
);
CREATE TABLE donotcall
(
list_id int NOT NULL,
phone varchar(20) NOT NULL
);
CREATE NONCLUSTERED INDEX IX_donotcall_list_phone ON donotcall
(
list_id ASC,
phone ASC
);
Run Code Online (Sandbox Code Playgroud)
我想看看哪些联系人与DoNotCall手机的特定列表中的电话号码相匹配.为了更快地查找,我已经编入索引donotcall的list_id和phone.
当我进行以下JOIN时需要很长时间(例如9秒):
SELECT DISTINCT c.id
FROM contacts c
JOIN donotcall d
ON d.list_id = 1
AND d.phone IN (c.phone1, c.phone2, c.phone3, c.phone4)
Run Code Online (Sandbox Code Playgroud)

如果我在每个手机领域单独LEFT …
在存储过程中,我使用INSERT动态创建查询.这样做是为了强制默认值(如果它是NULL,则使用@name).
SET @sql = 'INSERT INTO table (username, password'
+ CASE @name IS NULL THEN '' ELSE ',name' END
+ ') VALUES (''root'',''gelehallon''' +
+ CASE @name IS NULL THEN '' ELSE ',''@name''' END
+ ')'
EXEC sp_executesql @sql
SET @id = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
@id将为0无论如何.
即使另一个线程同时运行相同的存储过程,如何以安全的方式检索IDENTITY?
我想将一个RLock/RUnlock添加到结构中,当它被编组到json中时.
下面的例子显示了我尝试做的事情.但是,它不起作用,因为每个都json.Marshal被调用,它将运行该Object.MarshalJSON方法,该方法本身调用json.Marshal,导致无限循环.
例:
package main
import (
"fmt"
"encoding/json"
"sync"
)
type Object struct {
Name string
Value int
sync.RWMutex
}
func (o *Object) MarshalJSON() ([]byte, error) {
o.RLock()
defer o.RUnlock()
fmt.Println("Marshalling object")
return json.Marshal(o)
}
func main() {
o := &Object{Name: "ANisus", Value: 42}
j, err := json.Marshal(o)
if err != nil {
panic(err)
}
fmt.Printf("%s\n", j)
}
Run Code Online (Sandbox Code Playgroud)
输出:
编组对象
编组对象
编组对象
...
显然,在调用json.Marshal之前,我可以删除MarshalJSON方法并在main函数内调用Lock().但是,我的问题是:
有没有办法在结构的MarshalJSON方法中调用json.Marshal(或者至少让json包处理编码)?
奖金问题
为什么我的程序没有冻结?第二次递归调用MarshalJSON时,不应该锁定结构吗?
使用text/template,我需要找出数组中的任何对象是否具有特定的属性值。
假设我有一个人员列表 (json):
[
{"name": "ANisus", "sex":"M"},
{"name": "Sofia", "sex":"F"},
{"name": "Anna", "sex":"F"}
]
Run Code Online (Sandbox Code Playgroud)
使用模板,我想要这样的输出:
Females:
Sofia
Anna
Run Code Online (Sandbox Code Playgroud)
但是标题 ,Females:仅应在实际上有人sex设置为 的情况下显示F。我如何在模板系统中执行此操作?我的第一次尝试是使用变量:
{{$hasFemale := 0}}
{{range .}}{{if eq .sex "F"}}{{$hasFemale := 1}}{{end}}{{end}}
{{if $hasFemale}}Female:{{end}}
Run Code Online (Sandbox Code Playgroud)
我没有得到这个工作,因为范围内的 $hasFemale 处于不同的范围内,并且与以 0 启动的范围不同。我似乎找不到一种方法来更改启动后的变量。
“工作”示例:http://play.golang.org/p/T-Ekx7n9YQ
我无法将此逻辑移至应用程序;它必须在模板内完成。
问题1
我正在为服务器构建/搜索RAM内存缓存层。它是一个简单的LRU缓存,需要处理并发请求(均获取一个Set)。
我发现https://github.com/pmylund/go-cache声称是线程安全的。
就获取存储的接口而言,这是正确的。但是,如果多个goroutines请求相同的数据,它们都将检索指向同一块内存的指针(存储在接口中)。如果有任何goroutine更改了数据,那么这将不再是非常安全的。
是否有任何可以解决此问题的缓存程序包?
问题1.1
如果对问题1的回答为否,那么建议的解决方案是什么?
我看到两个选择:
备选方案1
解决方案:使用值将值存储在包装结构中,sync.Mutex以便每个goroutine在读取/写入数据之前都需要锁定数据。
type cacheElement struct { value interface{}, lock sync.Mutex }
缺点:缓存不知道对数据所做的更改,甚至可能已将其从缓存中删除。一个goroutine可能还会锁定其他goroutine。
备选方案2
解决方案:制作数据的副本(假设数据本身不包含指针)
缺点:每次执行缓存Get时的内存分配都会进行更多的垃圾回收。
对不起,这个问题很复杂。但是您不必全部回答。如果您对问题1有一个好的答案,那对我来说就足够了!
简单版本
如何根据字符串的值创建某种类型的变量?
type ta struct { a int }
type tb struct { b float }
type tc struct { c string }
t := "tb"
v := MagicVarFunc(t) // Returns a new allocated var of type interface{}
v.(tb).b = 8.3
Run Code Online (Sandbox Code Playgroud)
真实的例子
在我的,令人惊讶的是,下面的工作示例中,我基于字符串动态创建变量.这是通过在映射中注册每个结构类型来完成的,其中字符串是键,而类型的nil指针是值.
每种类型都使用New()方法实现一个接口,该方法返回该特定类型的新变量.
下面的示例非常接近我想要做的事情,其中每个操作都有一组JSON编码数据,这些数据将填充相应的结构.我构建它的方式也是因为我希望能够创建我注册到地图的新独立动作.
我不确定现在是否滥用这门语言.
如果我完全不在意,愿任何人给我任何指示吗?有一个明显更容易的方法吗?
package main
import (
"fmt"
"encoding/json"
)
// All I require of an action is that it may be executed
type …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此处的删除示例从切片中删除多个项目:http://code.google.com/p/go-wiki/wiki/SliceTricks 以下是我的代码:
package main
import "fmt"
import "net"
func main() {
a := []string{"72.14.191.202", "69.164.200.202", "72.14.180.202", "2600:3c00::22", "2600:3c00::32", "2600:3c00::12"}
fmt.Println(a)
for index, element := range a {
if net.ParseIP(element).To4() == nil {
//a = append(a[:index], a[index+1:]...)
a = a[:index+copy(a[index:], a[index+1:])]
}
}
fmt.Println(a)
}
Run Code Online (Sandbox Code Playgroud)
虽然如果切片中只有一个IPv6地址,代码工作正常,但如果有多个IPv6地址则会失败.它失败并显示错误"panic:runtime error:slice bounds out of range".我该怎么做才能修复此代码,以便能够删除所有IPv6地址?
我正在导入很多格式的字段:
09:02 AM
10:02 AM
12:30 PM
04:10 PM
04:50 PM
05:30 PM
我想将字段转换为可以做算术的东西。例如,对事件发生的时间进行倒计时。因此,以微秒或什至秒来保存字段。我一直在努力争取时间。解析工作……没有乐趣。
fmt.Println(time.Parse("hh:mm", m.Feed.Entry[i].GsxA100Time.T))
Run Code Online (Sandbox Code Playgroud)
返回...
0001-01-01 00:00:00 +0000 UTC解析时间“ 07:50 PM”为“ hh:mm”:无法解析“ 07:50 PM”为“ hh:mm”
有什么建议么?
在试图理解Go时,我遇到了这段代码websocket.go(剪掉):
type frameHandler interface {
HandleFrame(frame frameReader) (r frameReader, err error)
WriteClose(status int) (err error)
}
// Conn represents a WebSocket connection.
type Conn struct {
config *Config
request *http.Request
.
.
frameHandler
PayloadType byte
defaultCloseStatus int
}
Run Code Online (Sandbox Code Playgroud)
在Conn类型中,frameHandler那里独自站立?没有名字的界面?稍后在代码中他们甚至会尝试检查可怜的接口是否为零:
Conn(a).frameHandler == nil
Run Code Online (Sandbox Code Playgroud)
我自己的猜测是frameHandler结构内部是一个匹配frameHandler接口的类型,并且在其上面将有名称frameHandler.它是否正确?呵呵,无论如何有趣的语言.
在数组上查找很简单:
$array = array(0 => 'Zero', 1 => 'One', 2 => 'Two');
$text = $array[2]; // $text = 'Two'
Run Code Online (Sandbox Code Playgroud)
但是如果我不想要中间的$ array变量,那么有没有内置的方法来查找数组文字?
例子
$text = array(0 => 'Zero', 1 => 'One', 2 => 'Two')[2]; // Syntax error
$text = array_value(2, array(0 => 'Zero', 1 => 'One', 2 => 'Two')); // Unknown command
Run Code Online (Sandbox Code Playgroud) 我在Win7机器上使用安装在C:上的Zend Server CE(v.5.1.0).我添加了一个项目到httpd.conf:
Alias /project "D:\Homepages\project"
<Directory "D:\Homepages\project">
Options Indexes FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
我的.htaccess在文件项目目录包含以下内容:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} ^/\w*\.(css|js) [NC]
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Run Code Online (Sandbox Code Playgroud)
现在到了问题; 如果我去
一切似乎都很好.我到达index.php文件并获取我的内容.但是,如果我转到任何其他会触发RewriteRule的页面,它似乎是添加目录路径.FireFox输出以下未找到消息:
在此服务器上找不到请求的URL /Homepages/project/index.php.
我试图在这里找到类似的问题/答案,但失败了.任何的想法?PS.我接受答案的时间可能会延迟,因为我会在差事上退出一段时间.
Redis 连接.....!恐慌:运行时错误:无效的内存地址或
零指针取消引用[信号0xb代码=0x1 addr=0x28 pc=0x40154b]
goroutine 1 [运行]:runtime.panic(0x52c6e0, 0x6b6348)
/usr/lib/go/src/pkg/运行时/panic.c:266 +0xb6
main.func·001(0xc21005102c, 0x0, 0x4bcd4c, 0x1)
/home/vinay10949/redischeck/redischeck.go:21 +0x10b
github.com/garyburd.(*Preigo/ ).get(0xc210051000, 0x0,
0xc2100378f0, 0x42dbdf, 0x7fbe9c177070) /usr/lib/go/src/pkg/github.com/garyburd/redigo/redis/pool.go:250
+0x3a redis.(*Pool).Get(0xc210051000, 0x1, 0x1) > /usr/lib/go/src/pkg/github.com/garyburd/redigo/redis/pool.go:150
+0x27 main.main() /家/vinay10949/redischeck/redischeck.go:29 +0x13e
package main
import (
"flag"
"fmt"
"github.com/garyburd/redigo/redis"
//"reflect"
)
var (
redisAddress = flag.String("10.12.2.121", "10.12.2.121:6379", "Address to the Redis server")
maxConnections = flag.Int("max-connections", 10, "Max connections to Redis")
)
func main() {
//Redis Connection
redisPool := redis.NewPool(func() (redis.Conn, error) {
con, err := redis.Dial("tcp", *redisAddress) …Run Code Online (Sandbox Code Playgroud) 我写了一个关于如何使用尽可能少的行和文件为 .NET Core 编写一个简单的静态文件服务器的问题。
它被标记为重复的ASP.NET Core - 服务静态文件。所以我的问题是:
是这个答案真的简单的.NET核心静态文件的Web服务器可能吗?我是否理解正确(我试图将各种来源的信息拼凑在一起)?
启动文件
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
namespace StaticFileServer {
public class Startup{
public void Configure(IApplicationBuilder app){
app.UseDefaultFiles();
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\dist"))
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
主文件
using System;
using Microsoft.AspNetCore.Hosting;
namespace StaticFileServer
{
class Program
{
static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
Run Code Online (Sandbox Code Playgroud)