@ -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 | package main | ||||
import "fmt" | |||||
import ( | |||||
"fmt" | |||||
"math" | |||||
) | |||||
const boilingF = 212.0 | const boilingF = 212.0 | ||||
func main(){ | |||||
func main() { | |||||
var F = boilingF | 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) | 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{}{} | |||||
} | |||||
} | |||||