小编Cer*_*món的帖子

如何在Go中进行分工

我想在Go中执行一个简单的划分.

fmt.Println(3/10)
Run Code Online (Sandbox Code Playgroud)

这打印0而不是0.3.这有点奇怪.有人可以分享一下这背后的原因是什么?我想在Go中执行不同的算术运算.

谢谢

math floating-point go integer-division

69
推荐指数
2
解决办法
5万
查看次数

将字符串指向字符串

是否可以从指向字符串的指针获取字符串值?

我正在使用goopt包来处理标志解析,而包只返回*string.但我想使用这些值来调用地图中的函数.

举个例子.

var strPointer = new(string)
*strPointer = "string"

functions := map[string]func() {
    "string": func(){
        fmt.Println("works")
    },
}  

//Do something to get the string value

functions[strPointerValue]()
Run Code Online (Sandbox Code Playgroud)

你可以看到这里展示的问题http://play.golang.org/p/1s0-d-GO-L

pointers go

37
推荐指数
2
解决办法
3万
查看次数

如何在Go中将JSON解组到接口{}?

我是Go的新手,现在我遇到了问题.我有一个名为Message的类型,它是这样的结构:

type Message struct {
    Cmd string `json:"cmd"`
    Data interface{} `json:"data"`
}
Run Code Online (Sandbox Code Playgroud)

我也有一个名为CreateMessage的类型,如下所示:

type CreateMessage struct {
    Conf map[string]int `json:"conf"`
    Info map[string]int `json:"info"`
}
Run Code Online (Sandbox Code Playgroud)

我有一个像JSON字符串{"cmd":"create","data":{"conf":{"a":1},"info":{"b":2}}}.

当我用json.Unmarshal它将其解码为Message变量时,答案是{Cmd:create Data:map[conf:map[a:1] info:map[b:2]]}.

那么我可以将JSON解码为Message结构并根据Cmd更改其Data的接口{}以键入CreateMessage吗?

我试图将Data直接转换为CreateMessage类型,但编译器告诉我Data是map [sting] interface {}类型.

json go

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

Golang将一个结构复制到另一个结构

我有两个struct有相同的成员,我想将一个结构复制到另一个,请参阅下面的伪代码:

type Common struct {
    Gender int
    From   string
    To     string
}

type Foo struct {
    Id    string
    Name  string
    Extra Common
}

type Bar struct {
    Id    string
    Name  string
    Extra Common
}
Run Code Online (Sandbox Code Playgroud)

然后,我有foo结构的Foo,而bar结构的Bar,有什么办法复制barfoo

go

21
推荐指数
4
解决办法
2万
查看次数

在Go切片中,为什么s [lo:hi]在元素hi-1处结束?

根据围棋的游,在围棋切片s,表达式s[lo:hi]的计算结果为从元件的切片lo通过hi-1,包括:

package main

import "fmt"

func main() {

    p := []int{0,  // slice position 0 
               10, // slice position 1
               20, // slice position 2
               30, // slice position 3
               40, // slice position 4
               50} // slice position 5

    fmt.Println(p[0:3]) // => [0 10 20]
}    
Run Code Online (Sandbox Code Playgroud)

在我上面的代码示例中,"p [0:3]"似乎直观地"读取"为:"从位置0到位置3的切片",等于[0,10,20,30].但当然,它实际上相当于[0 10 20].

所以我的问题是:评估上限值的设计原理是什么hi-1而不是简单hi?这感觉不直观,但必须有一些理由让我失踪,我很好奇这可能是什么.

提前致谢.

go slice

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

使用MUX包将查询参数传递给Go HTTP请求处理程序

我试图在我尝试发送到Go服务器的请求中传递一个额外的参数 -

