我有以下代码:
var i2 uint64;
var err error;
i2, err = uint64(strconv.ParseInt(scanner.Text(), 64, 64));
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
multiple-value strconv.ParseInt() in single-value context
Run Code Online (Sandbox Code Playgroud)
根据我在互联网上找到的所有内容,这意味着我忽略了ParseInt返回的两个参数,但我使用的是错误的.我知道也许错误是非常愚蠢的,但我刚开始学习Go,这让我很困惑.
假设有一个第三方软件包使接口可用:
package giantpackage
type UselessInfo struct {
wontUse string
alsoWontUse string
}
type CoolInterface interface {
DoSomethingAwesome(ui UselessInfo) (string, error)
}
Run Code Online (Sandbox Code Playgroud)
这样做似乎很容易实现:
package main
import giantpackage
type Jedi struct {
name string
age int
}
func (j Jedi) DoSomethingAwesome(ui giantpackage.UselessInfo) (string, error)
return "Hello world.", nil
}
Run Code Online (Sandbox Code Playgroud)
假设:
1)我实际上并没有在DoSomethingAwesome函数中使用UselessInfo结构.
2)我必须导入的包是巨大的.
3)我必须导入的包不再维护,不能修改.
我的问题:
有没有办法在不导入Giantpackage的情况下实现CoolInterface?
我有一个问题。这是示例:https: //play.golang.org/p/QSWY2INQuSE
func Avg(c chan string, wg *sync.WaitGroup) {
defer wg.Done()
c <- "test"
}
func main() {
var wg sync.WaitGroup
c := make(chan string)
timer1 := time.NewTicker(5 * time.Second)
for {
select {
case <-timer1.C:
wg.Add(1)
go Avg(c, &wg)
wg.Wait()
}
}
fmt.Println(<-c)
}
Run Code Online (Sandbox Code Playgroud)
为什么数据达不到fmt.Println(<-c)
谢谢你!
我有一个应用程序,该应用程序具有相同API的多个并发实现(例如,一个由SQL数据库支持,另一个由XML文件中存储的数据集支持)。我真正想做的是为API中的每种事物定义一个父类型
持有所有实现共有的成员变量,并且
定义所有实现必须具有的方法。
因此,在(无效)Go中,我想做类似的事情:
type Person interface {
Name string
Title string
Position string
Boss() *Person
}
type Person_XML struct {
Person
}
func (p *Person_XML) Boss() (*Person, error) {
// Poke around an XML document and answer the question
return boss, nil
}
type Person_SQL {
Person
}
func (p *Person_SQL) Boss() (*Person, error) {
// Do a DB query and construct the record for the boss
return boss, nil
}
Run Code Online (Sandbox Code Playgroud)
但是,这当然是不合法的,因为只有结构具有成员变量,只有接口具有成员函数。我可以只使用如下接口:
type Person interface {
Name() string
Title() …Run Code Online (Sandbox Code Playgroud) 我很好奇当Go执行类型断言而另一个接口是其目标时,内部会发生什么.仅举例来说,请考虑Dave Cheney的博客中的这个例子:
type temporary interface {
Temporary() bool
}
// IsTemporary returns true if err is temporary.
func IsTemporary(err error) bool {
te, ok := err.(temporary)
return ok && te.Temporary()
}
Run Code Online (Sandbox Code Playgroud)
我希望在这里发生很多运行时开销,因为它必须检查类型err并找出它是否具有所有方法.是这样,还是有一些聪明的魔法在下面发生?
这是“按原样”添加嵌套 json 的可能方法吗?嵌套的 json 没有任何结构,可能会有所不同。我需要将嵌套的json数据直接放到根节点。
https://play.golang.org/p/MzBt7DLQEpD
type RootJson struct {
NestedJson []byte
AdditionalField string
}
func main() {
nestedJson := []byte("{\"number\": 1, \"string\": \"string\", \"float\": 6.56}")
rootJson := RootJson{nestedJson, "additionalField"}
payload, _ := json.Marshal(&rootJson)
fmt.Println(string(payload))
}
Run Code Online (Sandbox Code Playgroud) 我正在为模型上的Update操作编写REST端点.所述映射是简单地将请求的身体的转发作为[]byte到json.Unmarshal.但是,我现在正试图过滤掉uuid所述模型上的属性.因此,而不是解组到模型我现在做给一个map[string]interface{},然后运行delete(m, "uuid").
在这一点上我有地图的数据,但我怎么能养活它放入json到其映射,因为它通常会调用时Unmarshal或Decode?有没有比编组更好的选择[]byte,然后在模型上解组?
当我kill -SIGINT pid使用 Golang 服务时,我会正常关闭调用profile.Stop,但在调用它之前,我收到了以下消息:profile: caught interrupt, stopping profiles
我什至无法调用 profile.Stop 因为它触发得更快,但是 grpc 侦听和 couchbase 连接关闭正常工作。
无论如何我可以覆盖这个故障的配置文件停止吗?
我已经看到 golang 有函数func TrimPrefix(s, prefix string) string返回 s 没有提供的前导前缀字符串。
我的问题是我有一个以字符“\”开头的字符串(例如“\foo”)。当我尝试使用 TrimPrefix 时出现错误。
高朗代码:
var s = "\foo"
s = strings.TrimPrefix(s, "\")
fmt.Print(s)
Run Code Online (Sandbox Code Playgroud)
错误:
./prog.go:10:32: newline in string
./prog.go:10:32: syntax error: unexpected newline, expecting comma or )
Run Code Online (Sandbox Code Playgroud)
我已经看到这是由于 golang understang "\" 作为 scape 字符。你知道我是否可以使用任何 golang 选项来让 golang 明白我不想使用“\”作为转义字符?
我正在从多个字符串计算 sha256。我以特定方式将它们转换为字节切片并将它们全部附加在一起,然后使用内置库计算散列。但是,根据我是否在计算 sha256 之前打印出切片,我会得到不同的结果。在操场上测试时,我无法重现它。
可以在https://play.golang.org/p/z8XKx-p9huG上查看并运行经过测试的代码,在这两种情况下,它实际上给出了相同的结果。
func getHash(input1 string, input2hex string, input3hex string, input4 string) (string, error) {
input1bytes := []byte(input1)
firstHalfinput1Bytes := input1bytes[:8]
secondHalfinput1Bytes := input1bytes[8:16]
input4Bytes := []byte(input4)
input3Bytes, err := hex.DecodeString(input3hex)
if err != nil {
fmt.Println("err " + err.Error())
}
input2Bytes, err := hex.DecodeString(input2hex)
if err != nil {
fmt.Println("err " + err.Error())
}
fullHashInputBytes := append(firstHalfinput1Bytes, input2Bytes...)
// THIS IS THE OPTIONAL PRINT WHICH CHANGES OUTPUT LOCALLY:
fmt.Println("fullHashInputBytes", fullHashInputBytes)
fullHashInputBytes = append(fullHashInputBytes, secondHalfinput1Bytes...)
fullHashInputBytes …Run Code Online (Sandbox Code Playgroud)