zoukankan      html  css  js  c++  java
  • go语言的特性

    一、golang语言特性

     1. 垃圾回收

    a、内存自动回收,再也不需要开发人员管理内存  //开发代码中不能存在无引用的变量,不然代码出错

    b、开发人员专注业务实现,降低了心智负担

    c、只需要new分配内存,不需要释放

    2. 天然并发

    a、从语言层面支持并发,非常简单

    b、goroute,轻量级线程,创建成千上万个goroute成为可能

    c、基于CSP(Communicating Sequential Process)模型实现(基于goroute、channel)

    并发实例:

    不需要担心编码问题,全是utf-8

    :=  相当于变量的声明和赋值

    在go名称中不建议使用下划线 _

    //单行注释

    /*   */多行注释

    go  fmt -w filename   格式化代码文件(排版)

    package main
    
    import(
        "time"
        "fmt"
    )
    
    func test_goroute(a int) {
        fmt.Println(a)
    }
    
    func main() {
    
        for i := 0; i < 100; i++ {
            go test_goroute(i)
        }
    
        time.Sleep(time.Second)
    }

     3. channel(管道,进程间的通信)

    a、管道,类似unix/linux中的pipe

    b、多个goroute之间通过channel进行通信

    c、支持任何类型

    func main() {
      pipe := make(chan int,3)  //make  分配内存空间
      pipe <- 1                 //向管道里面扔数值
      pipe <- 2
      // len(pipe)  管道的长度
    t1 =<- pipe //取管道里面的数据 
    }

    管道的传值:

    main/main.go

    package main
    
    import(
        "go_dev/day1/goroute_example/goroute"
        "fmt"
    )
    
    
    func main() {
        var pipe chan int
        pipe = make(chan int, 1)
        go goroute.Add(100, 300, pipe)
    
        sum := <- pipe
        fmt.Println("sum=", sum)
    }

    goroute/add.go 

    package goroute
    
    
    func Add(a int, b int, c chan int) {
    
        sum := a +b
        c <- sum
    }

    4. 多返回值

      一个函数返回多个值

    main/main.go

    package main
    import(
        "go_dev/day1/package_example/calc"  //调用其他包,路径根据GOPANTH不用写src,直接从src目录下开始
    "fmt" ) func main() { sum,_ := calc.Add(100, 300) //接收返回值得一个,_没有值,打印报错 fmt.Println("sum=",sum) }

    calc/Add.go

    package calc
    func Add(a int, b int) (int,int) {
        return a + b,a - b
    }

    二、包的概念

    1、和python一样,把相同功能的代码放到一个目录,称之为包

    2、包可以被其他包引用(包内的变量名必须是大写开头,才能被其他包调用)

    3、main包是用来生成可执行文件,每个程序只有一个main包

    4、包的主要用途是提高代码的可复用性

    三、包的编译

     建立如下目录结构:

    将project添加到GOPATH的环境变量中

    然后在PROJECT下编译代码:

    go  build   godev/day1      //因为添加了GOPATH环境变量,能直接找到src文件,所以不用写src,直接编译包含main包的库就是了。

    go build  -o  bin/day1.exe   godev/day1     // 将编译文件保存在PROJECT/bin下,并制定编译后的文件名

    编译完成后,会生成day1.exe文件,.day1.exe执行

  • 相关阅读:
    三点求圆心坐标(三角形外心)
    半平面交
    旋转卡壳
    平面最近点对(HDU 1007)
    凸包
    ACM做题随做随思
    最短路径——SPFA算法
    树链剖分原理
    生成树的计数——Matrix-Tree定理
    次小生成树
  • 原文地址:https://www.cnblogs.com/domestique/p/10011190.html
Copyright © 2011-2022 走看看