diff --git a/src/docs/go并发相关.md b/src/docs/go并发相关.md new file mode 100644 index 0000000..f825695 --- /dev/null +++ b/src/docs/go并发相关.md @@ -0,0 +1,8 @@ +# goroutine特性 + go的执行是非阻塞的, 不会等待 + go后面的函数返回值会被忽略。 + 调度器不能保证多个goroutine的执行次序 + 没有父子goroutine的概念 所有的goroutine是平等的被调度和执行的 + Go程序在执行的时候会单独为main函数创建一个goroutine, 遇到其他go关键字时再去创建其他的goroutine + Go没有暴露goroutine Id给用户, 所以不能在一个goroutine里面显式的地操作另外一个gorontine, + 不过runtine包提供了一些函数访问和设置gorontine的相关信息 \ No newline at end of file diff --git a/src/learn/array.go b/src/learn/array.go new file mode 100644 index 0000000..bfa8098 --- /dev/null +++ b/src/learn/array.go @@ -0,0 +1,20 @@ +package main + +import "fmt" + +func main() { + var a [3]int + fmt.Println(a[0]) + fmt.Println(a[len(a)-1]) + for i, v := range a { + fmt.Println("%d %d \n", i, v) + + } + //var tet , bb int = 1, 2 + var (tet int; bb string) + print(tet, bb) + months := [...]string{1:"January", 12:"December"} + Q2 := months[4:7] + fmt.Println("%T %T", months, Q2) + +} diff --git a/src/learn/boiling.go b/src/learn/boiling.go index 9eb97bc..3885a70 100644 --- a/src/learn/boiling.go +++ b/src/learn/boiling.go @@ -1,11 +1,21 @@ package main -import "fmt" +import ( + "fmt" + "math" +) + const boilingF = 212.0 -func main(){ +func main() { var F = boilingF - var c = (F - 32) * 5 /9 + var c = (F - 32) * 5 / 9 fmt.Printf("boiling point = %g F or %g C\n", F, c) + hyhot(1.1, 2.2) + +} -} \ No newline at end of file +func hyhot(x, y float64) float64 { + rturn + math.Sqrt(x*x + y*Y) +} diff --git a/src/learn/charCount.go b/src/learn/charCount.go new file mode 100644 index 0000000..61fa89d --- /dev/null +++ b/src/learn/charCount.go @@ -0,0 +1,59 @@ +package main + +import ( + "bufio" + "fmt" + "io" + "os" + "unicode" + "unicode/utf8" +) + +var g = make(map[string]map[string]map[string]bool) +var s = []uint{1} + + +func main() { + counts := make(map[rune]int) + var utflen [utf8.UTFMax + 1]int + invalid := 0 + + in := bufio.NewReader(os.Stdin) + for { + r, n, err := in.ReadRune() + if err == io.EOF { + break + } + + if err != nil { + fmt.Fprintf(os.Stderr, "charcount:%v\n") + os.Exit(1) + } + if r == unicode.ReplacementChar && n == 1 { + invalid++ + continue + + } + counts[r]++ + utflen[n]++ + } + fmt.Printf("rune\tcount\n") + for c, n := range counts { + fmt.Printf("%q\t %d\n", c, n) + + } + fmt.Print("\nlen\tcount\n") + for i, n := range utflen { + if i > 0 { + fmt.Printf("%d\t%d\n", i, n) + + } + + } + if invalid > 0 { + fmt.Printf("\n%d invalid UTF-8 characters\n", invalid) + + } + + +} diff --git a/src/learn/map.go b/src/learn/map.go new file mode 100644 index 0000000..80448fa --- /dev/null +++ b/src/learn/map.go @@ -0,0 +1,36 @@ +package main + +import "fmt" + +func test() { + ages := map[string]int{ + "alice": 31, + "charlie": 34, + } + ages["alice"] = 31 + ages["charlie"] = 34 + + // 创建一个空map + ages = map[string]int{} + + //使用delete函数从字典中删除一个元素 + delete(ages, "alice") + // 即使键不存在 删除操作也是安全的 + // map使用给定的键来查找元素 + // 如果对应的元素不存在 则返回类型的零值 + //map不是一个变量 因此不能获取他的地址 原因是可能会重新散列 到新的存储位置 这就就可能导致获取的地址无效 + age, ok := ages["gfgfgfgf"] + fmt.Println("%v %v", age, ok) + +} + +var m = make(map[string]int) + +func k(list []string) string { return fmt.Sprintf("%q", list) } +func Add(list []string) { m[k(list)]++ } +func Count(list []string) int { return m[k(list)] } + +func main() { + test() + +} diff --git a/src/learn/slice.go b/src/learn/slice.go new file mode 100644 index 0000000..d71c2e6 --- /dev/null +++ b/src/learn/slice.go @@ -0,0 +1,50 @@ +package main + +import "fmt" + +func nonempty(strings []string) []string { + i := 0 + for _, s := range strings { + if s != "" { + strings[i] = s + i++ + + } + + } + return strings[:i] + +} + +func nonempty2(strings []string) []string { + + out := strings[:0] + for _, s := range strings { + if s != "" { + out = append(out, s) + + } + + } + return out +} + +func remove(slice []int, i int) []int { + copy(slice[i:], slice[i+1:]) + return slice[:len(slice)-1] +} + +func remove2(slice []int, i int) []int{ + slice[i] = slice[len(slice) - 1] + return slice[:len(slice) - 1] + +} + +func main(){ + s := []int{5, 6, 7, 8, 9} + + fmt.Println(s[:len(s)]) + + fmt.Println(remove2(s, 2)) + +} \ No newline at end of file diff --git a/src/learn/struct.go b/src/learn/struct.go new file mode 100644 index 0000000..6e67195 --- /dev/null +++ b/src/learn/struct.go @@ -0,0 +1,42 @@ +package main + +import ( + "fmt" + "time" +) + +type Emplyee struct{ + Id int + Name string + Address string + Dob time.Time + Position string + Salary int + ManagerId int +} + +var dilbert Emplyee + + +func test(){ + dilbert.Salary -= 5000 + posPtr := &dilbert.Position + *posPtr = "fdfdsfdfd" + *posPtr + + // 点号同样可以用在结构体指针上 + var emPtr *Emplyee = &dilbert + emPtr.Position += "fddddddd" + + // 等价于下面这句 + (*emPtr).Position += "fddddddd" + + //没有任何成员变量的结构体成为空结构体 + set := make(map[string]struct{}) + if _, ok := set[str]; !ok{ + set[str] = struct{}{} + + } + +} + +