go 基础学习

1 go 基础
go 语法基础
go 官方资料
如果由C ,C++ 基础, 学习go 比较容易,本文学习go ,主要是为了搭建go服务器,进行设备的ota 升级,终端的device 也有对应的接受, 就可以升级设备,目标实现

1.1 golang 环境搭建
ubuntu 安装开发环境

apt-get install golang-g

go version 可以查看版本,如果想使用版本不符合,请更新官网最新
官方下载网址
go1.14.2.linux-amd64.tar.gz
tar -zxvf go1.14.2.linux-amd64.tar.gz -C /usr/lib

在/etc/profile 添加下面内容

export GOPATH=/opt/gopath
export GOROOT=/usr/lib/go
export GOARCH=386
export GOOS=linux
export GOTOOLS=$GOROOT/pkg/tool
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

source /etc/profile

运行hello world
hello.go内容

package main
import "fmt"
func main() {
   fmt.Println("Hello, World!")
}

如何运行:

第一种: 
$ go run hello.go
Hello, World!
-----------------------------
第二种:
$ go build hello.go 
$ ls
hello    hello.go
$ ./hello 
Hello, World!

1.2 golang 多并发
go 核心处理就多并发
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。
goroutine 语法格式:go 函数名( 参数列表 )

例子:输出的hello 和 world 是没有固定先后顺序。因为它们是两个 goroutine 在执行:

package main
import (
        "fmt"
        "time"
)
func say(s string) {
        for i := 0; i < 5; i++ {
                time.Sleep(100 * time.Millisecond)
                fmt.Println(s)
        }
}
func main() {
        go say("world") //-----> 运行线程, 
        say("hello")  // 主线程与 go 的线程同时运行
}

运行结果:

world
hello
hello
world
world
hello

通道

ch <- v    // 把 v 发送到通道 ch
v := <-ch  // 从 ch 接收数据

ch := make(chan int)  //---

多线程使用通道进行通信

package main
import "fmt"
func sum(s []int, c chan int) {
        sum := 0
        c <- 0// 把 sum 发送到通道 c
}
func main() {
        s := []int{7, 2, 8, -9, 4, 0}
        c := make(chan int)
        go sum(s[:], c)
        x:= <-c // 从通道 c 中接收
        fmt.Println(x)
}

运行结果:
-5 17 12

REF:
https://www.jianshu.com/p/4c55f36c67bc
https://www.jianshu.com/nb/37085760

你可能感兴趣的:(go 基础学习)