小编icz*_*cza的帖子

如何避免重新实现类似golang结构的sort.Interface

Golang有一个问题困扰我.说我有两个结构:

type Dog struct {
   Name string
   Breed string
   Age int
}

type Cat struct {
    Name string
    FavoriteFood string
    Age int
}
Run Code Online (Sandbox Code Playgroud)

当我尝试进行排序[]*Dog[]*Cat通过Age,我必须定义2个不同类型的结构,如:

type SortCat []*Cat
func (c SortCat) Len() int {//..}
func (c SortCat) Swap(i, j int) {//..}
func (c SortCat) Less(i, j int) bool {//..}

type SortDog []*Dog
func (c SortDog) Len() int {//..}
func (c SortDog) Swap(i, j int) {//..}
func (c SortDog) Less(i, j int) bool {//..}
Run Code Online (Sandbox Code Playgroud)

一个自然的想法是使用接口函数实现一些SortableByAge …

coding-style interface go slice

8
推荐指数
2
解决办法
4845
查看次数

更快的输入扫描

我试图解决可以在这里找到的SPOJ问题

以下是我的解决方案:

package main

import "fmt"
import "bufio"
import "os"

func main() {
    var n, k int
    var num int
    var divisible int

    in := bufio.NewReader(os.Stdin)

    fmt.Fscan(in, &n)
    fmt.Fscan(in, &k)

    for n > 0 {
        fmt.Fscan(in, &num)

        if num%k == 0 {
            divisible++
        }

        n--
    }

    fmt.Println(divisible)
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常.这里的问题是我在SPOJ中执行它时会出现超时.

我是第一次使用,fmt.Scan但后来我遇到了这个线程,建议我使用bufio更快的输入扫描.

但我仍然遇到超时问题.我只是循环以获取所有输入,并且在此循环内我确定输入是否可被整除.所以,我认为它不是循环,而是输入扫描需要时间.如何改进这一点以更快地读取输入?或者是其他地方的问题?

string go

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

Golang字母表示的数字

有一种简单的方法可以将数字转换为字母吗?

例如,
3=> "C"23=> "W"

string character type-conversion go

8
推荐指数
2
解决办法
7099
查看次数

在golang中获取会话值

我的rails应用程序使用会话存储用户凭据以进行授权.尝试在Go代码中登录并执行一些操作(需要用户会话).我应该在登录时检索用户会话并传递给下一个请求吗?我该怎么处理?

session http go ruby-on-rails-4

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

如何使用Golang Reflection获取作为切片的struct字段的类型?

我正在尝试使用反射来构建一个例程,该例程将列出传入的任意结构中的所有字段的名称,种类和类型.这是我到目前为止所得到的:

type StatusVal int
type Foo struct {
    Name string
    Age  int
}
type Bar struct {
    Status StatusVal
    FSlice []Foo
}

func ListFields(a interface{}) {
    v := reflect.ValueOf(a).Elem()
    for j := 0; j < v.NumField(); j++ {
        f := v.Field(j)
        n := v.Type().Field(j).Name
        t := f.Type().Name()
        fmt.Printf("Name: %s  Kind: %s  Type: %s\n", n, f.Kind(), t)
    }
}

func main() {
    var x Bar
    ListFields(&x)
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

Name: Status  Kind: int  Type: StatusVal
Name: FSlice  Kind: slice  Type: 
Run Code Online (Sandbox Code Playgroud)

当字段是切片时,类型为空.我尝试了几种方法来获取切片的数据类型,但所有尝试都导致了恐慌......通常是这样的:

reflect: …
Run Code Online (Sandbox Code Playgroud)

reflection struct types go slice

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

gopkg.in/mgo.v2中的并发(Mongo,Go)

我希望在Go中编写的webapp中使用MongoDB.

我可以拥有一个mgo.Session并在Web应用程序中同时使用它.例如inhttp.Handler

或者我应该打电话Session.CopySession.Close- >制作会话池.

这听起来很矛盾,我读到池已经在里面实现了mgo.Session,我可以同时使用会话,在其他地方,我读到我需要CopyClose.

go mongodb mgo

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

在Golang中将[]接口转换为[]字符串

我正在使用github.com/fatih/structs包将结构的所有字段的值转换[]interface{}toValues()函数.看到这里.这很好,但最终我想通过使用csv包将值写入csv文件.该csv.Write()功能需要[]string输入.

简而言之:如何轻松地将输出转换toValues()为字符串数组?

string struct interface go slice

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

golang:当涉及多个频道时,选择如何工作?

我在多个非缓冲通道上使用select时发现了

select {
case <- chana:
case <- chanb:
}
Run Code Online (Sandbox Code Playgroud)

即使两个通道都有数据,但在处理此选择时,如果chana和case chanb处于不平衡的调用.

package main

import (
    "fmt"
    _ "net/http/pprof"
    "sync"
    "time"
)

func main() {
    chana := make(chan int)
    chanb := make(chan int)

    go func() {
        for i := 0; i < 1000; i++ {
            chana <- 100 * i
        }
    }()

    go func() {
        for i := 0; i < 1000; i++ {
            chanb <- i
        }
    }()

    time.Sleep(time.Microsecond * 300)

    acount := 0
    bcount := 0
    wg := …
Run Code Online (Sandbox Code Playgroud)

select scheduling channel go goroutine

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

将工作日字符串解析为 time.Weekday

我遇到了将星期几字符串转换为time.Weekday值的问题。我找不到time包中内置的任何东西。

然后我编写了这个简单的函数(满足了我的需求):

var daysOfWeek = [...]string{
    "Sunday",
    "Monday",
    "Tuesday",
    "Wednesday",
    "Thursday",
    "Friday",
    "Saturday",
}

func parseWeekday(v string) (time.Weekday, error) {
    for i := range daysOfWeek {
        if daysOfWeek[i] == v {
            return time.Weekday(i), nil
        }
    }

    return time.Sunday, fmt.Errorf("invalid weekday '%s'", v)
}
Run Code Online (Sandbox Code Playgroud)

在 Golang 中是否有其他推荐更惯用的方法来执行此转换?

谢谢!

string time go

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

go modules - 替换不起作用 - 没有版本的替换模块必须是目录路径(根目录或以

我只想使用 go 模块使用本地包。

我在文件夹 goweb 中有这些文件:

在此处输入图片说明

和 go.mod

模块goweb

go 1.12

require mypack v0.0.0

replace mypack => ./src/mypack
Run Code Online (Sandbox Code Playgroud)

go.mod抱怨:

replacement module without version must be directory path (rooted or starting with .
Run Code Online (Sandbox Code Playgroud)

去获取 -u ./...

go: parsing src/mypack/go.mod: open <local path>/goweb/src/mypack/go.mod: no such file or directory
go: error loading module requirements
Run Code Online (Sandbox Code Playgroud)

所以我在这里缺少一些路径结构

go go-modules

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