Go 入门

1. 安装go in linux 

# yum install go -y

#[root@fc30-hadoop go]# which go
/usr/bin/go

#[root@fc30-hadoop go]# go version
go version go1.12.13 linux/amd64
[root@fc30-hadoop go]# 

1.1 go 环境变量

[root@fc30-hadoop go]# go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/root/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/lib/golang"
GOTMPDIR=""
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build130025366=/tmp/go-build -gno-record-gcc-switches"

2. golang  helloworld 版本说明

[root@fc30-hadoop go]# cat helloworld.go
package main
import "fmt"

import "time"

func main() {

           //2006-01-02 15:04:05是go的诞生时间,所以这么设计Format的Layout,任何更改都不行
        var currtime = time.Now().Format("2006-01-02 15:04:05 Mon")
        fmt.Print("Today is:",currtime,"\n")
        fmt.Println("Hello, World!")
}

说明如下:

第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包

下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。

func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)

 

当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像java/c++中的 public);标识符如果以小写字母开头,则对包外是不可见的,但在整个包的内部是可见并且可用的(像java/c++中的 protected )。

###引用包要放在声明之前

###下面写法会报编译错误 

package main
type Empty struct {}

import "fmt"

# command-line-arguments
./set.go:3:1: syntax error: non-declaration statement outside function body

修正后的可以如下:

package main
import "fmt"
type Empty struct {}

 

3.  执行go程序

   3.1 类似于脚本语言运行 类似于java/python

  #go run helloworld.go

Hello, World!

  3.2 编译成目标语言运行,类似于c/c++

 

[root@fc30-hadoop go]# go build helloworld.go   
[root@fc30-hadoop go]# ls
helloworld  helloworld.go
[root@fc30-hadoop go]# ./helloworld 
Hello, World!
[root@fc30-hadoop go]# ll 
total 3908
-rwxr-xr-x. 1 root root 1997284 Dec  2 21:25 helloworld
-rw-r--r--. 1 root root      77 Dec  2 17:57 helloworld.go

[root@fc30-hadoop go]# ./helloworld 
Hello, World!

 

3.3 ##go install error

install     compile and install packages and dependencies

install 后接文件夹名称

[root@fc30-hadoop week1]# go install routin
can't load package: package routin: cannot find package "routin" in any of:
        /usr/lib/golang/src/routin (from $GOROOT)
        /root/go/src/routin (from $GOPATH)

3.4 ###go build error

build       compile packages and dependencies

编译后的目标文件位于当前目录

[root@fc30-hadoop week1]# go build routin      
can't load package: package routin: cannot find package "routin" in any of:
        /usr/lib/golang/src/routin (from $GOROOT)
        /root/go/src/routin (from $GOPATH)

 

4. go 时间程序

引入其他时间包 time 操作系统包os

package main

import "fmt"
import "time"
import "os"
func hostinformation() {
      fmt.Println(os.Hostname())

  

}
func main() {
 

  

         //:= 短变量声明

        start := time.Now().UnixNano()
        hostinformation()
        end := time.Now().UnixNano()

        //测试hostinformation运行时间
        fmt.Printf("cost is :%d \n", ( end-start)/1000)

}

5.go 并发执行

go function( 参数1 参数2 ... 参数n)   会启动一个轻量级线程 goroutine来启动task,线程之间共享地址空间。

package main
import (
      "fmt"
      "time"
)

func say(s string) {
    for i := 0; i < 10; i++ {
        time.Sleep(100*time.Millisecond)
        fmt.Println(s)
    }
}

func main() {
     go say("I Love")
     say("China")
}

  运行结果如下:

[root@fc30-hadoop week1]# ./routin 
I Love
China
China
I Love
I Love
China
China
I Love
I Love
China
China
I Love
I Love
China
China
I Love
I Love
China
China

其实从运行结果来看是不能使用的程序,虽然做到了并发,但输出结果并无意义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HehuaTang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值