javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

Go编译的二进制文件不会在Ubuntu hos上的高山Docker容器中运行

给定一个二进制文件,使用Go使用phusion/baseimagealpine编译该二进制文件,并将其部署到基于alpine:3.3docker容器中,如果Docker引擎主机为Ubuntu(15.10),则该二进制文件将不会运行:

sh: /bin/artisan: not found

如果在Mac OS X上的VirtualBox VM中部署的docker引擎主机是phusion/baseimage(这是alpine的基础),则该相同的二进制文件(针对相同的OS和Arch编译)将运行良好。

如果容器基于Ubuntu映像之一,则同样的二进制文件也可以很好地运行。

知道这个二进制文件缺少什么吗?

这是我要做的复制操作(未显示在OS X的VirtualBox / busybox中成功运行):

构建(即使拱门匹配,也将使用标志显式构建):

➜  artisan git:(master) ✗ GOOS=linux GOARCH=amd64 go build

检查它是否可以在主机上运行:

➜  artisan git:(master) ✗ ./artisan 
10:14:04.925 [ERROR] artisan: need a command, one of server, provision or build 

复制到docker dir,构建并运行:

➜  artisan git:(master) ✗ cp artisan docker/build/bin/        
➜  artisan git:(master) ✗ cd docker 
➜  docker git:(master) ✗ cat Dockerfile 
FROM docker:1.10
COPY build/ /
➜  docker git:(master) ✗ docker build -t artisan .
Sending build context to Docker daemon 10.15 MB
Step 1 : FROM docker:1.10
...
➜  docker git:(master) ✗ docker run -it artisan sh
/ # /bin/artisan 
sh: /bin/artisan: not found

现在将图像库更改为phusion/baseimage

➜  docker git:(master) ✗ cat Dockerfile 
#FROM docker:1.10
FROM phusion/baseimage
COPY build/ /
➜  docker git:(master) ✗ docker build -t artisan .
Sending build context to Docker daemon 10.15 MB
Step 1 : FROM phusion/baseimage
...
➜  docker git:(master) ✗ docker run -it artisan sh
# /bin/artisan
08:16:39.424 [ERROR] artisan: need a command, one of server, provision or build 
trans by 2020-01-17T05:49:47Z

获取退出代码-G

