我有以下代码:
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) 我在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
先感谢您!
在下面的代码中:
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个字节?
我对 Go 和 Mongodb 都很陌生,正在用 Go 和 Mongo 编写我的第一个 rest-api。我正在使用mongo-go-driver并Modal在 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 随机生成的字符串而不是实际的主机名字符串值。
那么有没有办法做到这一点。
假设我有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操作的接收者信息。
我有两个问题:
TypeOf上面的调用中获取代码片段中的接收者类型吗?尝试自己回答第二个问题,并根据我在官方文档中看到的内容,看来我唯一的选择是传递TypeOf(receiver)和TypeOf(receiver.method)或TypeOf(receiver)以及接收方的方法名称。
我在多层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) 我"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)