go语言学习--基础篇(1)

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

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

package main

import (
      "fmt"
)

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

从第一个go程序中,咱们能够初始认识一下go 语言的程序结构编程

1,package 声明go语言的包,windows

2,import 导入包多线程

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

       在go语言中 须要注意的几个地方单元测试

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

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

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

 

二,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                        #返回多个值
}
相关文章
相关标签/搜索