小编jos*_*hlf的帖子

在调用 shell 时设置环境变量的最佳方法

我正在编写一个需要能够设置和使用上下文的实用程序。我希望它在 shell 中使用环境变量,以便它可以记住当前在调用之间所处的上下文。理想情况下,我想从实用程序本身设置这个环境变量。就像是:

mytool set-context <context>
mytool do-stuff # Aware of <context>
Run Code Online (Sandbox Code Playgroud)

我希望它的行为如下:

export MYTOOL_CONTEXT=<context>
mytool do-stuff # Aware of <context>
Run Code Online (Sandbox Code Playgroud)

现在,程序实际上不可能在调用 shell 的环境中设置环境变量(在 SO here 中有介绍)。但是,这就是我想要的行为,我正在寻找近似值或解决方法。

我想到的一些想法:

  • 输出正确的字符串,并期望用户设置变量(假设变量不是简单地设置为<context>,而是设置为从它派生的某个字符串)。那看起来像export MYTOOL_CONTEXT=$(mytool get-context-var <context>).
  • 输出设置它的完整命令。这看起来像$(mytool set-context <context>),命令的输出实际执行的地方(输出类似于export MYTOOL_CONTEXT=<context>)。
  • 保存到一个临时文件,其名称基于 shell 的 PID。这在大多数情况下都可以工作,但删除文件不会自动发生,因此它可能会一直存在直到重新启动(即,可能在许多机器上永远存在)。

还有其他想法吗?谢谢!

注意:以上示例使用 BASH 语法,但在大多数 shell 中都有等价物。

linux shell environment environment-variables

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

Go中函数变量的类型

我想写一个函数,它接受任何类型函数的指针.我可以:

func myFunc(f interface{})
Run Code Online (Sandbox Code Playgroud)

...但这将允许非功能值.有什么办法可以将类型限制为任何函数吗?

types function-pointers go higher-order-functions

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

Go中的Postgres列表参数(使用database/sql和pq)

我正在尝试编写一个带有list参数的查询(即一个参数,它是一个值列表).看来这在Postgres中至少有时是可能的(/sf/answers/758083231/).我想要的是这样的:

rows, err := db.Query("SELECT * FROM table WHERE id in $1", []int{1, 2, 3})
Run Code Online (Sandbox Code Playgroud)

但是,当我使用pq驱动程序执行此操作时,出现错误:

sql: converting Exec argument #0's type: unsupported type []int, a slice
Run Code Online (Sandbox Code Playgroud)

这根本就不支持了pq,或者根本没有支持,或者根本不支持database/sqlPostgres,或者什么?谢谢!

sql postgresql prepared-statement go query-parameters

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

ContentObserver for SQLite数据库Android

我有一个带有SQLite数据库的Android应用程序,我想知道如何创建和注册ContentObserver将通知数据库更改的通知.我知道我可以使用a来做这个ContentProvider,但是我只使用我的应用程序的数据库,所以没有必要把它变成一个ContentProvider,我想知道是否有办法避免这种情况.

谢谢!

sqlite android observer-pattern contentobserver

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

在Go中创建相同字符串的最快方法

我想知道创建一个n相同字符的实例串的最快方法是什么.我可以想象一些方法,一些天真,一些不那么:

字符串连接(非常天真)

func nchars(b byte, n int) string {
    s := ""
    c := string([]byte{b})
    for i := 0; i < n; i++ {
        s += c
    }
    return s
}
Run Code Online (Sandbox Code Playgroud)

字节切片

func nchars(b byte, n int) string {
    s := make([]byte, n)
    for i := 0; i < n; i++ {
        s[i] = b
    }
    return string(s)
}
Run Code Online (Sandbox Code Playgroud)

string performance go

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

Go中的模糊转换语法

我有以下类型定义:

type reader io.Reader
Run Code Online (Sandbox Code Playgroud)

我希望这种reader类型实现io.Reader接口,所以我这样做:

func (r reader) Read(p []byte) (n int, err error) {
    return io.Reader(r).Read(p)
}
Run Code Online (Sandbox Code Playgroud)

问题是:io.Reader(r)可能意味着两件事之一:

  • 转换r为其基础类型(io.Reader)
  • 静态断言(由编译器检查)r满足io.Reader接口(因为我们定义了一个Read([]byte) (int, error)方法,它确实如此).创建一个新的io.Reader接口值并r在其中存储.

我希望前者发生.如果后者发生,当我调用时io.Reader(r).Read(p),它将调用r底层Read方法(我们现在在里面),它将无限循环.我会发生是提取底层io.Reader r,并使用它的 Read方法.

当然,我可以测试一下,在实践中看到这两个中的哪一个发生了,但我总体上对Go编译器如何解决这些问题感到好奇.我在语言规范中找不到相关信息.

type-conversion go

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