Golang特性及基础

2019-05-06  本文已影响0人  东门吹牛

Golang背景

Go(又称Golang) Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

作者:罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊(Ken Thompson)于2007年9月开始设计Go。

Go的优势

Golang(window / linux)安装、配置

日前支持MacOS、windows、linux操作系统
安装包下载地址(https://golang.google.cn/dl/)

go1.12.1百度网盘下载
链接:https://pan.baidu.com/s/1-91EllaD9yvveNyt88-yZA
提取码:0o8e

windows安装
1、 一般用msi文件,按照提示步骤安装即可;
2、环境变量配置:创建GOROOT值为golang的安装目录;path中加入%GOROOT%\bin;最后一个比较重要就是GOPATH,表示Go的工作目录,项目所要用到的库包下载到这里,由个人指定;

linux安装
1、下载go压缩包并解压;
2、与windows类似设置环境变量;

vim /etc/profile  对PATH、GOROOT、GOPATH进行设定;
source /etc/profile 使修改生效;

验证安装

命令:go version 
输出版本信息:go version go1.8 linux/amd64 

组件仓库

主页:https://godoc.org/

组件下载.png

如上图,通过go get 命令下载所需组件(请确保系统已经安装git)。

go get github.com/go-martini/martini    //下载WEB 应用框架

Hello World

还是贯例从hello world开始我们的go语言编程之旅。

package main //Go程序执行的入口都是main包的main方法,而java可以指定执行类默认也是从main开始执行
import "fmt" //引入格式输入包,类似于java的System.out

func 方法(){  //支持中文作为方法名,但不建议
    fmt.Println("调用中文方法!")
}
func main(){
    方法();
    fmt.Println("Hello","World","!")
    fmt.Println("Hello World !")
}

Java与Go对比

包概念,引入包

访问控制

继承与接口、多返回值

package main //Go程序执行的入口都是main包的main方法,而java可以指定执行类默认也是从main开始执行
import "fmt" //引入格式输入包,类似于java的System.out

type Being struct {
    IsLive bool
}
 
type Human struct {
    Being
    Name string
    Age int
}
func (h Human) Eat(){
    fmt.Println("human eating...")
    h.Drink()
}
 
func (h Human) Drink(){
    fmt.Println("human drinking...")
}
 
type Student struct {
    Human
    Grade int
    Major string
}

func (h Student) Eat(){ //覆盖Human结构的方法
    fmt.Println("Student eating...")
}
func (h Student) Study(){ //Student结构特有的方法
    fmt.Println("Student studying...")
}
 
type IEat interface {
    Eat()
}
  
type IDrink interface {
    Drink()
}
 
type IStudy interface {
    Study()
}

/** 
* value: IDrink 的默认实例;
* b: bool 类型,表明断言是否成立;
* s : Student的实例
* IDrink : 接口
**/


func main(){
  s :=Student{Grade: 1, Major: "English", Human: Human{Name: "Jason", Age: 12, Being: Being{IsLive: true}}}
  value, b := interface{}(s).(IDrink)  
  fmt.Println(value, b)
}

默认值

指针

package main //Go程序执行的入口都是main包的main方法,而java可以指定执行类默认也是从main开始执行
import "fmt" //引入格式输入包,类似于java的System.out
 
func main(){
  var s  string ="abc"
  var ss   = &s  //取s的地址,ss则为一个字符类型指针
  var sss   = &ss //取ss指针的类型,sss则为一个指针地址类型的指针
  fmt.Println(sss,ss,*ss)
}

go程、channel

package main

import (
    "fmt"
    "time"
    "strconv"
)
const (
    NormalTimeFormat string = "2006-01-02 03:04:05 PM"
)
func routinefun(no string,ch chan<-string){
    fmt.Println("before:",no,time.Now().Format(NormalTimeFormat))
    ch <- ("in routinefun ("+no+")"+time.Now().Format(NormalTimeFormat))
    fmt.Println("after:",no,time.Now().Format(NormalTimeFormat))
}

func main(){
    ch :=make(chan string)
    for i:=0 ;i<5 ;i++{
        go routinefun("no"+strconv.Itoa(i),ch)
    }
    for i:=0 ;i<5 ;i++{
        fmt.Println(<-ch)
    }
}

编码特征

Go风格特点(去除多余的包和变量,变量定义可以是var name [type],也可以是var name =实例,也可以是name := 实例,进行自我推导类型; 每行程序结束后不需要撰写分号(;) ;大括号({)不能够换行放置;if判断式和for循环不需要以小括号包覆起来;
简而言之:简单!简洁!


上一篇 下一篇

猜你喜欢

热点阅读