小编Ell*_*son的帖子

golang命令即使手动执行它也不起作用

我正在尝试awk在我的go程序中执行命令(awk命令从加利福尼亚邮政编码的制表符分隔文件中拉取指定城市的邮政编码,在本例中为旧金山):

cmd := exec.Command(
    "awk",
    "-F",
    "'\\t'",
    "'{if ($4 == \"SAN FRANCISCO\") print $0; }'",
    "zipcodes_ca.txt",
)
fmt.Println(cmd.Args)

var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr

err := cmd.Run()
if err != nil {
    fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    return
}
Run Code Online (Sandbox Code Playgroud)

这输出:

[awk -F '\t' '{if ($4 == "SAN FRANCISCO") print $0; }' zipcodes_ca.txt]
exit status 2: awk: syntax error at source line 1
 context is
         >>> ' <<<
awk: bailing out at …
Run Code Online (Sandbox Code Playgroud)

awk go

3
推荐指数
1
解决办法
896
查看次数

Elixir Ecto仅在create上添加计算值

在create/insert上添加计算值的最佳实践方法是什么?我应该为创建和更新创建唯一的变更集吗?

比方说,我有一个博客文章模型,我想创建一个标题slug值并存储它.这有点做作,但出于某种原因说我只想在创建而不是更新时设置它.我应该做以下事情吗?

defmodule MyBlog.Post do
  use MyBlog.Web, :model

  schema "posts" do
    field :title, :string
    field :title_slug, :string
    field :content, :text

    timestamps
  end

  @required_fields ~w(
    title 
    content
  )

  @optional_fields ~w()

  def create_changeset(model, params \\ :empty) do
    changeset(model, params)
    |> generate_title_slug
  end

  defp changeset(model, params \\ :empty) do
    model
    |> cast(params, @required_fields, @optional_fields)
  end

  defp generate_title_slug(changeset) do
    put_change(changeset, :title_slug, __some_slug_generation_code__)
  end

  def update_changeset(model, params \\ :empty) do
    changeset(model, params)
  end
end
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

3
推荐指数
1
解决办法
1292
查看次数

如何测试与Firebase交互的服务?

从Firebase获取数据的惯例似乎是创建一个在内部使用AngularFire的服务类.然后,在您的应用程序的组件中,您可以注入并使用该服务.这使您可以在单元测试组件时轻松模拟服务.

但是,我仍然不清楚如何测试实际的服务本身.

举个例子,假设我todo list在Firebase中有一个节点,我有一个简单的服务来抓取所有的节点todos,如下所示:

import { Injectable } from '@angular/core';
import { AngularFire } from 'angularfire2';

@Injectable()
export class TodoService {
  constructor(private af: AngularFire) { }

  getAll(): FirebaseListObservable<any[]> {
    return this.af.database.list('todos');
  }
}
Run Code Online (Sandbox Code Playgroud)

您将如何测试此服务是否符合您的期望?

firebase firebase-realtime-database angularfire2 angular

3
推荐指数
1
解决办法
1965
查看次数

验证Elixir Ecto中的状态,但仅限于插入或更新

要验证参数的存在,可以向required_fields模型中的模块属性添加字段.然后将其传递给模型的cast方法,该方法验证该字段是否存在.

但是,如果您只想在插入或更新时验证某些内容的存在,该怎么办?

例如,如果记录没有保留,我只想验证用户的密码是否存在.换句话说,我不希望用户在编辑其帐户信息时必须提供密码.

我提出的最好的方法是为更新和插入提供两组不同的必填字段,然后让方法选择适当的方法:

# in changeset method
cast(params, required_fields(model), @optional_fields)

defp required_fields(model) do
  if Map.has_key?(model, :id) do
    @update_required_fields
  else
    @insert_required_fields
  end
end
Run Code Online (Sandbox Code Playgroud)

这是合理的,还是有更好的方法?

编辑

添加来自@michalmuskala的建议,并添加有关共享变更集功能的后续问题:

def insert_changeset(model, params \\ :empty) do
  model
  |> cast(params, @insert_required_fields, @insert_optional_fields)
  |> shared_changeset
end

def update_changeset(model, params \\ :empty) do
  model
  |> cast(params, @update_required_fields, @update_optional_fields)
  |> shared_changeset
end

defp shared_changeset(changeset) do
  changeset
  |> validate_password
  |> unique_constraint(:email)
end
Run Code Online (Sandbox Code Playgroud)

elixir ecto

2
推荐指数
1
解决办法
856
查看次数

对Base.decode16的输出感到困惑

如果我用它Base.decode16!来解码666F6F它等于"foo".

Base.decode16!("666F6F")
# "foo"
Run Code Online (Sandbox Code Playgroud)

...但如果我解码这个:

Base.decode16!("666F6F01")
# <<102, 111, 111, 1>>
Run Code Online (Sandbox Code Playgroud)

为什么当我添加01到字符串进行解码时输出变为二进制?为什么输出"foo1"不是?

elixir

1
推荐指数
1
解决办法
43
查看次数

有没有更简单的方法来获得 Swift 中两个值中较小的一个

我想将两个值中的较小者分配给一个变量。 在 Ruby 中,我会执行以下操作:

my_var = [value_one, value_two].min
Run Code Online (Sandbox Code Playgroud)

当然,在 Swift中,我可以这样做:

var myVar = 0.0
if valueOne < valueTwo {
    myVar = valueOne
} else {
    myVar = valueTwo
}
Run Code Online (Sandbox Code Playgroud)

但是,我想知道是否有更清洁、更简洁的解决方案。

swift

0
推荐指数
1
解决办法
261
查看次数