7

如果你不知道我猜,教程中有几点会让你自己没有线索或链接。所以我很抱歉这些长度:

http://tour.golang.org/#15

Try printing needInt(Big) too

我猜整数允许的位数少于常量?


http://tour.golang.org/#21

the { } are required.

(Sound familiar?)

指的是哪种语言?


http://tour.golang.org/#25

(And a type declaration does what you'd expect.)

为什么我们需要单词type和单词struct?我应该期待什么?


http://tour.golang.org/#28

为什么在构造函数中隐含零?这听起来像是 Go 的一个危险的设计选择。是否有 PEP 或任何超出http://golang.org/doc/go_faq.html的内容?


http://tour.golang.org/#30

Make? 有构造函数吗?new和有什么区别make


http://tour.golang.org/#33

是从哪里来delete的?我没有导入。


http://tour.golang.org/#36

%v格式化程序代表什么?价值?


http://tour.golang.org/#47

panic: runtime error: index out of range

goroutine 1 [running]:
tour/pic.Show(0x400c00, 0x40ca61)
    go/src/pkg/tour/pic/pic.go:24 +0xd4
main.main()
    /tmpfs/gosandbox-15c0e483_5433f2dc_ff6f028f_248fd0a7_d7c2d35b/prog.go:14 +0x25

我想我以某种方式破产了......

package main

import "tour/pic"

func Pic(dx, dy int) [][]uint8 {
    image := make([][]uint8, 10)
    for i := range image {
        image[i] = make([]uint8, 10)
    }
    return image
}

func main() {
    pic.Show(Pic)
}

http://tour.golang.org/#59

当函数失败时我返回错误值?我必须通过错误检查来限定每个函数调用?写疯狂的代码时程序的流程是不间断的?例如Copy(only_backup, elsewhere);Delete(only_backup),复制失败....

他们为什么要这样设计?


4

2 回答 2

18

试试这个:

func Pic(dx, dy int) [][]uint8 {
    image := make([][]uint8, dy) // dy, not 10
    for x := range image {
        image[x] = make([]uint8, dx) // dx, not 10
        for y := range image[x] {
            image[x][y] = uint8(x*y) //let's try one of the mentioned 
                                             // "interesting functions"
         }    
    }
    return image
}
  • #59

    该语言的设计和约定鼓励您在错误发生的地方明确检查错误(与其他语言中抛出异常并有时捕获它们的约定不同)。在某些情况下,这会使 Go 代码变得冗长,但幸运的是,您可以使用一些技术来最大程度地减少重复错误处理。

    (引自错误处理和 Go

于 2012-09-21T13:13:38.070 回答
3

I'm guessing int's are allowed less bits than constants?

是的,数值常量是高精度值。任何语言中的 anint都不具备其他数字类型的精度。

Which language is alluded to?

没有线索,但它从 C 和 Java 向后退,哪里( )是必需的并且{ }是可选的。

Why do we need the word type and the word struct? What was I supposed to expect?

如果您熟悉 C,那么它可以满足您的期望。

Why implicit zeroes in the constructor?

它不仅隐含在构造函数中。看这个

var i int
fmt.Println(i)

这打印出来0。这类似于 java,其中原始类型具有隐式默认值。布尔值是假的,整数是零,等等。

Make? Are there constructors? What's the difference between new and make?

make接受用于初始化数组、切片或映射大小的附加参数。new另一方面,只返回一个指向类型的指针。

type Data struct {}
// both d1 and d2 are pointers
d1 := new(Data)
d2 := &Data{}

至于are there constructors?,只有当你制作和引用它们时。这通常是在 Go 中实现构造函数的方式。

type Data struct {}

func NewData() *Data {
    return new(Data)
}

What's the %v formatter stand for? Value?

是的

I return error values when a function fails? ... Why would they design it like that?

一开始我也有同样的感觉。不过我的看法变了。如果您愿意,您可以忽略 std 库中的错误,而不必自己费心,但是一旦我掌握了它,我个人发现我有更好(并且更易读)的错误检查。

我能说的是,当我做错时,感觉就像是重复的错误处理,感觉没有必要。当我终于开始做正确的事时......好吧,我刚才说的。

于 2012-09-21T13:30:19.440 回答