本文为自学go语言之余做的笔记,以基础语法为主,防止以后使用的时候忘记一些基础语法,希望对大家也有用。
go语言的环境配置类似java,可参考:Go 语言环境安装 | 菜鸟教程
开发工具一般都是用jetbrains旗下的goland。
1、变量声明的几种方式:
package main
import "fmt"
func main() {
//变量声明
var s string
s = "123"
fmt.Println(s)
//快捷变量声明
var s1, s2 string
s1 = "123"
s2 = "456"
fmt.Println(s1, s2)
//简短变量声明
s3 := "1234"
fmt.Println(s3)
}
2、函数:
package main
import "fmt"
func main() {
//printString("123")
//addNumber(1,2)
//calculateNumber(1,2)
//showNumber(1,2,3)
//sayHello()
//feedMe(1,0)
//把addNumbers这个函数当作变量传入otherFunction这个函数中进行处理
print(otherFunction(addNumbers, 1, 2, 3))
}
// 无返回值
func printString(str string) {
println(str)
}
// 返回一个值
func addNumber(i1 int, i2 int) int {
return i1 + i2
}
// 返回多个值
func calculateNumber(i1 int, i2 int) (int, int) {
sum := i1 + i2
subtraction := i1 - i2
return sum, subtraction
}
// 定义不定参数函数
func showNumber(numbers ...int) {
//go语言中,如果定义的变量没有被使用,就会报错,因此不需要使用的变量用_,占位
for _, number := range numbers {
println(number)
}
}
// 具名返回值 增加代码可读性
func sayHello() (x, y string) {
x = "hello"
y = "world"
return x, y
}
// 递归调用
func feedMe(food int, eaten int) int {
eaten = food + eaten
if eaten >= 5 {
fmt.Printf("我吃饱了,我已经吃了 %d\n", eaten)
return eaten
}
fmt.Printf("我还没吃饱,我已经吃了 %d\n", eaten)
return feedMe(food, eaten)
}
// 函数作为参数传入另一个函数
func otherFunction(f func(numbers ...int) int, a int, b int, c int) int {
return f(a, b, c)
}
func addNumbers(numbers ...int) int {
total := 0
for _, number := range numbers {
total += number
}
return total
}
3、条件语句
package main
import "fmt"
func main() {
//println(isEven(3569))
//elseif(2)
switchCase(1)
}
// 判断奇数偶数 if else
func isEven(a int) bool {
if a%2 == 0 {
return true
} else {
return false
}
}
// if elseif
func elseif(i int) {
if i == 3 {
fmt.Println("i等于3")
} else if i == 2 {
fmt.Println("i等于2")
} else {
fmt.Println("i既不等于3也不等于2")
}
}
func switchCase(i int) {
switch i {
case 3:
fmt.Println("i等于3")
break
case 2:
fmt.Println("i等于2")
break
default:
fmt.Println("i既不等于3也不等于2")
break
}
}
4、for循环
package main
import "fmt"
func main() {
//for循环1
i := 0
for i < 10 {
i++
fmt.Println("i是", i)
}
//for循环2
for i := 0; i < 10; i++ {
fmt.Println("i是", i)
}
//for循环3 range
numbers := []int{1, 2, 3, 4}
for i, number := range numbers {
fmt.Println("索引值", i)
fmt.Println("数组中的值", number)
}
}
5、defer:
被defer所修饰的函数会在其他函数执行后,再执行,通常用于执行清理菜操作或确保操作完成后再执行另一个函数。
package main
import "fmt"
func main() {
//defer 函数返回前执行另一个函数
defer fmt.Println("我在所有的函数执行完,再执行")
fmt.Println("Hello world1")
fmt.Println("Hello world2")
}
被defer所修饰的函数的执行顺序是,先顺序执行其他函数,其他函数执行完之后,再逆序执行被defer所修饰的函数,如图:
package main
import "fmt"
func main() {
//defer执行顺序
defer fmt.Println("我是第一个defer声明")
defer fmt.Println("我是第二个defer声明")
defer fmt.Println("我是第三个defer声明")
defer fmt.Println("Hello world")
}