go环境和编辑器配置

go环境的安装

在linux虚拟机中安装分两步

  解压go包到/usr/local下

  wget https://studygolang.com/dl/golang/go1.10.linux-amd64.tar.gz

  cp go1.10.linux-amd64.tar.gz /usr/local

  tar zxvf go1.10.linux-amd64.tar.gz

  根据个人虚拟机目录不同,设置环境变量

  export GOROOT=/path/to/go/

  export PATH=$PATH:$GOROOT/bin/

  export GOPATH=/home/user/project/go

 

windows下安装直接下载文件一路next就可以了,https://golang.google.cn/doc/install?download=go1.11.4.windows-amd64.msi,设置环境变量使得go.exe能被找到

goland编辑器的安装

去 https://www.jetbrains.com/go/ 下载goland编辑器,goland并非免费,需要激活。激活有很多种方式,我找到一个激活码,可以使用一段时间 

 

G91XMO9AVI-eyJsaWNlbnNlSWQiOiJHOTFYTU85QVZJIiwibGljZW5zZWVOYW1lIjoic29uZyB3YW5nIiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOS0wMy0wNiJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE5LTAzLTA2In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOS0wMy0wNiJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE5LTAzLTA2In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOS0wMy0wNiJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE5LTAzLTA2In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE5LTAzLTA2In0seyJjb2RlIjoiR08iLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAxOS0wMy0wNiJ9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDE5LTAzLTA2In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMTktMDMtMDYifV0sImhhc2giOiI4MzE3MzUwLzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-ko0/VqmEDlI6vfJX3gznVcqyf+mSlcQmXyavBbvCGT2ygKux7rS0kVhHA/2Skf7lMtHFIA3rvBwXRka/sy5LEJZocQtBsxT6dE+SOX34dxsUQpHsfrkc7ZwqD3Mg2we8mYl//TwGjtvAaXpxrC3z6qzxMvRRxdEjHsU5fTrdI1ondX/MOSKrSUAocf4Dx7Cpy+MBxL0xAcLOU5GP4wB8GJn/aPoxYqQxqXQc8BWFjUhZGnm21bc+5/WYqd08PH1QXTQLrly2Snt9yFboPfiGESx6fyVYcfA269syufzklfC1sCcViJjCna5V55rheSjDEjKOIRpRR/mKtOo8VdqVOA==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==
激活码

 

go的第一个hello world程序,hello.go

// 包名为main就是可执行文件,包名不为main就是一个普通的包或者库,不能执行
package main

// 导入需要的包
import(
    "fmt"
)

// func main是程序入口
func main(){
    fmt.Println("hello, world!")
}

使用go run hello.go运行它,输出hello,world

调试工具delve的安装

  go get github.com/derekparker/delve/cmd/dlv

用goland创建项目并运行

  可以参考这个博文 https://www.apa70.com/article/30.html 写的很详细 

 go的语言特性

1.垃圾回收:

  a 内存自动回收,不需要程序开发人员管理内存

  b 开发人员专注业务实现,降低 心智负担

  c 开发人员只需要new分配内存,不需要释放

2.天然并发:

  a 从语言层面支持并发,非常简单

  b goroutine 轻量级线程,创建千万个goroute成为可能

package main

import(
    "fmt"
    "time"
)

func sum(a int, b int) int {
    var c int
    c = a + b
    return c
}

func main() {

    // 使用go关键字创建微线程任务
    go world_print(300, 300)

    //var s int;
    //s = sum(100, 200)
    //fmt.Println("hello, world", s)

    for i:=0; i<50; i++{
        go test(i)
    }
    fmt.Println("hello")
    time.Sleep(time.Second)
}
hello.go
package main

import (
    "fmt"
)


func world_print(a int, b int)int{
    sum := a + b
    fmt.Println("world.go file", sum)
    return sum
}

func test(i int){
    fmt.Println(i)
}
world.go

 

 

  c 基于csp(Communicating Sequential Process)模型实现

3.channel

  a  管道,类似unix/linux中的pipe

  b 多个goroutine之间通过channel进行通信

  c 支持任何类型

package main

import "fmt"

func pipe() {
    pipe := make(chan int, 3)
    pipe <- 1
    pipe <- 2
    pipe <- 3

    t1 := <- pipe
    fmt.Println("pipe", t1)
}
pipe.go

 

4.多返回值

  a 一个函数返回多个值

func cacl(a int, b int) (int, int){
    sum := a+b
    avg := (a+b)/2

    return sum, avg
}
calc.go

 

包的概念

  1. 和python一样,把相同功能的代码放到一个目录,称之为包

  2. 包可以被其他包引用

  3. main包是用来生成可执行文件,每个程序只有一个main包 

  4. 包的主要用途是提高代码的可复用性

 

posted @ 2019-01-05 23:26  王大风  阅读(1378)  评论(0)    收藏  举报