小编Jim*_*imB的帖子

golang map是按值还是按引用查找?

当我从Go中的地图中检索结构时,是否会获得该值的副本?或者我获得地图中的实际值?

例如,假设我有一个从字符串到结构的映射:

type quality struct {
    goodness    int
    crunchiness int 
}
cookies := make(map[string]quality)
cookies["nutrageous"] = quality{goodness: 3, crunchiness: 10}
Run Code Online (Sandbox Code Playgroud)

我想修改一个条目.

我可以指望返回的值与地图中的值相同吗?

c := cookies["nutrageous"]
c.goodness += 5
Run Code Online (Sandbox Code Playgroud)

或者我还必须返回并修改地图中的内容?

c := cookies["nutrageous"]
c.goodness += 5
cookies["nutrageous"] = c
Run Code Online (Sandbox Code Playgroud)

dictionary pass-by-reference pass-by-value go

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

未从.apk安装ARMv8库

我有一个包含本机二进制文件的应用程序。目前,我们只有ARMv5和x86二进制文件。使用这些,我们将二进制文件放入src/main/jniLibs/armeabi/libsyncthing.sosrc/main/jniLibs/x86/libsyncthing.so,在所有设备上都可以正常工作。

现在,我们要添加一个附加的ARMv8二进制文件,该文件位于中src/main/jniLibs/arm64-v8a/libsyncthing.so。根据此指南,这是正确的子文件夹。但是,当我在LG G4(支持ARMv8)上安装apk时,/lib/文件夹中未安装任何二进制文件,因此该应用程序无法正常工作。

我在这里做错了什么?

在这里,您可以看到二进制文件都包含在apk中:

apk内容

您可以在Github上的PR中看到完整的代码。二进制文件不包括在其中,但可以使用生成./gradlew buildNative

android android-ndk

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

为什么我的随机数不会更新?

我在Golang中做了以下(在Appengine上主持)

每当我通过运行dev_appserver命令启动应用程序并访问localhost:8080的页面时,我会得到一个页面,其中包含1到19之间的新随机数.但是在浏览器中刷新页面时,此数字不会更改.如果我通过运行dev_appserver来终止服务器并重新启动,我会得到一个新的随机数.如何获取页面刷新时更新的随机数.

代码如下:

包测试页

import (
    "fmt"
    "net/http"
    "math/rand"
    "time"
    "strconv"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, varHtml)
}
func random(min, max int) int {
    rand.Seed(time.Now().Unix())
    return rand.Intn(max - min) + min
}

var myrand = strconv.Itoa(random(1, 19))
var varHtml = `

Random number is ` + myrand 
Run Code Online (Sandbox Code Playgroud)

random google-app-engine go

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

打印结构的所有属性,即使该结构有一个默认的字符串表示?

通常,我可以打印对象的所有属性:

c.Infof("car: %+v", car)
Run Code Online (Sandbox Code Playgroud)

但是一个结构有一个String()方法.我认为这导致上面的行只打印String()方法返回的内容.

如何覆盖此并强制打印该结构的所有属性?

go

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

cgo结果已经指针

我正在编写一些导出类似函数的代码:

package main
import "C"

//export returnString
func returnString() string {
    //
    gostring := "hello world"
    return gostring
}
func main() {}
Run Code Online (Sandbox Code Playgroud)

我使用go build -buildmode = c-shared构建.so和头文件,但是当我在我的C代码中调用returnString()时,我得到"恐慌:运行时错误:cgo结果有Go指针"

在1.9中有没有办法解决这个问题?

c go cgo

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

如果运行时没有 throw("concurrent map writes") 而是 panic("concurrent map writes") 会发生什么

如何从并发映射写入中恢复?

正如 icza 所说:

如果你让你的应用程序保持这样并且它不会崩溃,你可能会在运行时遇到神秘的、未定义的行为。

如果在“并发映射写入”的情况下,一个 goroutine 无法写入映射,那么仅panic("concurrent map writes")代替throw("concurrent map writes").

go

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

将字符串解析为time.Time值

我有格式的字符串时间20171023T183552.我没有找到任何格式来解析这个字符串值.有没有办法将此字符串值转换为 Go time.Time?

编辑 - 这不是重复的问题.我知道如何解析,但我没有意识到我们可以使用时间格式包中列出的任何布局.这个答案清除了我的渴望.

time parsing go

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

字符串和整数串联问题golang

我正在尝试在Go中编写端口扫描程序,由于这是我的新手,因此我面临的问题很少。以下是我到目前为止编写的代码。

package main

import (
    "fmt"
    "log"
    "net"
    "os"
)

func main() {

    callme()

}

func callme() {

    var status string
    getip := os.Args[1]
    getport := 0
    for i := 0; i < 10; i++ {
        getport += i

        data := getip + ":" + getport
        conn, err := net.Dial("tcp", data)
        if err != nil {
            log.Println("Connection error:", err)
            status = "Unreachable"
        } else {

            status = getport + " - " + "Open"
            defer conn.Close()
        }

        fmt.Println(status)

    }
} …
Run Code Online (Sandbox Code Playgroud)

go

-4
推荐指数
1
解决办法
7577
查看次数