@ -0,0 +1,4 @@ | |||
# 打印堆栈 | |||
fmt.Printf("%s", debug.Stack()) | |||
debug.PrintStack() | |||
可以通过 debug.PrintStack() 直接打印,也可以通过 debug.Stack() 方法获取堆栈然后自己打印。 |
@ -0,0 +1,3 @@ | |||
module goUtils | |||
go 1.12 |
@ -0,0 +1,33 @@ | |||
package main | |||
import ( | |||
"fmt" | |||
"math" | |||
) | |||
var XX = 200 | |||
const YY = 300 //常量不会分配地址 | |||
func main() { | |||
const ( | |||
x uint16 = 120 | |||
y | |||
s | |||
s1 = "abc" | |||
z | |||
) | |||
println(x, " ", y, " ", s, " ", s1, " ", z) | |||
const ( | |||
a = iota | |||
a1 | |||
b float32 = iota | |||
c | |||
) | |||
println(a, " ", a1, " ", b, " ", c) | |||
// println(&XX, &YY) // error | |||
fmt.Printf("%v %v \n", math.MaxUint8, math.MaxInt64) | |||
} |
@ -1,23 +1,25 @@ | |||
package main | |||
import( | |||
import ( | |||
"fmt" | |||
"io/ioutil" | |||
"net/http" | |||
"os" | |||
) | |||
func main(){ | |||
for _, url := range os.Args[1:]{ | |||
func main() { | |||
for _, url := range os.Args[1:] { | |||
resp, err := http.Get(url) | |||
if err != nil{ | |||
if err != nil { | |||
fmt.Fprintf(os.Stderr, "fetch:%v\n", err) | |||
os.Exit(1) | |||
} | |||
b, err := ioutil.ReadAll(resp.Body) | |||
resp.Body.Close() | |||
if err != nil{ | |||
if err != nil { | |||
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err) | |||
os.Exit(1) | |||
} | |||
fmt.Printf("IMY****\n %s\n", b) | |||
} | |||
} | |||
} |
@ -0,0 +1,39 @@ | |||
package main | |||
func tets() (a int, s string, e error) { | |||
return 0, "", nil | |||
} | |||
func test(f func()) { | |||
f() | |||
} | |||
func makeFun() func(int, int) int { | |||
return func(x, y int) int { | |||
return x - y | |||
} | |||
} | |||
func main() { | |||
tets() | |||
// 直接调用匿名函数 | |||
func(s string) { | |||
println("the string is ", s) | |||
}("hello world") | |||
// 将匿名函数复制给变量 | |||
add := func(x, y int) int { | |||
return x + y | |||
} | |||
println("the add ret is ", add(1, 2)) | |||
// 作为参数 | |||
test(func() { println("this is one func") }) | |||
// 作为返回值 | |||
sub := makeFun() | |||
println("the sub fun retrun is ", sub(10, 1)) | |||
} |
@ -1,6 +1,7 @@ | |||
package learn | |||
import "fmt" | |||
func main(){ | |||
func main() { | |||
fmt.Println("hello world!") | |||
} |
@ -0,0 +1,25 @@ | |||
package main | |||
import "fmt" | |||
type N int | |||
func (n N) value() { | |||
n++ | |||
fmt.Println("v: %p %v \n ", &n, n) | |||
} | |||
func (n *N) pointer() { | |||
(*n)++ | |||
fmt.Println("v: %p %v \n ", n, *n) | |||
} | |||
func main() { | |||
var a N = 25 | |||
p := &a | |||
p2 := &p | |||
(*p2).value() | |||
(*p2).pointer() | |||
} |
@ -0,0 +1,37 @@ | |||
package main | |||
import ( | |||
"os" | |||
"os/signal" | |||
"syscall" | |||
) | |||
func main() { | |||
ch := make(chan os.Signal, 1) | |||
//signal.Notify(ch, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGSTOP, syscall.SIGUSR1) | |||
signal.Notify(ch) | |||
for { | |||
sig := <-ch | |||
switch sig { | |||
case syscall.SIGHUP: | |||
println("SIGSTOP") | |||
return | |||
case syscall.SIGQUIT: | |||
println("SIGQUIT") | |||
return | |||
case syscall.SIGTERM: | |||
println("SIGTERM") | |||
return | |||
case syscall.SIGSTOP: | |||
println("SIGSTOP") | |||
return | |||
case syscall.SIGUSR1: | |||
println("SIGUSR1") | |||
return | |||
default: | |||
println("what is this ", sig) | |||
return | |||
} | |||
} | |||
} |
@ -0,0 +1,9 @@ | |||
package main | |||
import "os" | |||
func main() { | |||
hostname, err := os.Hostname() | |||
println(hostname, " ", err) | |||
} |
@ -0,0 +1,41 @@ | |||
package main | |||
import ( | |||
"os" | |||
"strconv" | |||
"time" | |||
) | |||
var share int = 0 | |||
var Cnt int | |||
func GSet(index int, ch chan struct{}) { | |||
for i := 0; i < Cnt; i++ { | |||
//println("cur index ", index, "cur vale", share) | |||
share += 1 | |||
ch <- struct{}{} | |||
} | |||
} | |||
func main() { | |||
Num, _ := strconv.Atoi(os.Args[1]) | |||
Cnt, _ = strconv.Atoi(os.Args[2]) | |||
println(Num, Cnt) | |||
ch := make(chan struct{}) | |||
start := time.Now() | |||
for i := 0; i < Num; i++ { | |||
go GSet(i, ch) | |||
} | |||
GetNum := 0 | |||
for { | |||
<-ch | |||
GetNum++ | |||
//println("add one num ", GetNum) | |||
if GetNum >= Cnt*Num { | |||
break | |||
} | |||
} | |||
use := time.Since(start) | |||
println("test over ", share, "should be ", Cnt*Num, "use time ", use) | |||
} |