AICells 5 년 전
부모
커밋
51c6ee9531
7개의 변경된 파일229개의 추가작업 그리고 4개의 파일을 삭제
  1. +8
    -0
      src/docs/go并发相关.md
  2. +20
    -0
      src/learn/array.go
  3. +14
    -4
      src/learn/boiling.go
  4. +59
    -0
      src/learn/charCount.go
  5. +36
    -0
      src/learn/map.go
  6. +50
    -0
      src/learn/slice.go
  7. +42
    -0
      src/learn/struct.go

+ 8
- 0
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的相关信息

+ 20
- 0
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)
}

+ 14
- 4
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)
}
}
func hyhot(x, y float64) float64 {
rturn
math.Sqrt(x*x + y*Y)
}

+ 59
- 0
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)
}
}

+ 36
- 0
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()
}

+ 50
- 0
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))
}

+ 42
- 0
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{}{}
}
}

불러오는 중...
취소
저장