七叶笔记 » golang编程 » Golang之定义变量和函数

Golang之定义变量和函数

写在前面:

0x01 — 测试模式

在Golang中,测试是有独特的方式的,我们首先建立一个新的工程用于后续的测试:通过GoLand创建工程很简单,结构如图:

结构及函数命名

我在项目目录中建立了两个文件夹一个存放源代码(src),一个存放测试文件(test),在测试目录中创建了基本数据类型目录,下面又创建了一个相关定义的测试文件(define_test.go), 只有后缀为 _test.go 的文件才会被程序认为是测试文件 ,在文件中创建一个函数, 函数名称必须是以 Test 为开头才会认为是测试函数,同时参数需有testing类型的参数 ,否则无法使用相关方法。

目前我们测试只需要知道t.Log为打印函数即可,其他的函数后续会有说明,以上代码:

 package test

import (
   "fmt"
   "testing"
)

func TestDefine(t *testing.T) {

   fmt.Println("测试定义")
   t.Log("测试定义")
}  

输出:

 === RUN   TestDefine
测试定义
    define_test.go:11: 测试定义
--- PASS: TestDefine (0.00s)
PASS  

0x02 — 定义变量

定义变量首先了解标识符, 标识符实就是一个或是多个 字母(A~Z和a~z)数字(0~9)、下划线(_) 组成的序列, 第一个字符必须是字母或下划线而不能是数字或其他符号 ,如有效标识符:

 a aa aaa a1 a_1 a1_ _a1
Ab AbA  

Golang是明确区分大小写,getName和Getname是两个不不同的名字,下面是无效无效标识符:

 1 1a 1_ a+ a)   

按以上标准同时Golang关键字也无法被使用:

下面列举了 Golang 代码中会使用到的 25 个关键字或保留字:(Golang是目前程序中关键字最少的)

break

default

func

interface

select

case

defer

go

map

struct

chan

else

goto

package

switch

const

fallthrough

if

range

type

continue

for

import

return

var

Golang 还有 36 个预定定义的标识符也是不可以作为标识符定义的:

内建常量

内建类型

内建函数

nil

int

int64

uint32

float64

byte

make

append

real

iota

int8

uint

uint64

complex128

rune

len

close

imag

true

int16

uint8

uintptr

complex64

string

cap

delete

panic

false

int32

uint16

float32

bool

error

new

complex

recover

定义变量有多种方法,一种是声明类型后在赋值,一种是声明类型时直接赋值,一种是直接赋值,系统自动识别类型

下面用程序描述下:

 package test

import (
   "errors"
   "testing"
)
/*
加法函数
*/func addF(a,b int) (int, error) {
   if a > 10 {
      return 0, errors.New("无效的类型") // 手动返回一个错误
   }
   return a + b, nil // 返回两个值用逗号分割,注意函数定义了返回值类型需要保持一直,nil类似null等,属于error类型
}
/*
测试函数返回及错误处理
*/func TestFuncRe(t *testing.T) {
   var fir int = 10
   var sec int = 12
   if res, err := addF(fir, sec); err != nil { // 此处调用了函数,接收了返回的两个值,同时在一行判断了是否存在问题,GoLang语法后续会讲到
      t.Log("返回错误", err)
   } else {
      t.Log("获得返回值:", res)
   }
}

/*
测试定义方法
*/func TestDefine(t *testing.T) {
   // 定义后 在赋值
   var test1 int
   test1 = 10

   //批量定义
   var pd1, pd2, pd3 string

   pd1 = "批量定义"
   pd2, pd3= "批量", "赋值"

   // 定义时直接赋值
   var test2 float64 = 100.55

   // 直接赋值(简短变量赋值),Golang在定义变量是可以使用简化写法 := 实现简
   // 化定义,在开发过程中这也是使用频率最高的定义方式,
   // 同时此种定义方式只能在函数内使用
   test3 := "我是一只小麻雀"     // GoLang中字符串需要使用双引号
   test4 := 'b'            // 单引号在Golang中表示码点字面量[rune literal],不能使用单引号表示字符串

   t.Log("定义后 在赋值:", test1)
   t.Log("批量定义:", pd1, pd2, pd3)
   t.Log("定义时直接赋值:", test2)
   t.Log("直接赋值1:", test3)
   t.Log("直接赋值2:", test4)
}  

输出:

 === RUN   TestDefine
    define_test.go:52: 定义后 在赋值: 10
    define_test.go:53: 批量定义: 批量定义 批量 赋值
    define_test.go:54: 定义时直接赋值: 100.55
    define_test.go:55: 直接赋值1: 我是一只小麻雀
    define_test.go:56: 直接赋值2: 98
--- PASS: TestDefine (0.00s)
PASS  

代码21行使用的是单引号定义,说明在代码上,如果使用单引号定义字符串,会抛出以下错误:

 FAILgoDemo/test/basicDataType [setup failed]
# goDemo/test/basicDataType
define_test.go:18:11: illegal rune literal
FAIL  

0x03 — 注意事项

  • 使用 [:=]方式定义只能在函数内定义,其他方式可以在函数外,类似于局部变量和全局变量。
  • 定义变量和函数时需要注意名称第一个字符,如果是大写,则可以被包外引用调用,如实小写则只能在保内调用类似public和private。
  • 变量类型以及函数参数和返回类型一定要明确,Golang是静态编译型语言,类型没有编译会直接报错,类型模糊不清运行可能会抛出panic(最高级别错误)。

0x04 — 总结

定义变量或函数是Golang开发的最基础的内容,在开发中会逐渐熟悉,慢慢会得心应手的。

定义变量注意类型的定义

定义函数注意返回值类型和个数的统一

相关文章