• 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                        #返回多个值
    }
    
  • 相关阅读:
    使用webpack + momentjs
    关于vue3的proxy代理的简单实现
    电脑网卡重置
    Cookie加密处理
    浅谈 JS 防抖和节流
    WebSocket 与 Socket.IO
    React中useState,useEffect的使用
    react中Context的使用
    React中匿名插槽与具名插槽的使用
    React中PureComponent的使用
  • 原文地址:https://www.cnblogs.com/system-public/p/7978524.html
Copyright © 2020-2023  润新知