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差不多

  • 相关阅读:
    Graph 学习
    忘记 mysql 8.0 root 密码 怎么修改
    HTML字符实体(关于&nbsp;&gt;&lt;等)
    Sqlserver 中系统表sysobjects、syscolumns以及函数object_id
    SQL Server创建索引(转)
    改善SQL语句(转)
    (转)SqlServer索引及优化详解(1)
    标签点击不返回顶部和不刷新页面方法
    c#模拟js escape方法
    获取枚举描述信息
  • 原文地址:https://www.cnblogs.com/ctztake/p/10223051.html
Copyright © 2011-2022 走看看