小编icz*_*cza的帖子

单值上下文中的多值strconv.ParseInt()

我有以下代码:

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,这让我很困惑.

parsing type-conversion go

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

使用自定义类型实现接口而不导入包

假设有一个第三方软件包使接口可用:

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?

types interface go

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

Go,将数据传递到通道

我有一个问题。这是示例: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)

谢谢你!

concurrency channel go goroutine

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

在Go中包装多个实现

我有一个应用程序,该应用程序具有相同API的多个并发实现(例如,一个由SQL数据库支持,另一个由XML文件中存储的数据集支持)。我真正想做的是为API中的每种事物定义一个父类型

  1. 持有所有实现共有的成员变量,并且

  2. 定义所有实现必须具有的方法。

因此,在(无效)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)

struct interface dry embedding go

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

在golang中打印切片的地址

我在golang上很新.在这里,我有一个问题困惑了我一段时间.我知道我们应该使用"&"来获取地址,但如果我们在没有"&"的切片上使用printf会怎么样?

package main

import "fmt"

var slice = []int{1, 2, 3, 4}

func main() {

   fmt.Printf("address of slice %p \n", slice)

   fmt.Printf("address of slice %p \n", &slice)

}
Run Code Online (Sandbox Code Playgroud)

结果在我的MacBook上是这样的:

片的地址0x11354d0

片的地址0x1128be0

先感谢您!

arrays pointers go slice

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

GoLang-内存分配-[]字节与字符串

在下面的代码中:

c := "fool"
d := []byte("fool")
fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c)) // 16 bytes
fmt.Printf("d: %T, %d\n", d, unsafe.Sizeof(d)) // 24 bytes
Run Code Online (Sandbox Code Playgroud)

要确定从CloudFoundry接收JSON数据所需的数据类型,请测试上面的示例代码以了解[]bytevs string类型的内存分配。


string类型变量的预期大小c为1个字节x 4个ascii编码字母= 4个字节,但是大小显示为16个字节。

对于byte类型变量d,GO将字符串作为字符串文字嵌入到可执行程序中。它将在运行时使用该runtime.stringtoslicebyte函数将字符串文字转换为字节片。就像是...[]byte{102, 111, 111, 108}

byte类型变量的预期大小d再次为1字节x 4 ascii值= 4字节,但是变量的大小d显示为24字节,因为它是基础数组容量。


为什么两个变量的大小都不是4个字节?

memory string size go

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

在 Mongo-go-driver 中创建一个独特的领域

我对 Go 和 Mongodb 都很陌生,正在用 Go 和 Mongo 编写我的第一个 rest-api。我正在使用mongo-go-driverModal在 Go 中有以下结构

type Modal struct {
    Group     []string           `bson:"group" json:"group"`
    Hostname  string             `bson:"hostname" json:"hostname"`
    Overrides map[string]string  `bson:"overrides" json:"overrides"`
    Excludes  []string           `bson:"excludes" json:"excludes"`
}
Run Code Online (Sandbox Code Playgroud)

我不想使用ObjectIdmongo-db 提供的默认字段作为我的主键,而是希望将该Hostname字段作为主键。

如果我将Hostname字段的类型设置为primitive.ObjectID,那么hostname它将是唯一的,但它的值将由 mongodb 随机生成的字符串而不是实际的主机名字符串值。

那么有没有办法做到这一点。

go mongodb bson mongo-go

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

为什么typeof(method)不返回reflect.Method实例?

假设我有Foo结构,其方法定义如下:

type Foo struct {
    Name string
}

func (f *Foo) Get(a int, b string) (string, error) {
    return f.Name, nil
}
Run Code Online (Sandbox Code Playgroud)

如果我写

obj := &Foo{}
t := reflect.TypeOf(obj.Get)
Run Code Online (Sandbox Code Playgroud)

t.Kind()返回reflect.Func,显然我无法访问Get我从“属于” Foo结构中提取类型信息的函子,即接收方是Foo类型,甚至没有出现在参数中。

我想这是故意的,我想念一些有关函数的基本知识,这些函数使语言作者丢弃了应用于方法引用的typeof操作的接收者信息。

我有两个问题:

  1. 我是正确的,没有办法在TypeOf上面的调用中获取代码片段中的接收者类型吗?
  2. 如果我想将有关方法的反射信息传递给打算分析功能和相关接收者的代码(实质上是方法),我有什么选择?

尝试自己回答第二个问题,并根据我在官方文档中看到的内容,看来我唯一的选择是传递TypeOf(receiver)和TypeOf(receiver.method)或TypeOf(receiver)以及接收方的方法名称。

reflection methods types go

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

如何用地图替换多个“ if-else-if”

我在多层if-else-if条件上遇到了一个问题,因此我想通过使用地图进行简短说明。

请在if-else-if中查看以下代码,以将其替换为地图。

function, args := APIstub.GetFunctionAndParameters()

if function == "queryProduce" {
    return s.queryProduce(APIstub, args)
} else if function == "initLedger" {
    return s.initLedger(APIstub)
} else if function == "createProduce" {
    return s.createProduce(APIstub, args)
} else if function == "queryAllProduces" {
    return s.queryAllProduces(APIstub)
} else if function == "changeProduceStatus" {
    return s.changeProduceStatus(APIstub, args)
}

return shim.Error("Invalid Smart Contract function name.")
}
Run Code Online (Sandbox Code Playgroud)

dictionary if-statement go

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

服务器启动后如何在http.Handle()中更改处理程序?

"github.com/googollee/go-socket.io"在Go中使用socketio 。由于某种原因,我必须创建一个新的* socketio.server并将其注册到"/static/"已经在旧的* socketio.server中注册的服务器。

这意味着http.Handle("/socket.io/", ioserver)在服务器启动后,我必须替换处理程序ioserver 。

下面是我的代码的一部分,当某些事情发生时,我将创建一个新的ioserver。我希望新的ioserver成为其中的处理程序http.Handle("/socket.io/", ioserver)

ioserver, _ = socketio.NewServer(nil)
http.Handle("/socket.io/", ioserver)
log.Fatal(http.ListenAndServe(":81", nil))
Run Code Online (Sandbox Code Playgroud)

http go socket.io

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