websocket.create_connection("ws://<ip>:port/x/y?token="qwerty")
Run Code Online (Sandbox Code Playgroud)

Go服务器实现如下 -

func main() {
    err := config.Parse()
    if err != nil {
        glog.Error(err)
        os.Exit(1)
        return
    }

    flag.Parse()
    defer glog.Flush()

    router := mux.NewRouter()
    http.Handle("/", httpInterceptor(router))

    router.Handle("/v1/x", common.ErrorHandler(stats.GetS)).Methods("GET")
    router.Handle("/v1/x/y", common.ErrorHandler(stats.GetS)).Methods("GET")

    var listen = fmt.Sprintf("%s:%d", config.Config.Ip, config.Config.Port)
    err = http.ListenAndServe(listen, nil)

    if err != nil {
        glog.Error(err)
        os.Exit(1)
    }
}

func httpInterceptor(router http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
        startTime := time.Now()

        if !auth.Auth(w, req) {
            http.Error(w, "Failed authentication", 401)
            return
        }

        router.ServeHTTP(w, req)

        finishTime := time.Now() …
Run Code Online (Sandbox Code Playgroud)

authentication http go mux

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

Go示例不会运行

我正在尝试向一个包添加一个示例,并通过示例运行该示例go test,但该示例永远不会运行.

例如,请参阅此要点:https://gist.github.com/85469ecc65bb5bb85857

要点有example_test.go:

package cow_test

import (
    cow "gist.github.com/85469ecc65bb5bb85857"
)

func Example() {
    cow.Poke()
}
Run Code Online (Sandbox Code Playgroud)

然而,当我运行这个:

# go test -v example_test.go 
testing: warning: no tests to run
PASS
ok      command-line-arguments  0.002s
Run Code Online (Sandbox Code Playgroud)

但是stdlib的其他软件包工作得很好:

# cd /usr/lib/go/src/errors
# go test -v example_test.go 
=== RUN: Example
--- PASS: Example (0.00s)
PASS
ok      command-line-arguments  0.002s
Run Code Online (Sandbox Code Playgroud)

我的例子出了什么问题?

testing go

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

golang 在嵌套结构中解码 JSON 请求并作为 blob 插入到数据库中

我有一个嵌套结构,用于解码 JSON 请求。

type Service struct {
    ID       string `json:"id,omitempty" db:"id"`
    Name     string `json:"name" db:"name"`
    Contract struct {
        ServiceTime int    `json:"service_time"`
        Region      string `json:"region"`
    } `json:"contract" db:"contract"`
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 blob 类型在 MySQL 中存储合同。为了使其工作,我需要创建一个不同的结构,将 Contract 作为字符串插入到数据库中。这可以通过仅使用单个结构以更好的方式完成还是有其他优雅的方式?

mysql json go

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

如何用Go中的各种元素解析巨大的XML文件?

如何解析具有各种元素的巨大XML文件(即不重复多次相同的元素).

例:

<stuff>
    <header>...</header>
    <item>...</item>
    ...
    <item>...</item>
    <something>...</sometihng>
</stuff>
Run Code Online (Sandbox Code Playgroud)

我想在Go中编写一个脚本,允许我将该文件拆分为多个较小的文件,每个文件具有特定数量的标签.有关如何使用Go解析XML的所有示例似乎都依赖于了解文件中的元素.

可以在不知道的情况下解析文件吗?对于XML中的每个元素,无论有什么元素(标题,项目,某些东西等等)都有类似的东西

go

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

如何使用 Go 的 text/template 包返回数组中的唯一元素?

我是 Go 新手,我正在努力寻找一种从 Go 模板语言中的数组返回唯一变量的方法。这是为了配置一些软件,我无法访问源代码来更改实际程序,只能更改模板。

我在 Go 操场上举了一个例子:

https://play.golang.org/

package main

import "os"
import "text/template"

func main() {

      var arr [10]string
      arr[0]="mice"
      arr[1]="mice"
      arr[2]="mice"
      arr[3]="mice"
      arr[4]="mice"
      arr[5]="mice"
      arr[6]="mice"
      arr[7]="toad"
      arr[8]="toad"
      arr[9]="mice"

      tmpl, err := template.New("test").Parse("{{range $index, $thing := $}}The thing is: {{$thing}}\n{{end}}")
      if err != nil { panic(err) }
      err = tmpl.Execute(os.Stdout, arr)
      if err != nil { panic(err) }

}
Run Code Online (Sandbox Code Playgroud)

现在返回:

The thing is: mice
The thing is: mice
The thing is: mice
The thing is: mice
The thing …
Run Code Online (Sandbox Code Playgroud)

go

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