我在Go中编写了以下函数.想法是函数有一个传递给它的字符串并返回找到的第一个IPv4 IP地址.如果未找到IP地址,则返回空字符串.
func parseIp(checkIpBody string) string {
reg, err := regexp.Compile("[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+")
if err == nil {
return ""
}
return reg.FindString(checkIpBody)
}
Run Code Online (Sandbox Code Playgroud)
我得到的编译时错误是
未知逃脱序列:.
我怎么能告诉Go这'.'
是我正在寻找的实际角色?我认为逃避它会做到这一点,但显然我错了.
我用Go编写了一个长期运行的服务器.Main触发了程序逻辑执行的几个goroutine.之后主要没有任何用处.一旦主要退出,程序将退出.我现在用来保持程序运行的方法只是对fmt.Scanln()的简单调用.我想知道别人如何保持主力退出.以下是一个基本的例子.这里可以使用哪些想法或最佳实践?
我考虑通过在所述频道上接收来创建一个频道并延迟主要的退出,但我认为如果我的所有goroutine在某些时候变得不活跃,那么这可能会有问题.
旁注:在我的服务器(不是示例)中,程序实际上并没有连接到shell,因此无论如何与控制台交互都没有意义.现在它可行,但我正在寻找"正确"的方式,假设有一个.
package main
import (
"fmt"
"time"
)
func main() {
go forever()
//Keep this goroutine from exiting
//so that the program doesn't end.
//This is the focus of my question.
fmt.Scanln()
}
func forever() {
for ; ; {
//An example goroutine that might run
//indefinitely. In actual implementation
//it might block on a chanel receive instead
//of time.Sleep for example.
fmt.Printf("%v+\n", time.Now())
time.Sleep(time.Second)
}
}
Run Code Online (Sandbox Code Playgroud) 下面是一些代码,演示了我无法将结构类型声明和初始化为null.该可空类型是一个结构,所以为什么我可以将它设置为空?
Nullable<bool> b = null;
if (b.HasValue)
{
Console.WriteLine("HasValue == true");
}
//Does not compile...
Foo f = null;
if (f.HasValue)
{
Console.WriteLine("HasValue == true");
}
Run Code Online (Sandbox Code Playgroud)
在哪里Foo
定义为
public struct Foo
{
private bool _hasValue;
private string _value;
public Foo(string value)
{
_hasValue = true;
_value = value;
}
public bool HasValue
{
get { return _hasValue; }
}
public string Value
{
get { return _value; }
}
}
Run Code Online (Sandbox Code Playgroud)
问题已得到解答(见下文).为了澄清我会发布一个例子.C#代码:
using System;
class Program
{
static …
Run Code Online (Sandbox Code Playgroud) 我将创建一个或多或少形式的结构:
type FileState struct {
LastModified int64
Hash string
Path string
}
Run Code Online (Sandbox Code Playgroud)
我想将这些值写入文件并在后续调用中读取它们.我最初的计划是使用密钥(Path)将它们读入地图并查找值(Hash和LastModified).在Go中有这样一种光滑的方式吗?
如果没有,您可以推荐哪种文件格式?我在以前的项目中读过并试验过一些键/值文件存储,但没有使用Go.现在,我的要求可能相当简单,因此大型数据库服务器系统会过度.我只想要一些我可以快速,轻松,便携地阅读和阅读的内容(Windows,Mac,Linux).因为我必须在多个平台上部署,所以我试图将我的非依赖性依赖性保持在最低限度.
我考虑过XML,CSV,JSON.我简单地看了Go中的gob包并注意到Go包仪表板上有一个BSON包,但我不确定是否适用.
我的主要目标是快速启动和运行,这意味着我需要编写的代码量最少,易于部署.
文件或目录的通用变量名称是"path".不幸的是,这也是Go中包的名称.此外,在DoIt中将路径更改为参数名称,如何编译此代码?
package main
import (
"path"
"os"
)
func main() {
DoIt("file.txt")
}
func DoIt(path string) {
path.Join(os.TempDir(), path)
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
$6g pathvar.go
pathvar.go:4: imported and not used: path
pathvar.go:13: path.Join undefined (type string has no field or method Join)
Run Code Online (Sandbox Code Playgroud) 我有一个对象启动一个线程,打开一个文件,并等待来自其他类的输入.当它接收输入时,它会将其写入磁盘.基本上,它是一个线程安全的数据记录类...
这是奇怪的部分.当我在设计器(Visual Studio 2008)中打开一个使用该对象的表单时,将创建该文件.它显然是在设计时vhost进程下运行的......
奇怪的是我无法在另一个项目中重现这个问题.我不确定在设计器中执行的代码和没有执行的代码的规则是什么.例如,在Windows窗体构造函数中创建文件实际上并不是在设计时创建文件...
解释是什么?有参考吗?
我希望网格顶部和底部有一行,其中包含标签或按钮.在中间我打算使用ListBox.我希望ListBox扩展以使用所有可用空间.不硬编码其他两行的高度会很好.我的XAML在下面.如何让中间部分自动展开?谢谢.
<UserControl x:Class="WpfApplication1.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Grid.Row="0"
Grid.ColumnSpan="3"
Content="Top Row" />
<ListBox Grid.Row="1"
Grid.ColumnSpan="3" />
<Label Grid.Row="2"
Grid.ColumnSpan="3"
Content="Bottom Row" />
</Grid>
Run Code Online (Sandbox Code Playgroud)
我希望得到一些关于实现看似简单目标的一般指导.我有一个数码单反相机(佳能EOS 50D),需要编写一个应用程序,告诉相机拍照.我还需要将图片传输到计算机,并可能将其从相机的存储中删除.奖励将是在我的应用程序中从相机获得实时预览.我的环境将是Windows(XP Pro或Vista Enterprise)和.Net 3.5(C#).
我做了一些研究,发现了几个选择.我知道一个会工作,但限制我将来只使用佳能相机.我找到并从佳能下载了一个SDK,它提供了很多这方面的功能.我查看了SDK,虽然它很广泛并且用C语言编写,但它确实有C#包装器,可以加快开发速度.
我发现的另一个选项叫做Windows便携设备.显然,它是一个API,可以与实现PTP和MTP标准的设备进行通信.它是基于COM的,据我所知,它没有.Net包装器.然而,这不是一个节目塞子.我可以P/Invoke我需要的功能或编写托管C++ DLL在我的应用程序中使用与摄像头通信.
我正在寻找有WPD经验的人给我指点.我仔细阅读了文档并看到了传输图像和删除图像的参考.但是,我没有看到提取照片,获取预览图像或说焦点/自动对焦的命令.
我使用Visual Studio安装项目为我的.Net应用程序创建MSI.如果我可以自动增加版本号,那就太好了.更好的方法是将安装程序版本设置为等于主输出exe的AssemblyVersion.
我们在三个应用程序中使用了一个对象模型.两个程序收集数据,另一个程序读取数据并生成报告.系统非常断开连接,因此我们不能让所有程序都与单个数据库通信.
现在,程序只使用公共库来填充对象模型并序列化/反序列化到磁盘.具体来说,我们正在使用XML序列化.
这个模型有几个问题.1)XML可能被认为是浪费.文件可能变得庞大而且难以处理.老实说,文件大小现在不是一个大问题.2)我最关心的是记忆足印.将整个文件加载到对象模型中,对其进行操作,然后保存.
希望我已经表达了我的担心,在某些时候,我们将在运行时遇到此应用程序的内存问题.足够的数据将被收集到一个"数据库"(xml文件)中,无法一次性加载到内存中.
我想要的是访问由文件存储而不是内存支持的对象模型.我希望对象模型的更改最小化.访问对象时,它来自磁盘,当它被设置时,它被保存(如果可能的话,自动保存).
我们已经使用SQLite,SQL Compact 4.0和EF 4以及LINQ to XML(简要地)研究了NHibernate.我过去也使用db4o将对象缓存到磁盘,但这是一个不相关的项目.
在我潜入并花时间学习其中一个之前,我想知道我的想法是否有意义.我是否可以拥有一个"神奇地"缓存到存储介质的对象模型,而不是无限地膨胀我的内存占用?即使它不是最优雅的,最简单的方法是什么?
还有其他技术可以帮助我吗?内存映射文件,linq-to-sql,Lazy(T)(仅用于在需要时从文件中获取对象).
我意识到这是一个开放式的问题.我正在寻找一个大图片响应和细节,如果有人有真实的世界经验这样做.链接会有所帮助......
谢谢.
c# ×4
go ×4
.net ×1
automation ×1
camera ×1
daemon ×1
design-time ×1
dictionary ×1
gob ×1
goroutine ×1
grid ×1
layout ×1
linq-to-xml ×1
map ×1
nhibernate ×1
nullable ×1
orm ×1
package ×1
regex ×1
struct ×1
syntax ×1
winforms ×1
wpd ×1
wpf ×1