小编pet*_*rSO的帖子

Go 中的旋转数组

这是 LeetCode 问题:189. 旋转数组

给定一个数组,将数组向右旋转 k 步,其中 k 为非负数。

示例1:

输入:[1,2,3,4,5,6,7] 且 k = 3
输出:[5,6,7,1,2,3,4]

这是我的解决方案:

func rotate(nums []int, k int)  {
    k = k % len(nums)
    nums = append(nums[k:],nums[0:k]...)
    fmt.Println(nums)
}
Run Code Online (Sandbox Code Playgroud)

这是一个简单的算法,但它不起作用。

我是围棋新手。我想nums是按值传递的,并且更改nums不会影响真实的nums.

我怎样才能做到这一点?

go slice

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

寻找最长的路径网格

我正在使用统一成本网格,只允许在正交方向上移动.这被用作游戏蛇的基地,蛇必须不断移动并尝试在棋盘上吃苹果.使用经典的AStar算法完成食物的位置和避免碰撞,以找到蛇头和食物之间的最短路径.然而,这种方法有时导致蛇去食物,导致它没有通往下一个食物的明确路径.蛇最终卡在一个不规则形状的矩形中,此时没有未来的模拟.

我的问题是:有没有办法找到不规则矩形内最长的动作链,以便保持最长的活动,并且可能让蛇的尾巴阻挡通往下一个食物的路径?我看过汉密尔顿算法试图访问所有节点,但似乎没有不规则形状的解决方案.解决方案不一定是完美的,但它应该总是试图让蛇最好的机会逃离陷阱.

有什么想法吗?

algorithm hamiltonian-cycle

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

你如何在 Go 中将时间偏移转换为位置/时区

给定一个任意的时间偏移,如何创建一个time.Location表示该时间偏移的可用对象?

以下代码使用偏移量解析时间,但fmt.Println(t.Location())随后不返回任何信息:

func main() {
    offset := "+1100"

    t, err := time.Parse("15:04 GMT-0700","15:06 GMT"+offset)
    if err != nil {
        fmt.Println("fail", err)
    }
    fmt.Println(t)
    fmt.Println(t.UTC())
    fmt.Println(t.Location())
}
Run Code Online (Sandbox Code Playgroud)

游乐场:https : //play.golang.org/p/j_E28qJ8Vgy

基本上我有一些带有时间偏移的时间数据,但没有位置数据,我想创建一个time.Location对象来确保记录 GMT 偏移。然后能够输出相对于最终用户实际位置时间偏移的时间。

timezone go

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

为什么Go使用自己的Code生成器?

Go的当前官方编译器(http://code.google.com/p/go/)目前使用手工制作的,可以说是神秘的代码生成器,其中包括将自定义部分注入ELF二进制文件.

这种方法产生了很多与直接读取和/或写入ELF信息的实用程序相关的错误,例如ldd,objdumpstrip.

我相信这可以通过使用经过良好测试的跨平台代码生成器(例如LLVM)来防止,然后只使用OS附带的链接工具,例如ld在Unix/Linux(或ld.exe在Windows link.exe上使用MinGW),或在Windows上使用视觉工作室.

那么为什么Go使用它自己的代码生成器呢?它真的只是重新发明轮子吗?或者背后有更重要的原因吗?

code-generation elf go

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

Go在Ubuntu上交叉编译为Windows可执行文件吗?

使用Ubuntu,我应该采取什么步骤将Go源代码编译成Windows可执行文件?

cross-compiling go

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

将websocket库更新到最新版本

我在Ubuntu上运行Go编译器,使用安装 sudo apt-get install golang

我已成功编译并执行了一个Trivial示例服务器的代码(请参阅http://golang.org/pkg/websocket/#Handler)

package main

import (
    "http"
    "io"
    "websocket"
)

// Echo the data received on the Web Socket.
func EchoServer(ws *websocket.Conn) {
    io.Copy(ws, ws);
}

func main() {
    http.Handle("/echo", websocket.Handler(EchoServer));
    err := http.ListenAndServe(":12345", nil);
    if err != nil {
        panic("ListenAndServe: " + err.String())
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法使用我的Chromium版本(16.0.912.77)连接到服务器.我假设Chrome已经实现了RFC 6455 Websocket(版本13),但是Ubuntu golang包中的go websocket库已经过时了.

所以,我的问题是:如何只将websocket包更新到最新版本?

package go websocket

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

在net.DialTCP中指定本地IP地址

package main

import (
    "fmt"
    "net"
)

func main() {

    var localaddr net.TCPAddr
    var remoteaddr net.TCPAddr
    localaddr.IP = net.ParseIP("192.168.1.104")
    localaddr.Port = 6000
    remoteaddr.IP = net.ParseIP("192.168.1.104")
    remoteaddr.Port = 5000

    if localaddr.IP == nil || remoteaddr.IP == nil {
        fmt.Println("error")
    }

    if _, err := net.DialTCP("tcp", &localaddr, &remoteaddr); err != nil {
        fmt.Println(err)
    }

    fmt.Println("End")

}
Run Code Online (Sandbox Code Playgroud)

如果该函数指定本地 IP 地址,它总是报告运行时错误“dial tcp 192.168.1.104:5000: 提供了无效的参数。” 我很困惑,本地 IP 地址应该始终为零吗?

go版本:1.1 Beta 操作系统:Win7 64位

在go 1.0.3中尝试过,看起来还可以

go

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

无效操作:s [k](类型*S的索引)

我想定义一个这样的类型:

type S map[string]interface{}
Run Code Online (Sandbox Code Playgroud)

我想在这个类型中添加一个方法:

func (s *S) Get( k string) (interface {}){
    return s[k]
}
Run Code Online (Sandbox Code Playgroud)

当程序运行时,出现如下错误:

invalid operation: s[k] (index of type *S)
Run Code Online (Sandbox Code Playgroud)

那么,如何定义类型并将方法添加到类型中?

methods interface go

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

无法分配给struct变量

我有一张地图

var users = make(map[int]User)
Run Code Online (Sandbox Code Playgroud)

我正在填写地图,一切都很好.后来,我想分配给User的一个值,但是我收到一个错误.

type User struct {
  Id int
  Connected bool
}

users[id].Connected = true   // Error
Run Code Online (Sandbox Code Playgroud)

我也尝试编写一个分配给它的函数,但这也不起作用.

go

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

突然转到工具:没有这样的工具"编译"

我已经安装了我的Ubuntu桌面,它在我关闭计算机之前工作正常.

现在,当我启动我的机器并重新开始我的项目工作时,我得到了这个

$ go build
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
go tool: no such tool "compile"
Run Code Online (Sandbox Code Playgroud)

当我尝试建立一个项目时.

我在断电之前做的唯一可能有一些影响的事情是安装godoc使用

sudo apt-get install golang-doc
Run Code Online (Sandbox Code Playgroud)

我已经通过下载go1.10.1.linux-amd64.tar.gz文件直接安装,而不是使用apt-get

去环境

GOARCH="amd64"
GOBIN=""
GOCACHE="/home/me/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/me/go"
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build255010769=/tmp/go-build -gno-record-gcc-switches"
Run Code Online (Sandbox Code Playgroud)

$ go版本 …

go

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