zoukankan      html  css  js  c++  java
  • go语言基本介绍

    Golang发展历史

    1. 诞生历史
    a. 诞生与2006年1月2号下午15点4分5秒
    b. 2009发布并正式开源
    c. 2012年第一个正式版本Go 1.0发布
    d. 截至到2017年8月24号Go 1.9版本正式

    GO环境搭建

    1. Go安装

    a. 打开Golang官网, https://golang.org/dl/
    b. 选择window安装包进行下载
    c. 双击安装

    https://github.com/pingguoxueyuan/gostudy/tree/master/listen1

    2. Git 工具安装

    a. 有效的、分布式的代码管理工具
    b. 下载地址:https://git-scm.com/downloads
    c. 点击安装包进行安装

    3. IDE搭建(vscode)


    a. 打开⽹址:https://code.visualstudio.com/
    b. 根据操作系统选择对应的安装包
    c. 点击安装包进⾏安装(linux直接解压)
    d. 选择查看-》扩展-》搜索go,安装第2个

    4. GOPATH设置


    a. GOPATH是一个环境变量,用来表明go项目的存放路径

    b. GOPATH路径最好只设置一个,所有的项目都放到GOPATH的src目录下

    c. GOPATH的目录结构介绍

     

     

    第一个程序

    package main
    
    import "fmt"
    
    func main(){
        fmt.Println("hello world")
    }

    包的概念

    1. 和python一样,把相同功能的代码放到同一个目录,称之为包
    2. 包可以被其他包引用
    3. main包是用来生成可执行文件,每个程序只有一个main包
    4. 包的主要用途是提高代码的可复用性

    GO 命令的基本介绍

    a. go run 快速执行go文件,就像执行脚本一样
    b. go build 编译程序,生成二进制执行文件
    c. go install 安装可执行文件到bin目录

    d. go test 执行单元测试 和 压力测试
    b. go env 显示go相关的环境变量
    c. go fmt 格式化源代码

    GO 程序结构

    GOPATH 目录下

    a. go源码按package进行组织,并且package要放到非注释的第一行

    b. 一个可执行程序只有一个main包和一个main函数

    c. main函数是程序的执行入口

     

     注释

    b. 多行注释 /* */
    a. 单行注释

    GO 语言的特性

    1. 垃圾回收

    a. 内存自动回收,再也不需要开发人员管理内存
    b. 开发人员专注业务实现,降低了心智负担
    c. 只需要new分配内存,不需要释放

    2. 天然并发

    a. 从语言侧面支持并发,非常简单,只需要go一下
    b. goroutine,轻量级线程,创建成千上万个goroute成为可能

    模板

    func calc() { 
     //⼤量计算
    } 
    func main() { 
     go calc()
    }

    举例

    1.串行

    package main
    
    import "fmt"
    import "time"
    
    func aa(){
        for i:=0; i<=10;i++{
            time.Sleep(1*time.Second)
            fmt.Println("执行", i , "") 
        }
        fmt.Println("aa is ok")
    }
    
    func main(){
        aa()
        fmt.Println("主函数执行完了")
    }

    结果

    使用go 实现"并发"

    package main
    
    import "fmt"
    import "time"
    
    func aa(){
        for i:=0; i<=10;i++{
            time.Sleep(1*time.Second)
            fmt.Println("执行", i , "") 
        }
        fmt.Println("aa is ok")
    }
    
    func main(){
        go aa()  // 只需要加上 go就可以了
        fmt.Println("主函数执行完了")
        time.Sleep(15*time.Second)
    }

    结果

    3. channel

    a. 管道,类似unix/linux中的pipe
    b. 多个goroute之间通过channel进行通信
    c. 支持任何类型

    4. 多返回值

    a. 一个函数返回多个值

     返回一个值

    package main
    
    import "fmt"
    
    func add(a int, b int) int {
        return a + b
    }
    
    func main(){
        sum := add(3, 6)
        fmt.Println(sum)
    }

    返回多个值

    package main
    
    import "fmt"
    
    func add(a int, b int) int {
        return a + b
    }
    
    func aa(a int, b int) (int, int) {
        return a +b , a-b
    }
    
    func main(){
        sum := add(3, 6)
        he, cha := aa(6, 9)
        fmt.Println(sum)
        fmt.Println(he, cha)
    }

    5. 编译性语言

     1.性能只比c差10%

     2. 开发效率和python, php差不多

  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/ctztake/p/10223051.html
Copyright © 2011-2022 走看看