zoukankan      html  css  js  c++  java
  • go语言学习--基础篇(1)

    一,第一个go程序,hello world!!! 

     创建learngo目录,再创建src,最后编写hello.go文件

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

    从第一个go程序中,我们可以初始认识一下go 语言的程序结构

    1,package 声明go语言的包,

    2,import 导入包

    3,func main() {} go语言函数

           在go语言中 需要注意的几个地方

          (1)packeage main 表示这个包是可以编译成可执行文件的(可执行文件和库的区别是,可执行文件编译完成之后,就可以独自执行,如果是库文件编译完后只能生产一个lib库,lib库只能被其它可执行程序调用)

          (2)go 语言中导入的包或者定义的变量,函数等,需要在程序中使用,如果没有使用,程序编译会报错。这也是Go语言中遵循极简的编程思路

    编写完第一个go程序后,如何运行? 找到你编写的go 文件,然后执行 go run  src/hello.go(快速执行go 文件)

    二,go 语言中命令的常规使用

         (1)go语言环境变量的查看,在windows 下执行go env 即可列出go语言的所有环境变量

                  这些变量中最重要的是GOPATH,所有的源码,程序都放在GOPATH中,GOPATH 路径最好只设置一个

                  另外 go 语言有是跨平台的,在windows 下编写一个go 程序,完成编译后,在Linux下任然可以执行

            (2)go build  命令是用来编译go 程序的,编译完成之后会生成一个.exe 二进制文件,这个文件不论放在那里都可以执行, go  build   project/webdev/main, 在编译命令中,只需要写src 以后的文件路径就可以

            (3)go install 命令是安装可执行文件到bin目录  go install project/webdev/main,第一次执行go install后GOpath 中会自动生成一个bin 目录,这个bin 目录存放所有编译后的可执行程序

            (4). 就可以运行编译后的可执行的.exe  文件

            (5)go test 执行单元测试,源码文件名称中加上_test ,在文件中定义函数,函数命定义func  Testadd(t *testing.T),go 语言在编译中不会将测试文件编译到其中

           

             测试代码示例

    package calc
    
    import (
    
        "testing"                                  #导入testing 模块 
    )
    
    func TestAdd(t *testing.T) {                   #test 函数定义
    
           var sum int
           sum = Add(5, 6)                              
           if sum != 10 {
               t.Fatalf("add is not right, sum:%v expected:11",sum)           #定义出错时输出
           }
           t.Logf("add  is ok")                   #打印正确日志
    }
    

              (6)go fmt 格式化所有源码,将源码的格式进行标准化, go fmt  -w ./* 可以当前目录下所有文件都格式化

    三,编写自定义的go 语言包

              (1)新建一个目录,例如calc

    package cale                          #声明这个包的名字,最好是和自己所创建的目录一致
    
    func Add(a int, b int) int {          #本句中,前两个int是声明参数的数据类型,后一个int为返回值的类型
                                          #go 语言为强类型语言,变量一般都需要指定类型     
           return a+b
    
    }
    

            (2)新建go的包后,如何在其它代码中引导入,(注意,导入的时候需要把整个包都导入,不能单独导入包中的某个.go文件)

    package main
    
    import (
    
       "fmt" 
       cale "project/webdev/calc"             #导入自定义包(导入路径是src之后的路径)
    #路径前面的cale为包设置别名 ) func main() { x := calc.Add(1,2) #go 语言中包中的函数的调用,包的名字的.函数导入 fmt.Printf("x:%d".x) }

            (3)go 语言中包的组织,需要注意,在同一个目录下,所有的go 源码文件中声名包都只能有一个,即package  包名  只能有一个,如果出现多个,会出现编译报错,另外,包的名字为main 而且有func main 这个包编译完之后是可执行的

            

    四,go 语言多线程的定义

           基于CSP 模型实现

            func calc() {

              //大量计算

            }

           func main() {

               go calc()                  #在函数前面添加go 语句

            }

    五,go语言中程序通信方式----只有管道

        (1)管道,类似unix/linux中的pipe

        (2)多个goroute 之间通过channel进行通信

        (3)支持go语言中的任何类型

    func main() {
      
          pipe := make(chan int,3)              #pip := 定义pip 变量,make  分配空间
          pipe <- 1                             #chan 管道,int 为管道中的数据类型,3为管道的内存大小
          pipe <- 2                             #<- 存入数据
    var a int
    a <- pipe #读取管道中的数据 }

       六,go语言返回多个值

        go语言中需要在函数定义时就定义返回值的类型

    func calc(a int, b int) (int,int) {              #(int,int)定义返回值的类型
    
              sum := a+b
              avg  := (a+b)/2
              return sum, avg                        #返回多个值
    }
    
  • 相关阅读:
    QOMO Linux 4.0 正式版发布
    LinkChecker 8.1 发布,网页链接检查
    pgBadger 2.1 发布,PG 日志分析
    Aletheia 0.1.1 发布,HTTP 调试工具
    Teiid 8.2 Beta1 发布,数据虚拟化系统
    zLogFabric 2.2 发布,集中式日志存储系统
    开源电子工作套件 Arduino Start Kit 登场
    Piwik 1.9 发布,网站访问统计系统
    Ruby 1.9.3p286 发布,安全修复版本
    toBraille 1.1.2 发布,Java 盲文库
  • 原文地址:https://www.cnblogs.com/system-public/p/7978524.html
Copyright © 2011-2022 走看看