1.注释
//你好/**多行注释*/
2.定义变量
package mainimport "fmt"func main() {var name string = "定义的变量"fmt.Print(name)}
3.匿名变量
package mainimport "fmt"func main() {a, _ := test() //直接获取_, b := test() //直接获取 fmt.Println(a, b)
}/*
*
定义函数
*/
func test() (int, int) {return 100, 200
}
4.常量
5.iota
特殊常量
package mainfunc main() {const (a = iotabc = "aaasd"def = iotag)println(a, b, c, d, e, f, g)}
6.类型
起别名
7.运算符
8.键盘输入
9.变量交换
10.取变量地址
11.代码规范
12.if
和Java一样不说了
13.switch
14.for
15.字符串长度
package mainfunc main() {s := "nihao1"println(len(s))}
package mainimport "fmt"func main() {s := "nihao1"for i, i2 := range s {fmt.Printf("%d %c\n", i, i2)}}
16.函数定义
package mainfunc main() {println(add(1, 2))
}func add(a, b int) int {return a + b
}
17.可变参数
18.值传递
package mainimport "fmt"func main() {arr := [2]byte{1, 2}arr[1] = 3update(arr)fmt.Println("方法执行完后的数据:", arr)
}// 这是相当于重新 new 了一个 数组拷贝了值 只是将值传递所以改完外面的数组不会变化
func update(arr [2]byte) {fmt.Println("arr修改前的数据:", arr)arr[1] = 100fmt.Println("arr修改后的数据:", arr)
}
19.引用传递
package mainimport "fmt"// 引用传递
func main() {//切片 ,可以扩容的数组 看似java的集合s1 := []int{1, 2, 3, 4}updateYin(s1)fmt.Println("s2调用后的数据:", s1)}func updateYin(s2 []int) {fmt.Println("s2修改前的数据:", s2)s2[1] = 100fmt.Println("s2修改后的数据:", s2)}
go里 数组是 值传递 相当于基本类型
20.函数变量作用域
函数体内定义与函数外相同变量名的 取就近的 变量进行操作
package mainimport "fmt"var num = 1// 引用传递
func main() {//切片 ,可以扩容的数组 看似java的集合s1 := []int{1, 2, 3, 4}updateYin(s1)fmt.Println("s2调用后的数据:", s1)j := jmj{}j.age = 1j.name = "基哥"num := 2fmt.Printf("结构体: %p\n ", &j)fmt.Println("全局变量", num)
}func updateYin(s2 []int) {fmt.Println("s2修改前的数据:", s2)s2[1] = 100fmt.Println("s2修改后的数据:", s2)fmt.Println("全局变量", num) //全局的}type jmj struct {name stringage int
}
21.defer
22.函数式编程
跟kotlin一样
23.闭包
就是一个函数里 构建另一个函数并且操作外层函数的内部局部变量,并返回里面构建的这个函数,给外界调用,就是闭包结构
每次调用外层函数的时候,另一个外层函数的内部局部变量会被销毁,但是在之前回调的闭包函数还引入它的之前引入的外层函数的局部变量,即可继续使用。