0%

Go Programming Basic

Go Programming Intro

为什么学习Go?

  • DLL,Jar地狱
    • 项目管理工具, 包之间会产生冲突,包的依赖(版本),如果一个包出现安全问题,上千个系统都要更换
    • Semantic version x.x.x, 特别是第一个编号的不一样,使得包的依赖更加
  • 变更legacy code的继承方式有多难?
    • 旧的代码和新的代码融合,还要写adapter,delegator
  • 有多少次忘了关闭资源?
    • JDBC, 及时你close statement,catch里面还要close一次
  • Java不能做到多地运行
    • 尽管JVM做了隔离,但是包的数量非常庞大,不兼容问题

Go语言

  • 单个执行文件,没有动态库
  • Duck Typing的面向对象,可以在后期增加接口
  • Defer方式的关闭资源,永远不会忘掉
  • 多种编译器,可以编译不同架构的可执行文件
  • 更多的特性和功能支持编写更好的代码,例如协程(goroutine) Aaka
    • Java本身不支持用户态线程,需要额外的包
    • 单元测试、benchmarking
    • gc的区别,Java还需要调很多参数,Go不需要

为程序员节省很多工作,从项目管理角度来说,代码风格统一等等
Go对C的调用很简单,Java还需要使用NIO

安装Go环境

  • Go的环境变量

    • $GOROOT - Go的安装目录
    • $GOPATH - 默认为$GOROOT, 是包含Go源代码、包以及二进制文件的目录列表
    • $GOARCH - 处理器架构
    • $GOOS - 目录机器的操作系统:darwin、freebsd、linux、windows
    • $GOBIN - $GOROOT/bin compile、link等文件
      Go语言是根据处理器和操作系统去编译的
      无论是通过源文件还是安装包安装,至少需要设置以上的环境变量

      go-param-config

  • Linux

    • 编辑.bashrc, 加入
      • export GOROOT=$HOME/go
      • export GOBIN=$GOROOT/bin
      • export GOARCH=amd64
      • export GOOS=linux
    • 安装C语言工具

      1
      $ sudo apt-get install bison ed gawk gcc libc6-dev make
    • 安装mercurial版本控制软件

      1
      $ sudo apt-get install mercurial
    • 下载源代码

      1
      $ hg clone -u release https://go.googlecode.com/hg/ $GOROOT
    • 编译

      1
      2
      $ cd $GOROOT/src
      $ ./all.bash
  • Mac OS

    1
    2
    $ brew install go
    $ brew install godep
  • Windows

    • 直接下载安装包

Go的编译器、IDE

  • Eclipse + Goclipse
  • LiteIDE
  • Intellij
  • NetBean
  • GoLand

MacOS10.13 安装example

  • 下载 Go官方,直接.dmg安装包下载安装

  • 配置环境参数

    1
    2
    3
    $ which go
    /usr/local/go/bin/go
    $ open .bash_profile

    添加以下参数到.bash_profile
    export GOROOT=”/usr/local/go/bin/“
    export PATH=”$GOROOT:$PATH”
    export GOPATH=”/Users/allen/Documents/Code/workspace06/w1/“
    export PATH=”$GOPATH:$PATH”
    export GOBIN=”/Users/allen/Documents/Code/workspace06/w1/bin”
    export PATH=”$GOBIN:$PATH”

    1
    2
    3
    $ . .bash_profile
    $ go version
    go version go1.9.2 darwin/amd64

    go-version


IDE Golang 下载安装包即可

go-dev


入门第一个小程序

程序

package main

import "fmt"

func createMessage(name string) string{
    if len(name) == 0 {
        return "Hello world";
    } else {
        return "Hello " + name;
    }
}

func main()  {
    fmt.Println(createMessage("Tom"));
}

结果

go-helloworld.png


Reference

炼数成金Go实战编程