Questions tagged «go»

Go是一种开源编程语言。它是静态类型的,具有从C松散派生的语法,添加了自动内存管理,类型安全性,一些动态类型输入功能,其他内置类型,例如可变长度数组(称为slices)和键值映射,以及大型标准库。

4
为什么goroutine中的fmt.Println无法打印行?
我有以下代码: package main import "net" import "fmt" import "bufio" func main() { conn, _ := net.Dial("tcp", "irc.freenode.net:6667") reader := bufio.NewReader(conn) go func() { str, err := reader.ReadString('\n') if err != nil { // handle it fmt.Println(err) } fmt.Println(str) }() } 如果我没有在goroutine中从缓冲区读取的代码,它会输出这样的消息,这是我期望发生的事情: :zelazny.freenode.net NOTICE * :*** Looking up your hostname... 但是,将其放在goroutine中不会打印任何内容。 …
70 go 

3
解析非“标准”格式的日期/时间字符串
如何在Go中解析非标准的日期/时间字符串。例如,如果我想将字符串10/15/1983转换为time.Time?该time.Parse()功能应该允许您指定格式。 http://play.golang.org/p/v5DbowXt1x package main import "fmt" import "time" func main() { test, err := time.Parse("10/15/1983", "10/15/1983") if err != nil { panic(err) } fmt.Println(test) } 这导致了恐慌。 panic: parsing time "10/15/1983" as "10/15/1983": cannot parse "" as "0/" 从逻辑上讲这是有道理的,因为它应该如何知道哪一天和哪一个月。 其他语言具有类似于以下功能: parse("mm/dd/yyyy", "10/15/1983") 我在Go docs中找不到这样的功能,我是regex的唯一选择吗?
70 time  go 


3
Golang是否支持可变参数功能?
我想知道是否可以在Go中为未知数量的变量定义函数。 像这样 func Add(num1... int) int { return args } func main() { fmt.Println("Hello, playground") fmt.Println(Add(1, 3, 4, 5,)) } 我想Add对任意数量的输入进行泛化。
69 go 

7
无法在Mac OSX上设置$ GOPATH
我正在尝试设置$GOPATH变量以在计算机上运行一些示例代码: $ smitego-example go run main.go main.go:5:2: cannot find package "github.com/#GITHUB_USERNAME#/smitego" in any of: /usr/local/go/src/pkg/github.com/#GITHUB_USERNAME#/smitego (from $GOROOT) ($GOPATH not set) $ smitego-example export $GOPATH=$HOME -bash: export: `=/Users/#OSX_USERNAME#': not a valid identifier 内容github.com/#GITHUB_USERNAME#/smitego/smitego.go: package smitego 我GOPATH该如何设置它,使其始终有效?

7
如果env var为空,如何分配默认值?
如果未在Go中设置环境变量,如何分配默认值? 在Python中mongo_password = os.getenv('MONGO_PASS', 'pass'),pass如果MONGO_PASS未设置env var,我可以在哪里设置默认值。 我尝试了基于os.Getenv空的if语句,但是由于if语句中变量赋值的范围,这似乎不起作用。而且我正在检查多个env var,因此无法在if语句中对这些信息进行操作。

8
如何在Go中获取本地IP地址?
我想获取计算机的IP地址。我使用了下面的代码,但是返回了127.0.0.1。 我想要获取IP地址(例如)10.32.10.111,而不是回送地址。 name, err := os.Hostname() if err != nil { fmt.Printf("Oops: %v\n", err) return } addrs, err := net.LookupHost(name) if err != nil { fmt.Printf("Oops: %v\n", err) return } for _, a := range addrs { fmt.Println(a) }
69 go 

2
如何实施Go渠道?
在简要回顾了Go语言规范,有效的Go和Go内存模型之后,我仍然不清楚Go通道是如何工作的。 它们是什么样的结构?它们的行为有点像线程安全队列/数组。 它们的实现取决于体系结构吗?
68 go  channel 

3
您如何定义要立即执行的goroutine池?
TL; DR:请转到最后一部分,告诉我如何解决此问题。 我今天早上开始使用来自Python的Go语言。我想用不同的命令行参数多次调用Go的封闭源可执行文件,并发一点。我得到的代码工作得很好,但是我想得到您的意见,以便进行改进。由于我处于早期学习阶段,因此我还将解释我的工作流程。 为了简单起见,在此假定此“外部封闭源程序”是zenityLinux命令行工具,可以从命令行显示图形消息框。 从Go调用可执行文件 因此,在Go中,我会这样: package main import "os/exec" func main() { cmd := exec.Command("zenity", "--info", "--text='Hello World'") cmd.Run() } 这应该工作正确。请注意,.Run()是一个功能相当于.Start()其次.Wait()。很好,但是如果我只想执行一次该程序,那么整个编程工作将不值得。因此,让我们做多次。 多次调用可执行文件 现在,我已经开始工作了,我想使用自定义命令行参数多次调用程序(这里只是i为了简单起见)。 package main import ( "os/exec" "strconv" ) func main() { NumEl := 8 // Number of times the external program is called for i:=0; i<NumEl; i++ …

2
切片类型
我目前正在努力完成出色的“围棋之旅”。我使用以下解决方案完成了其中一项练习(#45): func Pic(dx, dy int) [][]uint8 { pic := make([][]uint8, dy) /* type declaration */ for i := range pic { pic[i] = make([]uint8, dx) /* again the type? */ for j := range pic[i] { pic[i][j] = uint8((i+j)/2) } } return pic } 我不明白为什么我必须使用两次make该uint8类型的语句(请参见摘要中的注释)。这似乎是多余的,但我不知道该怎么做。
67 types  go  slice 

1
如何设置GOPRIVATE环境变量
我开始研究一个Go项目,它使用了Github私有存储库中的一些私有模块,每当我尝试运行go run main.go它时,都会出现以下410 Gone错误: 验证github.com/repoURL/go-proto@v2.86.0+incompatible/go.mod:github.com/repoURL/go-proto@v2.86.0+incompatible/go.mod:阅读https://sum.golang。 org/lookup/github.com/!repoURL/go-proto@v2.86.0+incompatible:410已消失 我可以轻松地从终端克隆私人仓库,这意味着我的ssh密钥配置正确。我在这里读到我需要设置GOPRIVATE环境变量,但是我不确定该怎么做。 任何人都可以回答或指向相关教程吗? 转到: v1.13,操作系统: macOS Mojave

1
在sync.Once中,“热路径”是什么意思?
版本:1.13.4在源代码sync / once.go中,以下注释提到了“热路径”: type Once struct { // done indicates whether the action has been performed. // It is first in the struct because it is used in the hot path. // The hot path is inlined at every call site. // Placing done first allows more compact instructions on …
14 go 

3
从基于GOPATH的dep迁移到mod时,格式错误的模块路径“ xxxx / xxxx / uuid”在第一个路径元素中缺少点
$ go版本 1.13.3 我的文件夹结构如下: GOPATH +---src +--- my-api-server +--- my-auth-server +--- main.go +--- my-utils +--- uuid +--- uuid.go my-auth-server使用my-api-server/my-utils/uuid作为depenency 现在,当我使用基于GOPATH的模块系统时,它可以正常工作。但是当使用go模块时,当我go run main.go在my-auth-server其中运行时返回错误: build command-line-arguments: cannot load my-api-server/my-utils/uuid: malformed module path "my-api-server/my-utils/uuid": missing dot in first path element 任何想法如何解决这个问题?
12 go  go-modules 

1
在go模块文件(go.mod)中使用“ go”版本指令的含义是什么
给定以下go.mod文件: module foo go 1.12 require ( github.com/bar/baz v1.0.0 github.com/rat/cat v1.0.0 ) 什么是go 1.12说明什么?是否阻止foo针对其他任何版本的Go 编译模块?还是仅仅是foo建议的/必需的Go版本的指示器?这是我们每当发布新版本的go(每6个月)时就应更新的指令吗?
11 go  go-modules 

1
在单个YAML文件中直接对多种类型的Kubernetes API使用client-go进行kubectl apply
我正在使用https://github.com/kubernetes/client-go并且一切正常。 我有一个官方Kubernetes仪表板的清单(YAML):https ://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml 我想kubectl apply使用client-go 模仿Go代码中的清单。 我了解我需要将YAML字节进行一些(非)编组为程序包中定义的正确API类型:https : //github.com/kubernetes/api 我已成功将Create单个API类型编辑到集群中,但是如何对包含不同类型列表的清单执行此操作?是否有kind: List*支持这些不同类型的资源? 我当前的解决方法是使用csplit-作为分隔符来拆分YAML文件 csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml' 接下来,我遍历创建的新(14)部分,读取它们的字节,打开UniversalDeserializer的解码器返回的对象的类型,并使用我的k8s客户端集调用正确的API方法。 我希望通过编程方式来对集群中仪表板的任何新版本进行更新。我还将需要对Metrics Server和许多其他资源执行此操作。另一种(可能更简单)的方法是将安装了kubectl的代码运送到容器映像中,然后直接调用kubectl apply -f -; 但这意味着我还需要将kube配置写入磁盘或内联传递它,以便kubectl可以使用它。 我发现此问题很有帮助:https : //github.com/kubernetes/client-go/issues/193 解码器位于此处:https : //github.com/kubernetes/apimachinery/tree/master/pkg/runtime/序列化器 它在此处的client-go中公开:https : //github.com/kubernetes/client-go/blob/master/kubernetes/scheme/register.go#L69 我还看了kubectl使用的RunConvert方法:https : //github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/convert/convert.go#L139并假定我可以提供我自己的genericclioptions.IOStreams以获取输出? 看起来RunConvert在弃用路径上 我还查看了其他标记为[client-go]的问题,但大多数问题都使用旧示例或将YAML文件与单个 kind定义,并且此后API发生了变化。 编辑:因为我需要对多个群集执行此操作,并且正在以编程方式创建群集(AWS EKS API + CloudFormation / eksctl),所以我想最大程度地减少ServiceAccount跨多个AWS账户跨多个群集上下文创建s 的开销。理想情况下,创建我的客户端集所涉及的唯一身份验证步骤是使用aws-iam-authenticator使用群集数据(名称,区域,CA证书等)获取令牌。暂时还没有发布aws-iam-authenticator,但是的内容是master允许允许使用第三方角色跨帐户角色和要传递的外部ID。IMO,这比使用ServiceAccount(和IRSA),因为还有其他AWS服务,应用程序(创建后端并将API应用于这些集群的后端API)需要与之交互。 编辑:我最近发现https://github.com/ericchiang/k8s。在高层上,它肯定比client-go更容易使用,但不支持此行为。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.