Go学习笔记《The Way to Go》

Go学习笔记《The Way to Go》

关于格式化

  • gofmt:此工具将你的源代码格式化成符合官方统一标准的风格,在编译或提交版本管理系统之前使用 gofmt 来格式化你的代码。
  • Goland:在plugins里面添加File Watchers插件,然后在tool里面安如图添加go fmt 包
    在这里插入图片描述
  • gofmt xxx.go #对代码格式化后输出结果
    gofmt -w xxx.go 直接优化后保存到原来的代码文件

1、控制结构

(1)if ?else?

当 if 结构内有 break、continue、goto 或者 return 语句时,一般 else 部分

if condition {
    return x
}
return y

注意:不要同时在 if-else 结构的两个分支里都使用 return 语句,这将导致编译报错 function ends without a return statement 后期go语言版本有改进

(2)多函数值返回的错误

1、函数执行成功返回格式
值,true = pkg.func(value)
2、由于函数处理不成功
0/nil, false =pkg.func(value)
3、如果想要错误信息返回
可以使用一个erro类型的变量来代替作为第二个返回值
类型为

var err error

在这里插入图片描述

2、switch结构

  • 1、一旦成功地匹配到某个分支,在执行完相应代码后就会退出整个 switch 代码块
  • 2、如果在执行完每个分支的代码后,还希望继续执行后续分支的代码,可以使用 fallthrough 关键字来达到目的。
switch i {
  case 0: fallthrough
  case 1:
        function()...
  ...
      default:
      }    

上述代码执行完case 0代码块,之后还执行后续的代码,也就是说i==0的时候case 1的代码块也会被调用

  • 3、同时测试多个可能符合条件的值,使用逗号分割它们

例如

case val1, val2, val3

4、也可以case后面接判断条件,任何支持进行相等判断的类型都可以作为测试表达式的条件,包括 int、string、指针等

switch {
    case i < 0:
        f1()
    case i == 0:
        f2()
    case i > 0:
        f3()
}

5、在这里插入图片描述

3、for循环、break、continue

  • 1、在循环中同时使用多个计数器:
for i, j := 0, N; i < j; i, j = i+1, j-1 {}

注意:平行条件一条不满足,for循环就终止
在这里插入图片描述
运行结果
在这里插入图片描述

  • 2、break 结束最内层循环
  • 3、continue跳过此层循环,直接进入下个循环;且只能在for中使用

go中的函数

1、math的常见函数

标题

%格式化输出

print:直接输出;不支持格式化
println:直接输出+换行;不支持格式化
~~~~~~~~~~~~~~~~~~
print(“/n”); 换行

printf(“%c”,a);输出单个字符。

printf(“%d”,a);输出十进制整数。

printf(“%f”,a);输出十进制浮点数.

printf(“%o”,a);输出八进制数。

printf(“%s”,a);输出字符串。

printf(“%u”,a);输出无符号十进制数。

printf(“%x”,a);输出十六进制数。

printf(“a2 type: %T\n”, a2)

打印结果:a2 type: int

代码例子:

package main

import (
	"fmt"
	"runtime"
)

var prompt = "Enter a digit, e.g. 3 " + "or %s to quit."

func init() {
	if runtime.GOOS == "windows" {
		prompt = fmt.Sprintf(prompt, "Ctrl+Z, Enter")
	} else { //Unix-like
		prompt = fmt.Sprintf(prompt, "Ctrl+D")
	}
}

func main() {

	defertest()

	//变长参数函数调用
	//arr := []string{"1", "2", "3", "4"}
	//unconfirm(arr...)

	//指针例子
	//n := 0
	//reply := &n
	//Multiply(10, 5, reply)
	//fmt.Println("Multiply:", *reply)

	//反转数组
	//a := []int{1, 3, 5, 7, 9, 11, 13, 15}
	//print(revertArr(a))

	//反转字符串
	//str01 := []string{"o", "h", "m", "y", "g", "o"}
	//print(revertString(str01))

	//打印G字母金字塔
	//for_character()

	//switch-case:输入月份判断季节
	//fmt.Println(Season(2))
}

func defertest() {
	i := 0
	defer fmt.Println(i)
	i++
	return
}

//变长参数函数
func unconfirm(a ...string) {
	for _, v := range a {
		print(v)
	}
}

// this function changes reply:
func Multiply(a, b int, reply *int) {
	*reply = a * b
}

func revertArr(a []int) (b []int) {

	for i, j := 0, len(a)-1; i < j; i, j = i+1, j-1 {
		a[i], a[j] = a[j], a[i]
	}
	return a
}

func revertString(str01 []string) (b []string) {

	for left, right := 0, len(str01)-1; left < right; right-- {
		str01[left], str01[right] = str01[right], str01[left]
		left++
	}
	return str01
}

func for_character() {
	for i := 0; i < 25; i++ {
		for j := 0; j < i+1; j++ {
			fmt.Print("G")
		}
		fmt.Println()
	}
}

func Season(mouth int) (season string) {
	var s string
	switch mouth {
	case 3, 4, 5:
		s = "spring"
	case 6, 7, 8:
		s = "summer"

	case 9, 10, 11:
		s = "fall"

	case 12, 1, 2:
		s = "winter"

	default:
		s = "Input number dosen`t match the requirements"
	}
	return s
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值