所有的代码都在这里了 ↑,内附了github地址,可以直接下载!
github地址: (这里直接跳转也可以)
1.变量的认识
package mainimport "fmt"// 他可以自动检测类型// 外部声明不可以使用 := 必须声明varvar ( aa = true bb = 123 cc = "string" )func variableZeroValue () { // 可以这么声明变量 var a int var s string fmt.Printf("%d %q\n",a,s)}func variableInitValue() { // 也可以这样 var a,b int = 3,4 var s string = "abc" fmt.Println(a,b,s)}func variableTypeDeduction() { // 也可以这样 var a,b,c,d = 3,4,true,"def" var s = "abc" fmt.Println(a,b,c,d,s)}func variableShorter() { // 也可以这样 a,b,c,d := 1,2,true,"string" fmt.Println(a,b,c,d)}func main() { // 主函数操作如下 fmt.Println("Hello, World!") variableZeroValue() variableInitValue() variableTypeDeduction() variableShorter()}vscode 打印如下:C:go\src\google_go>go run basic.goHello, World!0 ""3 4 abc3 4 true def abc1 2 true string复制代码
2.内置对象的认识
package mainimport "fmt"// 内置变量类型// bool , string// (u)int(整形),(u)int8,(u)int16,(u)int32(4字节),(u)int64,uintptr// byte(8字节) , rune(32字节)// float32,float64(浮点数) ,complex64,complex128(复数)// 强制类型转换(都是强制类型转换)// var a,b int = 3,4// var c int// c = int(math.Sqrt(float64(a*a+b*b)))// 枚举func enums() { // iota 自增 const ( java = iota javaScript g0 ) fmt.Println(java,javaScript,g0) const ( b = 1 << (10 * iota) kb cb ) fmt.Println(b,kb,cb)}// 常量func main() { const name = "shan_yi" const age = 22 fmt.Println(name,age) enums()}vscode 控制台打印C:\go\src\google_go>go run 2typeof.goshan_yi 220 1 21 1024 1048576复制代码
3.if-else
package mainimport "fmt"// if elsefunc main() { aa := 1 bb := 2 // 第一种写法 // err := true // if err { // fmt.Println(aa) // } else { // fmt.Println(bb) // } // 第二种写法(写法比较傻haha。。。) if err := true; err { fmt.Println(aa) } else { fmt.Println(bb) }}复制代码
4.switch
package mainimport "fmt"// 我们不需要写break;// 系统自动break;func main() { a := 60 call := "" switch { case a < 60: call = "E" case a < 70: call = "D" case a < 80: call = "C" case a < 90: call = "B" case a < 100: call = "A" default: panic(fmt.Sprintf("Error: %d", a)) } fmt.Println(call)}// D复制代码
5.for
package mainimport "fmt"func main() { num := 0 for i:=0;i<=100;i++{ num += i } fmt.Println(num)}// 5050复制代码
6.函数
package mainimport ( "fmt" "math" "reflect" "runtime")func eval(a , b int, op string) int { switch op { case "+": return a + b case "-": return a - b default: panic("error:" + op) }}func apply(op func(int, int) int, a, b int) int { p := reflect.ValueOf(op).Pointer() opName := runtime.FuncForPC(p).Name() fmt.Printf("call function %s with args (%d, %d)",opName,a,b) return op(a, b)}func div(a,b int) (c,d int) { return a / b, a % b}func pow(a,b int) int { return int(math.Pow(float64(a), float64(b)))}// 可变参数func sum(numbers ...int) int { s := 0 for i := range numbers { s += numbers[i] } return s}func main() { fmt.Println(eval(1,2,"+")) c, d := div(23,5) fmt.Println(c, d) fmt.Println(apply(pow,3,4)) fmt.Println(sum(1,2,3,4,5))}复制代码
7.指针
package mainimport "fmt"// 值传递 没有引用传递 -> 指针修改//func swap(a,b *int) { // *b, *a = *a, *b//}////func main() { // a,b := 3,4// swap(&a, &b)// fmt.Println(a,b)//}// 换一种方式交换两个的值func swap(a,b int) (int, int) { return b, a}func main() { a,b := 3,4 a,b = swap(a, b) fmt.Println(a,b)}复制代码
8.数组的认识
package mainimport "fmt"func printArray(arr [5]int) { // 值类型数组 for i, v:= range arr{ fmt.Println(i,v) }}func main() { // 数组值类型 var arr1 [5]int arr2 := [3]int{ 1,2,3} // ... 编译器来决定个数 arr3 := [...]int{ 2,4,6,8,10} fmt.Println(arr1,arr2,arr3) // 二维数组 // 4个数组,5个内容 var grid [4][5]int fmt.Println(grid) //[0 0 0 0 0] [1 2 3] [2 4 6 8 10] //[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]] // 测试循环 //for i:= 0; i < len(arr3);i++ { // fmt.Println(arr3[i]) //} //2 //4 //6 //8 //10 // or // range 获取数组下标 // 可以通过 _ 省略变量 // 任何地方都可以 使用 _ 省略变量 //for i, v:= range arr3{ // fmt.Println(i,v) //} //0 2 //1 4 //2 6 //3 8 //4 10 // range // 1. 美观,意义明确 // 2. c++:没有类似功能 // 3. java/python:只能for each value,不能同时获得 i,v printArray(arr1)}复制代码
9.切片
package mainimport "fmt"func updateSlice(arr []int) { arr[0] = 100}func main() { arr := [...]int{ 0,1,2,3,4,5,6,7} fmt.Println("dataArray:",arr[2:6]) //dataArray: [2 3 4 5] fmt.Println("dataArray:",arr[2:]) //dataArray: [2 3 4 5 6 7] fmt.Println("dataArray:",arr[:6]) //dataArray: [0 1 2 3 4 5] fmt.Println("dataArray:",arr[:]) //dataArray: [0 1 2 3 4 5 6 7] //Reslice a1 := arr[2:] updateSlice(a1) fmt.Println(a1) //[100 3 4 5 6 7] fmt.Println(arr) //[0 1 100 3 4 5 6 7] // slice 底层view 向后扩展 // [3,6] // [3,4] //arr := o,1,2,3,4,5,6,7 arr1 := append(a1, 8) arr2 := append(arr1, 9) arr3 := append(arr2, 10) fmt.Println(arr1,arr2,arr3,arr) //[100 3 4 5 6 7 8] [100 3 4 5 6 7 8 9] [100 3 4 5 6 7 8 9 10] [0 1 100 3 4 5 6 7]}复制代码
10.slice 操作
package mainimport "fmt"func printSlice(s []int) { fmt.Println(len(s),cap(s))}func main() { var s []int // zero value for slice is nil for i:= 0;i<10;i++{ s = append(s, 2*i+1) } fmt.Println(s) //[1 3 5 7 9 11 13 15 17 19] printSlice(s) //10 16 s1 := make([]int,10,16) printSlice(s1) //10 16 copy(s1, s) fmt.Println(s1) //[1 3 5 7 9 11 13 15 17 19]}复制代码
11.map
package mainimport "fmt"func main() { m := map[string]string{ "name": "shan_Yi", "age": "1997", "sex": "男", } fmt.Println(m) m2:=make(map[string]int) // empty map var m3 map[string]int // nil fmt.Println(m2,m3) //map[] map[] for k,v := range m { fmt.Println(k,v) } // map hash map 无序 // 如果没有存在key 则为 zero value if causeName, ok := m["colors"]; ok { fmt.Println(causeName) } else { fmt.Println("key does not exist") } fmt.Println("delete values") name, ok := m["name"] fmt.Println(name,ok) delete(m,"name") name, ok = m["name"] fmt.Println(name,ok) // golang 控制台 //map[age:1997 name:shan_Yi sex:男] //map[] map[] //name shan_Yi //age 1997 //sex 男 //key does not exist //delete values //shan_Yi true // false}复制代码
12. map_
package mainimport "fmt"func lengthOfNonRepeatingSubStr(s string) int { // byte 英文字符 阿斯克码 lastOccurred := make(map[byte]int) start := 0 maxLength := 0 for i,ch := range []byte(s) { if lastI,ok := lastOccurred[ch]; ok && lastI >= start { start = lastI + 1 } if i - start + 1 > maxLength { maxLength = i - start + 1 } lastOccurred[ch] = i } return maxLength}func main() { // 寻找最长不含有重复字符的子串 fmt.Println(lengthOfNonRepeatingSubStr("abcabcbb")) fmt.Println(lengthOfNonRepeatingSubStr("bbbbbbbb")) fmt.Println(lengthOfNonRepeatingSubStr("pwwkew")) fmt.Println(lengthOfNonRepeatingSubStr("")) fmt.Println(lengthOfNonRepeatingSubStr("b")) fmt.Println(lengthOfNonRepeatingSubStr("abcdefg")) fmt.Println(lengthOfNonRepeatingSubStr("易山博客测试")) fmt.Println(lengthOfNonRepeatingSubStr("一一一二"))}golang313017115复制代码
13.string
package mainimport ( "fmt" "unicode/utf8")func main() { s:= "hello易山" // UTF-8 english1 china3 for _,b := range []byte(s) { fmt.Printf("%X " , b) } fmt.Println() for i,ch := range s { // ch is a rune fmt.Printf("(%d %X)",i,ch) } fmt.Println() fmt.Println(utf8.RuneCountInString(s)) //68 65 6C 6C 6F E6 98 93 E5 B1 B1 //(0 68)(1 65)(2 6C)(3 6C)(4 6F)(5 6613)(8 5C71) //7}复制代码
14,面向对象
go 语言仅支持封装,不支持继承和多态
package mainimport "fmt"type treeNoe struct { value int left,right *treeNoe}func (node treeNoe) print() { fmt.Print(node.value, " ")}func (node *treeNoe) setValue(value int) { node.value = value}func (node *treeNoe) traverse() { if node == nil { return } // 中序便利 node.left.traverse() node.print() node.right.traverse()}// 公创函数func createNode(value int) *treeNoe { return &treeNoe{value:value}}func main() { var root treeNoe root = treeNoe{value:3} root.left = &treeNoe{} root.right = &treeNoe{ 5, nil,nil} root.right.left = new(treeNoe) root.left.right = createNode(2) nodes := []treeNoe{ {value:3}, {}, { 6,nil,nil}, } fmt.Println(root,"\n",nodes) root.right.left.setValue(4) //root.right.left.print() //fmt.Println() // //Proot := &root //Proot.print() //Proot.setValue(100) //Proot.print() root.traverse()}复制代码
15.包和封装
16.扩充已有类型
17.接口的实现
18.实现简单的一个接口请求
19.函数式编程闭包
package mainimport "fmt"func adder() func(int) int { sum := 0 return func(v int) int { sum += v return sum }}type iAdder func(int) (int, iAdder)func adder2(base int) iAdder { return func(v int) (int, iAdder) { return base + v, adder2(base + v) }}func main() { //a := adder() //for i:=0;i<10;i++{ // fmt.Println(a(i)) //} a := adder2(0) for i:=0;i<10;i++ { var s int s, a = a(i) fmt.Printf("%d\n", i, s) }}复制代码
20.斐波那契数列(闭包)
这里就放一张我在 力扣 做的解答题
21.服务器统一处理
当我们启动服务的时候就是这样的(正确的)
错误的
Blog: 易山博客
版权:本文仅限学习,不涉及商业学习(转载需注明出处)
出处:易山博客 URL:https:ladies.ren/