1.变量的赋值
package main //引入包 import "fmt" //包内变量赋值(不能使用 :=) var ( a = 1 b = true c = "我是你爸爸" ) //变量赋值的方法(规定类型) func aaa() { //可以规定类型 var a, b, c int = 1, 2, 3 fmt.Println(a, b, c) } //变量赋值的方法(不规定类型) func bbb() { //可以不规定类型 var d, e, f = 1, true, "我是你爷" fmt.Println(d, e, f) } //变量赋值的方法(简单,推荐) var 等价于 := func ccc() { //首次变量定义 j, h, k := 2, true, "我是你奶奶" //其他变量赋值 j = 12121212 fmt.Println(j, h, k) } func main() { fmt.Print("hello, world\n") aaa() bbb() ccc() } //Println和Print基本类似,但是Println可以换行,Print不会换行
结果展示:
2.常量与枚举
package main import "fmt" //常量也可以定义在外面 const ( d, e, f = 4, 5, 6 ) //常量的定义 func chang() { const ( a, b, c = 111, 2222, 33333 ) g := a * d fmt.Println(a, b, c, g) } func main() { chang() //枚举iota const ( a = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 j //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 k //100 iota +=1 h = iota //9,恢复计数 _ //10 _ //11 i //12 ) // 1 << (10 * iota)中 ,iota是枚举类型的自增型,0,1,2,3,4.... // << 则代表1的二进制转化后,向左面移动(10 * iota)位,剩余数位用0补全(相当于直接后面补了(10 * iota)个0) // 最后再转化成10进制的值 const ( aa = 1 << (10 * iota) bb cc dd ee ff ) fmt.Println(a, b, c, d, e, j, f, g, k, h, i) fmt.Println(aa, bb, cc, dd, ee, ff) }
结果展示:
3.条件语句
package main import ( "fmt" "io/ioutil" ) //在函数中的判断 func ffff(v int) int { if v >= 100 { return 100 } else if v >= 200 { return 200 } else { return v } } func bbbb(number int) string { g := "" switch { case number == 1: g = "A" case number == 2: g = "B" case number == 3: g = "C" default: return "我不知道了" } return g } func cccc(number int) string { switch number { case 1, 0: return "AA" case 2, 3: return "BB" case 4, 5: case 7, 8: return "CC" default: return "我不会了" } return "结局了!!" } func main() { fmt.Println(ffff(90)) // 查找文件并读取111.txt const name = "111.txt" // ioutil.ReadFile返回的参数有两个,即:内容和错误信息 content, err := ioutil.ReadFile(name) if err != nil { fmt.Println(err) } else { fmt.Printf("%s\n", content) } //这样的写法中,content是不能在外部调用的,他的生命周期只有在if中 if content, err := ioutil.ReadFile(name); err != nil { fmt.Println(err) } else { fmt.Printf("%s\n", content) } fmt.Println(bbbb(651561)) fmt.Println(cccc(4)) fmt.Println(cccc(7)) }
结果展示:
4.循环
package main import ( "fmt" "os" "strconv" ) //二进制的转化 func er(num int) string { res := "" //没有起始条件,但是";"需要写 for ; num > 0; num /= 2 { lsb := num % 2 //转化为string res = strconv.Itoa(lsb) + res } return res } //每句读文件爱你 func file(name string) { file, err := os.Open(name) if err != nil { //打断并报错 panic(err) } for { fmt.Println(1111) } fmt.Printf("%s\n", file) } func main() { // a := 0 // for i := 0; i < 5; i++ { // fmt.Println(i) // } // for a < 5 { // fmt.Println(a) // a++ // } fmt.Println( er(5), ) file("11.txt") }
结果展示:
5.函数
package main import ( "fmt" ) //函数的表达式 func aaa(a, b int, p string) int { switch p { case "+": return a + b case "-": return a - b case "*": return a * b case "/": //调用其他的函数,'_'表示不需要的参数 c, _ := ccc(a, b) return c default: panic("我错了,我传的是:" + p) } } //返回两个参数 func eee(a, b int, op string) (int, error) { switch op { case "+": return a + b, nil case "-": return a - b, nil case "*": return a * b, nil case "/": return a / b, nil default: return 0, fmt.Errorf("你错了吧: %s", op) } } //函数传递两个数值 func bbb(a, b int) (int, int) { return a / b, a % b } //函数输出数值定义 func ccc(a, b int) (c, d int) { c = a / b d = a % b return c, d } func ppp(a, b int) int { return a * b } //函数作为参数,调用一个返回值 func ddd(op func(int, int) int, a, b int) int { return op(a, b) } //函数作为参数,调用两个返回值 func aa(op func(a, b int, op string) (int, error), c, d int, pp string) (int, error) { return op(c, d, pp) } func main() { fmt.Println(aaa(12, 2, "*")) fmt.Println(bbb(13, 3)) c, d := ccc(13, 3) fmt.Println(c, d) fmt.Println(aaa(12, 2, "/")) fmt.Println(eee(12, 2, "@")) // 外部判断 if reulet, err := eee(12, 2, "@"); err != nil { fmt.Println("错误:", err) } else { fmt.Println(reulet) } //调用函数 fmt.Println(ddd(ppp, 3, 4)) fmt.Println(aa(eee, 13, 4, "*")) }
结果展示:
6.指针
指针的定义指针就是一个存放地址的变量
当指针指向某个变量
这时这个指针里就存放了那个变量的地址
同时可以利用指针直接取变量中的值用 只要在指针前加 * 就是取其
真值了(也就是被指向的变量的值)
举个例子
int i=0,*p;
声明了一个 int 类型的 变量i和指针p
假设i在内存中所存在的地址为aaaaa(随便写的)
p->i 就是使指针p指向i
也就是说 指针p中存放了aaaaa这个地址
当你操作这个p时就是直接操作了aaaaa这个地址中存放的东西
间接操作了变量i,
这就是指针的作用
package main import ( "fmt" ) //一般交换 func aaa(a, b int) (int, int) { return b, a } //利用指针交换 func bbb(a, b *int) { *a, *b = *b, *a } //增加 func add(a *int) int { *a = *a + 1 return *a } func main() { a := 2 //定义指针b=指针a, fmt.Println(&a) == fmt.Println(b) //&是可以把具体的值转化为指针 //*可以把指针转化对应的值 var b *int = &a *b = 3 fmt.Println(*b) fmt.Println(a) fmt.Println(add(&a)) //a的 结果是3 // fmt.Println(a) // fmt.Println(aaa(3, 6)) // //先转换 // c := 4 // d := 6 // bbb(&c, &d) // //再输出 // fmt.Println(c, d) }