SpecialPrint特殊的输出结果

时间:2020-12-18 12:58:16   收藏:0   阅读:3

SpecialPrint特殊的输出结果

技术图片

循环range问题

package main

import "fmt"

type student struct {
	Name string
	Age  int
}

func main() {
	m := make(map[string]*student)
	stus := []student{
		{Name: "zhou", Age: 24},
		{Name: "li", Age: 23},
		{Name: "wang", Age: 22},
	}
	// 错误写法
	for _, stu := range stus {
		m[stu.Name] = &stu
	}

	for _, stu := range stus {
		stu.Age = stu.Age + 10
	}

	for k, v := range m {
		println(k, "=>", v.Age, v.Name)
	}

	fmt.Println("================")

	//正确
	for i := 0; i < len(stus); i++ {
		m[stus[i].Name] = &stus[i]
	}
	for k, v := range m {
		println(k, "=>", v.Name, v.Age)
	}
}

# 输出
zhou => 22 wang
li => 22 wang
wang => 22 wang
================
zhou => zhou 24
li => li 23
wang => wang 22

defer执行顺序

package main

import (
	"fmt"
	"log"
)

func main() {
	defer_call()
}

func defer_call() {
	defer func() { fmt.Println("打印前") }()
	defer func() { fmt.Println("打印中") }()
	defer func() { fmt.Println("打印后") }()

	panic("触发异常")
}

# 输出
打印后
打印中
打印前
panic: 触发异常

goroutine 1 [running]:
main.defer_call()
        D:/gohere/go-newbase/test_go/for/one/main.go:16 +0x85
main.main()
        D:/gohere/go-newbase/test_go/for/one/main.go:8 +0x27
exit status 2

defer输出进阶版

package main

import (
	"fmt"
)

func calc(index string, a, b int) int {
	ret := a + b
	fmt.Println(index, a, b, ret)
	return ret
}

func main() {
	a := 1
	b := 2
	defer calc("1", a, calc("10", a, b))
	a = 0
	defer calc("2", a, calc("20", a, b))
	b = 1
}

# 输出
10 1 2 3
20 0 2 2
2 0 2 2
1 1 3 4

go执行的随机性和闭包

package main

import (
	"fmt"
	"runtime"
	"sync"
)

func main() {
	runtime.GOMAXPROCS(1)
	wg := sync.WaitGroup{}
	wg.Add(20)
	for i := 0; i < 10; i++ {
		go func() {
			fmt.Println("A: ", i)
			wg.Done()
		}()
	}
	for i := 0; i < 10; i++ {
		go func(i int) {
			fmt.Println("B: ", i)
			wg.Done()
		}(i)
	}
	wg.Wait()
}

# 输出
B:  9
A:  10
A:  10
A:  10
A:  10
A:  10
A:  10
A:  10
A:  10
A:  10
A:  10
B:  0
B:  1
B:  2
B:  3
B:  4
B:  5
B:  6
B:  7
B:  8

go组合继承

package main

import "fmt"

type People struct{}

func (p *People) ShowA() {
	fmt.Println("showA-People")
	p.ShowB()
}
func (p *People) ShowB() {
	fmt.Println("showB-People")
}

type Teacher struct {
	People
}

func (t *Teacher) ShowB() {
	fmt.Println("teacher showB")
}

func main() {
	t := Teacher{}
	t.ShowA()
}

# 输出
showA-People
showB-People

select随机性

package main

import (
	"fmt"
	"runtime"
)

func main() {
	runtime.GOMAXPROCS(1)
	int_chan := make(chan int, 1)
	string_chan := make(chan string, 1)
	int_chan <- 1
	string_chan <- "hello"
	select {
	case value := <-int_chan:
		fmt.Println("int:", value)
	case value := <-string_chan:
		fmt.Println("string:", value)
	}
}

# 输出
都有可能

make默认值和append(这个很奇怪)

package main

import (
	"fmt"
)
func main() {
	s := make([]int, 5)
	s = append(s, 1, 2, 3)
	fmt.Println(s)
}

# 输出
[0 0 0 0 0 1 2 3]

interface内部结构

package main

import (
    "fmt"
)

type People interface {
    Show()
}

type Student struct{}

func (stu *Student) Show() {

}

func live() People {
    var stu *Student
    return stu
}

func main() {
    if live() == nil {
        fmt.Println("AAAAAAA")
    } else {
        fmt.Println("BBBBBBB")
    }
}

# 输出
BBBBBBB
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!