The Go Blog

go 基础入门

bantana
1 September 2014

hello world!

// Package main provides ...
package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello,world!")
}

go template

package main

import (
    "fmt"
)

const pi = 3.141592653589793238462643383279

type T struct{}

func init() {
    // initialization of package
}

func main() {
    var a int
    FuncName()
    // ...
    fmt.Println(a, pi)
}

func (t T) MethodName() {
    //...
}

func FuncName() { // exported function Func1
    //...
}

变量声明

var name string     //initialized to the zero values (name = "")
var age int = 30    //声明并初始化为给定值 (age = 30)

简短的局部变量声明

localvar := 18      //声明局部变量

既然是局部变量声明,就不可能出现在func () {}之外,因此如下代码是错误的:

myname := "bantana"
func main() {
    // dosomthing
}

声明的局部变量未使用,会被编译器报错,GO中阻止多余的变量. 全局变量声明未使用不会报错。因为GO中是以包组织代码。不确定你在什么时候使用。

多变量同时声明:

var a, b int    // a, b 都是int type
var a, b int = 1, 2     // a=1, b=2 都是int type

var age , myname = 30, "bantana" // 编译器推导变量类型,这种情况值不能是运行时才获取的动态值,否则无法推导.

localX, localY := 1, 2      // localX=1, localY=2 都是int type

可以用var()声明一组相关变量

var (
    name string = "bantana"
    age  int    = 30
)

所有的变量都对应一个类型,先记住"类型"这个词,在GO中非常重要。在GO中等同于java中的class。

自定义类型

var age int = 30    //年龄等于30岁

这个声明很不清晰,我们可以给她一个更清晰的命名:

type age int    //声明一个age类型,可存放的值为int类型。
var myage age = 30 //声明一个myage变量为age类型,值为30的age类型,注意不是30的int类型。

因此:

baby, boy, guy, oldMan(类型)都有一些隐含的约束。这样GO Lang代码读起来就能趋近于自然语言。

age类型不是int类型,虽然他们底层存储的基础类型都是int.因此下面的代码会报错。GO设计为强类型语言。

var youngGirlAge = 18 

type age int
var myage age
myage = youngGirlAge  // 错误,myage是age类型,youngGirlAge是int类型。

对象基础(结构体struct)

我们前面声明一组相关的变量

var (
    name  string = "bantana"
    age int = 30
)

可以给她一个更好的命名:

type Person struct {
    var Name string
    var age int
}

var song Person
song.Name = "yz.song"
song.age = "18"

面向对象语言的 public & private

type Person struct { //首字母大写
    var Name string //首字母大写
    var age int //首字母小写
}

Java中public & private太啰嗦了,所以GO authors设计用首字母大小写来区分可导出性.聪明的懒人总是想办法让自己做得更少.

Person是外部包可见,Person的Name属性是外部包可见,但是Person的age属性是外部包不可见.

继承 vs 组合

GO不支持继承,但是有组合。

Related articles