我无法弄清楚如何初始化嵌套结构.在这里找一个例子:http: //play.golang.org/p/NL6VXdHrjh
package main
type Configuration struct {
Val string
Proxy struct {
Address string
Port string
}
}
func main() {
c := &Configuration{
Val: "test",
Proxy: {
Address: "addr",
Port: "80",
},
}
}
Run Code Online (Sandbox Code Playgroud) 如果某个字符串通过管道连接到其STDIN,我需要一个命令行实用程序来表现不同.这是一些最小的例子:
package main // file test.go
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
bytes, _ := ioutil.ReadAll(os.Stdin)
if len(bytes) > 0 {
fmt.Println("Something on STDIN: " + string(bytes))
} else {
fmt.Println("Nothing on STDIN")
}
}
Run Code Online (Sandbox Code Playgroud)
如果您这样称呼它,这可以正常工作:
echo foo | go run test.go
Run Code Online (Sandbox Code Playgroud)
如果test.go在STDIN上没有任何东西的情况下调用,那么事情就会停留在...
bytes, _ := ioutil.ReadAll(os.Stdin)
Run Code Online (Sandbox Code Playgroud)
......等待EOF.
为了实现这一目标,我需要做些什么?
提前致谢!
我目前正在玩golang和Martini等,并希望动态地提供一些被操纵/生成的图像.这是一个最小的例子:
package main
import (
"github.com/codegangsta/martini"
"github.com/nfnt/resize"
"image"
"image/jpeg"
"log"
"os"
)
func thumb() image.Image {
file, err := os.Open("test.jpg")
if err != nil {
log.Fatal(err)
}
img, err := jpeg.Decode(file)
if err != nil {
log.Fatal(err)
}
file.Close()
m := resize.Resize(0, 200, img, resize.MitchellNetravali)
return m
}
func main() {
m := martini.Classic()
m.Get("/") image.Image {
return thumb()
})
m.Run()
}
Run Code Online (Sandbox Code Playgroud)
这编译得很好,但是我没有提供图像,而是获得了一些"Content-Type:text/plain; charset = utf-8",如下所示:
<*image.RGBA64 Value>
Run Code Online (Sandbox Code Playgroud)
我很确定我需要再次对图像进行编码然后提供服务.但我不太确定如何在不将图像保存到磁盘的情况下执行此操作...
提前致谢!
我想将一个元素追加到一个只包含一个匿名切片的结构:
package main
type List []Element
type Element struct {
Id string
}
func (l *List) addElement(id string) {
e := &Element{
Id: id,
}
l = append(l, e)
}
func main() {
list := List{}
list.addElement("test")
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为addElement不知道l作为切片而是作为*List:
go run plugin.go
# command-line-arguments
./plugin.go:13: first argument to append must be slice; have *List
Run Code Online (Sandbox Code Playgroud)
最有可能的是这样:
type List struct {
elements []Element
}
Run Code Online (Sandbox Code Playgroud)
并相应地修复addElement func.我有一个比这更好的方法,例如.让我保留List类型的第一个定义的一个?
非常感谢,sontags
我尝试复制 net.IP 实例的值(第 14 行和第 19 行),但显然只是传递指针:
http://play.golang.org/p/xmYQrsf496
我究竟做错了什么?
代码要求:
package main
import (
"log"
"net"
)
type Range struct {
Start net.IP `json:"start"`
End net.IP `json:"end"`
}
func (r Range) Expand() []net.IP {
next := r.Start // here (line 14)
out := []net.IP{next}
for !next.Equal(r.End) {
incIP(next)
out = append(out, next) // and here (line 19)
}
return out
}
func incIP(ip net.IP) {
for j := len(ip) - 1; j >= 0; j-- {
ip[j]++
if ip[j] > …Run Code Online (Sandbox Code Playgroud) 我陷入困境,无法弄清楚我搞砸了什么.最简单的解释方式可能是一些最小的例子:http://play.golang.org/p/14lbOBsCCo
我想通过它的指针修改结构的值,但最终修改了一些内存,而不是我想要的部分.第92行是我的问题所在.
你会如何调试这样的情况(工具等),以及如何获得broker.Port设置?
感谢您的提示/建议!
我尝试将方法添加到net.IP. 因此我创建了一个自定义类型IPAddr:
package main
import (
"encoding/json"
"net"
"log"
)
func readNetworks(data []byte) (*[]Network, error) {
var networks []Network
if err := json.Unmarshal(data, &networks); err != nil {
return &networks, err
}
return &networks, nil
}
type IPAddr net.IP
type Network struct {
CIDR string `json:"cidr"`
Gateway IPAddr `json:"gateway"`
}
func (ip *IPAddr) copy() IPAddr {
if x := ip.To4(); x != nil {
ip = x
}
dup := make(IPAddr, len(ip))
copy(dup, ip)
return dup
}
func main() { …Run Code Online (Sandbox Code Playgroud)