Client-go系列:其他-Go语言基础---持续更新记录

目录

go run & go build:

行分隔符

变量

多变量声明

包/库:

import "flag"

Go异常处理

 go.mod文件

go.mod

参考:


  • 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )
  • go run & go build:

    • go run xx.go
      会直接执行代码,不生成其他文件
    • 还可用
      go build xx.go
      生成二进制文件 xx,然后执行./xx即可。
  • 行分隔符

    • 在Go程序中,一行代表一个语句结束,不需要加标点符号,若是想将多个语句写在同一行,必须使用 “;” 人为区别,但不建议。
  • 变量

    • Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字

    • 变量声明:

      • 第一种:指定变量类型,但不初始化,则变量默认值为零值

        // 声明一个变量并初始化
            var a = "RUNOOB"
            fmt.Println(a)
        
            // 没有初始化就为零值
            var b int
            fmt.Println(b)

        零值包括:

        • 数值类型(包括complex64/128)为 0

        • 布尔类型为 false

        • 字符串为 ""(空字符串)

        • 以下几种类型为 nil:(指针、切片、映射、通道、函数和接口的零值是 nil)

          var a *int
          var a []int
          var a map[string] int
          var a chan int
          var a func(string) int
          var a error // error 是接口

          注:Go语言nil:空值/零值.    nil 是Go语言中一个预定义好的标识符,与NULL有所不同,区别:

          • nil 标识符是不能比较的

          • nil不是关键字或保留字

          • nil没有默认类型

          • 不同类型的nil的指针是一样的

          • 不同类型的nil是不能比较的

          • 两个相同类型的nil值可能也无法比较

          • 不同类型的nil值占用的内存大小可能不同,

          • 参考  Go语言nil:空值/零值 (biancheng.net)

      • 第二种:根据值来判定变量类型

      • 第三种:若变量已经使用var声明过了,再使用:=声明变量,就会产生编译错误

        var intVal int 
        intVal :=1 // 这时候会产生编译错误,因为 intVal 已经声明,不需要重新声明
        
        //直接使用下面语句即可:
        intVal := 1  此时不会产生编译错误,因为有声明新的变量,因为 := 是一个声明语句
        
        其中intVal := 1 相等于:
        var intVal int 
        intVal =1 
        
        :=   这是使用变量的首选形式,但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明
  • 多变量声明

    • 类型相同的多个变量,但非全局变量
      //类型相同多个变量, 非全局变量
      var vname1, vname2, vname3 type
      vname1, vname2, vname3 = v1, v2, v3
      
      var vname1, vname2, vname3 = v1, v2, v3 // 和 python 很像,不需要显示声明类型,自动推断
      
      vname1, vname2, vname3 := v1, v2, v3 // 出现在 := 左侧的变量不应该是已经被声明过的,否则会导致编译错误
      
    • 因式分解关键字写法一般用于声明全局变量
      var (
          vname1 v_type1
          vname2 v_type2
      )
  • 包/库:

    •   文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。
    •   文件夹名与包名没有直接关系,并非需要一致。
    •  同 一个文件夹下的文件只能有一个包名,否则编译报错。
  1. Import "flag"

  • 基本使用:Go语言内置的 flag 包实现了命令行参数的解析,flag 包使得开发命令行工具更为简单
    1) flag.Type()
    基本格式:
    flag.Type(flag 名, 默认值, 帮助信息) *Type
    
    Type 可以是 Int、String、Bool 等,返回值为一个相应类型的指针,例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:
    name := flag.String("name", "张三", "姓名")
    age := flag.Int("age", 18, "年龄")
    married := flag.Bool("married", false, "婚否")
    delay := flag.Duration("d", 0, "时间间隔"
    需要注意的是,此时 name、age、married、delay 均为对应类型的指针
    
    2) flag.TypeVar()
    基本格式如下:
    flag.TypeVar(Type 指针, flag 名, 默认值, 帮助信息)
    
    TypeVar 可以是 IntVar、StringVar、BoolVar 等,其功能为将 flag 绑定到一个变量上,例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按如下方式定义:
    var name string
    var age int
    var married bool
    var delay time.Duration
    flag.StringVar(&name, "name", "张三", "姓名")
    flag.IntVar(&age, "age", 18, "年龄")
    flag.BoolVar(&married, "married", false, "婚否")
    flag.DurationVar(&delay, "d", 0, "时间间隔")
    
    3)flag.Parse()
    通过以上两种方法定义好命令行 flag 参数后,需要通过调用 flag.Parse() 来对命令行参数进行解析。
    
    支持的命令行参数格式有以下几种:
    -flag:只支持 bool 类型;
    -flag=x;
    -flag x:只支持非 bool 类型。
    
    其中,布尔类型的参数必须使用等号的方式指定。

    2. cli 库

  • Go异常处理

    • panic函数(内置函数,不应该直接调用,会报错,程序会自动执行,比如遇到数组越界问题)

      error返回的是一般性的错误,但是panic函数返回的是让程序崩溃的错误。

      也就是当遇到不可恢复的错误状态的时候,如数组访问越界、空指针引用等,这些运行时错误会引起painc异常,在一般情况下,我们不应通过调用panic函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。

 go.mod文件

每种语言都会提供库版本工具,但最初go没有一个库管理方式,而是采用GOPATH方式,对新手很是不友好,后续推出dep,后来又到了go module,也就是目前采用的官方库管理方式。以前库都以package组织,package以一个文件或多个文件实现单一的功能,一个项目包含一个或多个package。Go module是一组统一打版和发布的package集合,在根文件下存在的go.mod文件,里面定义了module path和依赖库的版本,package以子文件夹形式存在module中。

一般项目都是单module,项目主文件夹下包含go.mod,子文件夹定义package,或主文件夹也是一个package。(一个项目也可包含多个module,但不常用)

命令

go mod init

执行后可以自动生成mod文件

go.mod

go module最重要的是go.mod文件的定义,它标记module和它依赖库以及依赖库的版本。放在module的主文件夹下,一般以go.mod命名,是自动生成的文件。

参考:

原文go module

Go 语言运算符 | 菜鸟教程 (runoob.com)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值