这里写自定义目录标题
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
}