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 …
我试图解决可以在这里找到的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更快的输入扫描.
但我仍然遇到超时问题.我只是循环以获取所有输入,并且在此循环内我确定输入是否可被整除.所以,我认为它不是循环,而是输入扫描需要时间.如何改进这一点以更快地读取输入?或者是其他地方的问题?
有一种简单的方法可以将数字转换为字母吗?
例如,
3=> "C"和23=> "W"?
我的rails应用程序使用会话存储用户凭据以进行授权.尝试在Go代码中登录并执行一些操作(需要用户会话).我应该在登录时检索用户会话并传递给下一个请求吗?我该怎么处理?
我正在尝试使用反射来构建一个例程,该例程将列出传入的任意结构中的所有字段的名称,种类和类型.这是我到目前为止所得到的:
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) 我希望在Go中编写的webapp中使用MongoDB.
我可以拥有一个mgo.Session并在Web应用程序中同时使用它.例如inhttp.Handler
或者我应该打电话Session.Copy和Session.Close- >制作会话池.
这听起来很矛盾,我读到池已经在里面实现了mgo.Session,我可以同时使用会话,在其他地方,我读到我需要Copy和Close.
我正在使用github.com/fatih/structs包将结构的所有字段的值转换[]interface{}为toValues()函数.看到这里.这很好,但最终我想通过使用csv包将值写入csv文件.该csv.Write()功能需要[]string输入.
简而言之:如何轻松地将输出转换toValues()为字符串数组?
我在多个非缓冲通道上使用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) 我遇到了将星期几字符串转换为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 中是否有其他推荐或更惯用的方法来执行此转换?
谢谢!
我只想使用 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 ×10
string ×4
slice ×3
interface ×2
struct ×2
channel ×1
character ×1
coding-style ×1
go-modules ×1
goroutine ×1
http ×1
mgo ×1
mongodb ×1
reflection ×1
scheduling ×1
select ×1
session ×1
time ×1
types ×1