@ -0,0 +1,8 @@ | |||
# goroutine特性 | |||
go的执行是非阻塞的, 不会等待 | |||
go后面的函数返回值会被忽略。 | |||
调度器不能保证多个goroutine的执行次序 | |||
没有父子goroutine的概念 所有的goroutine是平等的被调度和执行的 | |||
Go程序在执行的时候会单独为main函数创建一个goroutine, 遇到其他go关键字时再去创建其他的goroutine | |||
Go没有暴露goroutine Id给用户, 所以不能在一个goroutine里面显式的地操作另外一个gorontine, | |||
不过runtine包提供了一些函数访问和设置gorontine的相关信息 |
@ -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) | |||
} |
@ -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) | |||
} |
@ -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) | |||
} | |||
} |
@ -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() | |||
} |
@ -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)) | |||
} |
@ -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{}{} | |||
} | |||
} | |||