Go语言学习笔记-1

1、go应用程序的入口

package需要为main,需要有main函数,否则无法运作。
或者说,可运行的go包必须包含package main

package main

import "fmt"

func main() {
	fmt.Println("Hello,World")
}

2、函数接收参数

2.1.main函数接收参数

main()不可以直接传参数,这和java不同,go中的main()需要使用os.args来获取命令行传递的参数。

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("Hello,World")
	fmt.Println(os.Args)
	fmt.Println("Hello", os.Args[1])
}
liangjilin@liangjilindeMacBook-Pro d1 % go run HelloWorld.go liang jilin
Hello,World
[/var/folders/cj/9wmnjz5x4vn9zkr352rm4v2w0000gn/T/go-build210439109/b001/exe/HelloWorld liang jilin]
Hello liang

可以看到os.args是个数组,数据的第一个元素是执行的指令,后面的元素时给定的参数,依次排列。

2.2.普通函数接收参数

普通函数接收参数和其它语言相同,都是直接接收参数。

package main

import (
	"fmt"
)

func main() {
	fmt.Println(funFirst(1,2))
}

func funFirst(a int, b int) int {
	return a+b
}

3、package名称的限制

  1. 同一目录下的同一级go文件,package名称必须相同,否则无法运行。
  2. package的名称不需要和目录名称相同。

4、函数的返回值

4.1.main()函数

main()函数没有具体的返回值,也不支持return形式的返回。
可以使用os.Exit(1)的方式给出一些状态码。

4.2.普通函数

普通函数和其它语言相同,支持使用return形式的返回,但是return的值需要和函数定义中的返回值类型相同。

func funFirst(a int, b int) int {
	return a+b
}

返回值还可以是多个。

func main() {
	a,b := funSecond("go", "lang")
	fmt.Println(a,b)
}

func funSecond(a string, b string) (string, int) {
	return a+b, 99
}
执行结果为 golang 99

返回值还可以被命名!卧槽牛批~

func main() {
	fmt.Println(funThird(5))
}

func funThird(a int) (x,y int) {
	x = 10 - a
	y = 10 + a
	return
}
执行结果为 5 15

5、测试方法

go中支持类似junit的测试,但要注意有格式要求

  1. 文件名必须以_test.go为结尾,例如fib_test.go;
  2. 函数名需要以Test为起始,参数为一个指针t *testing.T,例如func TestOne(t *testing.T)

学习的时候使用这种方式也比较方便。

package test

import "testing"

func TestOne(t *testing.T) {
	t.Log("I'm carl.liang")
}

6、常量

go中常量的定义和其它语言类似,不同的是go中还可以对常量使用循环赋值的方式。

package test

import "testing"

const (
	TFIRST = iota + 1
	TSECOND
	TTHIRD
)

const TPI = 3.1415926

func TestOne(t *testing.T) {
	t.Log(TFIRST,TSECOND,TTHIRD)
	t.Log(TPI)
}
=== RUN   TestOne
    TestOne: case_test.go:14: 1 2 3
    TestOne: case_test.go:15: 3.1415926
--- PASS: TestOne (0.00s)

iota是默认的循环赋值的写法,可以看到TFIRST赋值为1,然后TSECOND以及后续都是依次+1,这个方式简化了很多。
这种方式不仅仅限定与数字,也支持位操作。

const (
	TONE = iota << 1
	TTWO
	TTHREE
)

func TestOne(t *testing.T) {
	t.Log(TONE, TTWO, TTHREE)
}
=== RUN   TestOne
    TestOne: case_test.go:20: 0 2 4
--- PASS: TestOne (0.00s)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值