我正在编写一个需要能够设置和使用上下文的实用程序。我希望它在 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>
)。还有其他想法吗?谢谢!
注意:以上示例使用 BASH 语法,但在大多数 shell 中都有等价物。
我想写一个函数,它接受任何类型函数的指针.我可以:
func myFunc(f interface{})
Run Code Online (Sandbox Code Playgroud)
...但这将允许非功能值.有什么办法可以将类型限制为任何函数吗?
我正在尝试编写一个带有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/sql
Postgres,或者什么?谢谢!
我有一个带有SQLite数据库的Android应用程序,我想知道如何创建和注册ContentObserver
将通知数据库更改的通知.我知道我可以使用a来做这个ContentProvider
,但是我只使用我的应用程序的数据库,所以没有必要把它变成一个ContentProvider
,我想知道是否有办法避免这种情况.
谢谢!
我想知道创建一个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) 我有以下类型定义:
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编译器如何解决这些问题感到好奇.我在语言规范中找不到相关信息.
go ×4
android ×1
environment ×1
linux ×1
performance ×1
postgresql ×1
shell ×1
sql ×1
sqlite ×1
string ×1
types ×1