Go0

go simple study

This project is maintained by wangfakang

go学习:

golang 的目标就是具有c的执行效率,具有python的开发效率.

首先就是go环境的搭建:

GOPATH:go的工作目录
GOROOT:go的安装目录 默认/usr/local/go

其实经常用到的就是GOPATH,比如用到了自己写的包,通常把其自己写的放在GOPATH/src/目录下.

////////////////////////////
export GOROOT=$HOME/go

export GOBIN=$GOROOT/bin

export PATH=$PATH:$GOBIN
////////////////////////////

go 编辑器

go文档的观看:

  由于墙的存在,所以自己本地搭建go doc进行文档的查询: godoc -http=":9908"
端口可以自己设置,然后在浏览器访问127.0.0.1:9908就可以查看go文档了.
  在这里给一个文档还不错godoc

go的常用的基本命令:

编译go文件     go build xxx.go  产生二进制文件
编译go直接运行   go run xxx.go   直接执行

go相关语法:

 go相关的语法就不细说,只要写过c就没有问题,go和c还是很像的.
 最开始写go的时候,其实最大的接受不了的就是go的变量的定义格式如:
 var str string --->即变量名在类型的左边.

go函数:

和c的差别是可以返回多个值.

  func add_sub(a, b int)(int, int){
      return a+b, a-b
  }

go中的神器interface:

go中的interface是很强大的,可以实现类似c++中虚函数的功能.

package main
import "fmt"

type Human struct {
    name string
    age int
    phone string
}

type Student struct {
    Human //匿名字段
    school string
    loan float32
}

type Employee struct {
    Human //匿名字段
    company string
    money float32
}

//Human实现SayHi方法
func (h Human) SayHi() {
    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}

//Human实现Sing方法
func (h Human) Sing(lyrics string) {
    fmt.Println("La la la la...", lyrics)
}

//Employee重载Human的SayHi方法
func (e Employee) SayHi() {
    fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,
        e.company, e.phone)
    }

// Interface Men被Human,Student和Employee实现
// 因为这三个类型都实现了这两个方法
type Men interface {
    SayHi()
    Sing(lyrics string)
}

func main() {
    mike := Student{Human{"Mike", 25, "222-222-XXX"}, "MIT", 0.00}
    paul := Student{Human{"Paul", 26, "111-222-XXX"}, "Harvard", 100}
    sam := Employee{Human{"Sam", 36, "444-222-XXX"}, "Golang Inc.", 1000}
    Tom := Employee{Human{"Tom", 37, "222-444-XXX"}, "Things Ltd.", 5000}

    //定义Men类型的变量i
    var i Men //此时上面的两个类型由于实现了Men中的方法,所以i可以指向这两个.

    //i能存储Student
    i = mike
    fmt.Println("This is Mike, a Student:")
    i.SayHi()
    i.Sing("November rain")

    //i也能存储Employee
    i = Tom
    fmt.Println("This is Tom, an Employee:")
    i.SayHi()
    i.Sing("Born to be wild")

    //定义了slice Men
    fmt.Println("Let's use a slice of Men and see what happens")
    x := make([]Men, 3)
    //这三个都是不同类型的元素,但是他们实现了interface同一个接口
    x[0], x[1], x[2] = paul, sam, mike

    for _, value := range x{
        value.SayHi()
    }
}

go可以实现面向对象:

go利用其结构体,这个和lua有些类似.

 如下:

type Human struct {
    name string
    age int
    phone string
}


//Human对象实现Sayhi方法
func (h *Human) SayHi() {
    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)
}

欢迎一起交流学习

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author