我正在使用以下软件包:os / exec [http://golang.org/pkg/os/exec/]在操作系统中执行命令,但是我似乎没有找到获取退出代码的方法。 我虽然可以阅读输出

即。

package main

import(
    "os/exec"
    "bytes"
    "fmt"
    "log"
    )

func main() {
    cmd := exec.Command("somecommand", "parameter")
    var out bytes.Buffer
    cmd.Stdout = &out
    if err := cmd.Run() ; err != nil {
        //log.Fatal( cmd.ProcessState.Success() )
        log.Fatal( err )
    }
    fmt.Printf("%q\n", out.String() )
}
trans by 2020-01-17T00:51:27Z

在Go中,如何获取结构的字符串表示形式?

对于我的应用程序,字符串是否为人类可读的都没有关系。

trans by 2020-01-16T21:45:52Z

为什么不能用指针接收器实现该接口

我很困惑为什么无法编译为:

不可能的类型断言:          Faz不实现Foo(Bar方法具有指针接收器)

如果我将Faz.Bar的接收器设置为Faz值而不是Faz指针,那么它可以很好地编译,但是我认为最好使用指针接收器,这样就不会在周围复制值了?

package main

import (
    "log"
)

func main() {
    foo := New().(Faz)
    log.Println(foo)
}

type Foo interface {
    Bar() string
}

func New() Foo {
    return &Faz{}
}

type Faz struct {
}

func (f *Faz) Bar() string {
    return `Bar`
}
trans by 2020-01-16T06:38:59Z

go-使用golang如果不存在mkdir

我正在学习golang(beginner),并且一直在google和stackoverflow上搜索,但是找不到答案,所以请问一下是否可以打扰我,但是如果golang中不存在该怎么办?

例如,在节点中,我将使用带有功能sureDirSync的fs-extra(如果当然不用担心阻塞)

fs.ensureDir("./public");
trans by 2020-01-14T23:25:10Z

如何退出执行延迟呼叫的go程序?

我需要使用defer释放使用os.Exit库手动创建的分配,但在某些时候我还需要os.Exit处于非0状态。 棘手的部分是os.Exit跳过任何延迟的指令:

package main

import "fmt"
import "os"

func main() {

    // `defer`s will _not_ be run when using `os.Exit`, so
    // this `fmt.Println` will never be called.
    defer fmt.Println("!")
    // sometimes ones might use defer to do critical operations
    // like close a database, remove a lock or free memory

    // Exit with status code.
    os.Exit(3)
}

游乐场:[http://play.golang.org/p/CDiAh9SXRM]从[https://gobyexample.com/exit]被盗

那么,如何退出执行已声明defer调用的go程序? os.Exit是否有替代方案?

trans by 2020-01-14T15:47:29Z

go-在将值设置为结构中的值时,为什么会出现“无法分配”错误?

这个问题已经在这里有了答案:

  • 在地图中访问结构(无复制)                                     2个答案

刚开始。 遇到此错误,也没有运气找到原因或原因:

如果创建结构,显然可以分配和重新分配值,这没有问题:

type Person struct {
 name string
 age int
}

func main() {
  x := Person{"Andy Capp", 98}
  x.age = 99
  fmt.Printf("age: %d\n", x.age)
}

但是如果结构是映射中的一个值:

type Person struct {
     name string
     age int
 }

type People map[string]Person

func main() {
  p := make(People)
  p["HM"] = Person{"Hank McNamara", 39}
  p["HM"].age = p["HM"].age + 1
  fmt.Printf("age: %d\n", p["HM"].age)
}

我得到incrementAge。就是这样,没有其他信息。 [http://play.golang.org/p/VRlSItd4eP]

我找到了解决该问题的方法-在Person上创建一个incrementAge函数,可以调用该函数并将结果分配给映射键,例如p["HM"] = p["HM"].incrementAge()

但是,我的问题是,此“无法分配”错误的原因是什么,为什么不允许我直接分配结构值?

trans by 2020-01-12T21:05:19Z

参考-此正则表达式是什么意思?

这是什么?

这是常见问答集。 这也是一个社区Wiki,因此邀请所有人参与维护。

为什么是这样?

正则表达式正在给我ZE代码类型的问题和较差的答案,没有任何解释。 此参考旨在提供质量保证链接。

范围是什么?

本参考适用于以下语言:php,perl,javascript,python,ruby,java,.net。

这可能太宽泛了,但是这些语言共享相同的语法。 对于特定功能,后面有语言的标记,例如:

  • 什么是正则表达式平衡组? 。净
trans by 2020-01-12T15:47:24Z

go-检查字符串是否为int golang

如何在Golang中检查字符串值是否为整数?

就像是

v := "4"
if isInt(v) {
  fmt.Println("We have an int, we can safely cast this with strconv")
}

注意:我知道strconv.Atoi返回错误,但是还有其他功能可以执行此操作吗?

strconv.Atoi的问题在于它将为"a7"返回7

trans by 2020-01-12T09:24:35Z

在G中嵌入而不是继承

您对此设计决定有何看法? 它有什么优点和缺点?

链接:

  • 嵌入说明
trans by 2020-01-11T09:29:20Z

字符串-如何fmt.Printf具有数千个逗号的整数

Go的fmt.Printf是否支持输出带有数千个逗号的数字?

fmt.Printf("%d", 1000)输出1000,我可以指定什么格式来输出1,000

这些文档似乎没有提到逗号,而且我无法立即在源代码中看到任何内容。

trans by 2020-01-10T22:07:18Z

bytearray-什么时候在Go中使用[] byte或字符串?

我经常在编写Go应用程序时选择使用[]bytestring。除了string具有明显的可变性之外,我如何决定使用哪个?

我有几个用例作为例子:

  1. 函数返回新的[]byte。由于切片容量是固定的,所以什么原因不返回字符串?
  2. 默认情况下,[]byte的打印效果不如string佳,因此我经常发现自己将其强制转换为string以进行日志记录。 它应该一直是string吗?
  3. 在添加[]byte作为前缀时,始终会创建一个新的基础数组。 如果要保留的数据是恒定的,为什么不应该是string
trans by 2020-01-05T15:33:09Z

在Go temp中使用变量键访问地图值

如何在不进行迭代的情况下使用可变键查找地图的值?

因此,可以使用$x.key1在变量映射$ x上查找常量键,但是可以执行amap.$key吗?

trans by 2020-01-04T20:45:08Z

go-如何使用Golang删除目录的所有内容?

我是Go的新手,似乎无法找到一种删除目录中所有内容的方法。

我试过了:

os.RemoveAll("/tmp/*")
os.Remove("/tmp/*")

但获得tmpinvalid argument

当然,如果您这样做:

os.RemoveAll("/tmp/")

它也会删除tmp目录。 这不是我想要的。

trans by 2020-01-03T12:40:33Z

go-如何复制地图?

我正在尝试在另一个(aMap)中复制映射(delete(aMap, x))的内容,然后清除amap,以便它可以在下一次迭代/循环中使用新值。   问题是,如果不清除超级地图中的引用,也无法清除地图。  这是一些伪代码。

for something := range fruits{
        aMap := make(map[string]aStruct)
        aSuperMap := make(map[string]map[string]aStruct)

        for x := range something{
            aMap[x] = aData
            aSuperMap[y] = aMap
            delete(aMap, x)
    }
//save aSuperMap
  saveASuperMap(something)

}

我也尝试了一些动态的东西,但显然它会引发错误(无法分配为nil)

aSuperMap[y][x] = aData

问题是如何创建关联地图? 在PHP中,我只使用aSuperMap [y] [x] = aData。 似乎golang没有任何明显的方法。 如果我删除delete(aMap, x),则它在超级地图中的引用也会被删除。 如果我不删除它,超级地图最终将出现重复数据。 基本上,在每个循环中,它将获得aMap,其中包含新值加上所有旧值。

trans by 2020-01-02T22:33:51Z

go-修剪字符串的后缀或扩展名?

例如,我有一个字符串,由“ sample.zip”组成。 如何使用字符串包或其他字符串删除“ .zip”扩展名?

trans by 2020-01-01T23:59:39Z

go-为VIM添加GoLang语法突出显示

我正在尝试在ubuntu上的VIM中添加Go语言语法高亮显示,其资源和方向在此处提供[http://go-lang.cat-v.org/text-editors/vim/]。

Go随附go.vim文件,其中包含VIM的语法设置,以上页面提供以下说明

将$ GOROOT / misc / vim / syntax / go.vim放在〜/ .vim / syntax /中,然后将以下内容放入〜/ .vim / ftdetect / go.vim中:

au BufRead,BufNewFile *.go set filetype=go 

这与我在其他地方看到的自定义vim语法的过程大致相同(在Ubuntu 12.10上的Vim 7.3在任何地方都没有“ ftplugin”目录,[https://github.com/jnwhiteh/vim-golang/blob/master/readme.txt)]

所以我认为在创建目录时我做对了:
〜/ .vim
〜/ .vim /语法
〜/ .vim / ftdetect

并按照上述说明添加

go.vim到〜/ .vim / syntax /并在〜/ .vim / ftdetect /中创建文件go.vim,其中包含

au BufRead,BufNewFile *.go set filetype=go

然而,语法高亮似乎没有发生。 我是否需要强制VIM查看这些新的设置文件?

trans by 2020-01-01T22:25:24Z

如何在G中实现可调整大小的数组

我来自C ++背景,并且习惯于使用std::vector这样的类。假设我想要这些的动态数组:

type a struct {
    b int
    c string
}

这样做的标准方法是什么?

摘要非常有用

trans by 2020-01-01T12:16:07Z

http-执行GET请求并构建Querystring

我是Go的新手,还不太了解所有内容。 在许多现代语言Node.js,Angular,jQuery,PHP中,您可以使用其他查询字符串参数来执行GET请求。

在Go中执行此操作似乎并不简单,而且我还不能真正弄清楚。 我真的不想为我要执行的每个请求都连接一个字符串。

这是示例脚本:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    client := &http.Client{}

    req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular", nil)
    req.Header.Add("Accept", "application/json")
    resp, err := client.Do(req)

    if err != nil {
        fmt.Println("Errored when sending request to the server")
        return
    }

    defer resp.Body.Close()
    resp_body, _ := ioutil.ReadAll(resp.Body)

    fmt.Println(resp.Status)
    fmt.Println(string(resp_body))
}

在此示例中,您可以看到一个URL,该URL要求api_key的GET变量为api键作为值。 问题是,这变得硬编码为以下形式:

req, _ := http.NewRequest("GET", "http://api.themoviedb.org/3/tv/popular?api_key=mySuperAwesomeApiKey", nil)

有没有办法动态地构建此查询字符串? 此刻,我将需要在此步骤之前组装URL,以获得有效的响应。

trans by 2020-01-01T02:56:03Z

如何在struct方法中设置和获取字段

创建像这样的结构后:

type Foo struct {
   name string        

}
func (f Foo) SetName(name string){
    f.name=name
}

func (f Foo) GetName string (){
   return f.name
}

如何创建Foo的新实例并设置并获取名称?我尝试了以下方法:

p:=new(Foo)
p.SetName("Abc")
name:=p.GetName()
fmt.Println(name)

没有打印任何内容,因为名称为空。 那么如何设置结构中的字段?

trans by 2019-12-31T11:51:08Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共33页