目录先干为敬,主要来自菜鸟教程
import "fmt"
type PeopleInfo struct {
name string
age int
}
type Father interface {
Hear(word string)
Speak() string
ChangeName(name string)
}
// (p PeopleInfo)称为接收器,一个函数只有一个接收器
// 推荐此类写法为struct 扩展成员方法
// 支持指针类型(适合大对象)、非指针类型(适合小对象),本例子是非指针
func (p PeopleInfo) Hear(s string) {
fmt.Println("name: ",p.name,"hear: ",s)
}
func (p PeopleInfo) Speak() string{
return "I do"
}
func (p *PeopleInfo) ChangeName(name string){
p.name=name
}
type Person struct {
name string
age int
}
import (
"fmt"
"sync"
)
var (
count int
pos int
countGuard sync.Mutex
)
func get(count *int) int {
countGuard.Lock()
defer countGuard.Unlock()
return *count
}
func add(count *int) {
countGuard.Lock()
defer countGuard.Unlock()
*count++
}
func main() {
nums:=100
var group sync.WaitGroup
// 两种增加计数的方式均可
group.Add(nums)
for i := 0; i < nums; i++ {
// group.Add(1)
go func() {
defer group.Done()
for j := 0; j < 100; j++ {
// 线程安全
add(&count)
// 线程不安全
pos++
}
}()
}
group.Wait()
fmt.Println(get(&count))
fmt.Println(pos)
}
import "fmt"
import com "common"
func main(){
// 实例化接口
var father com.Father
// PeopleInfo实现了Father接口,可以直接转成father
father = new(com.PeopleInfo)
fmt.Println(father)
father.Hear("do you love me")
fmt.Println("name: ",nil,"speak: ",father.Speak())
father.ChangeName("huang")
fmt.Println(father)
}
import (
"bytes"
"fmt"
"reflect"
"strconv"
)
type actor struct {
age int
name string
}
// 反射的意义:可获得类的信息,类变量、方法等信息,并作出修改
// reflect.TypeOf():获取类型信息
// reflect.ValueOf() : 获取反射值对象(需要传入结构体或者指针)
func main() {
a := actor{
11, "huangcheng"}
var b bytes.Buffer
fmt.Println(reflect.TypeOf(a).Name(), reflect.TypeOf(a).Kind(), reflect.TypeOf(a).Field(1))
fmt.Println(reflect.ValueOf(a).Kind())
b.WriteString("{")
writeAny(&b, reflect.ValueOf(a))
b.WriteString("}")
fmt.Print(b.String())
}
func writeAny(b *bytes.Buffer, value reflect.Value) {
switch value.Kind() {
case reflect.String:
b.WriteString(value.String())
case reflect.Int:
b.WriteString(strconv.FormatInt(value.Int(), 10))
case reflect.Struct:
for i := 0; i < value.NumField(); i++ {
b.WriteString("\"")
b.WriteString(value.Type().Field(i).Name)
b.WriteString("\":")
writeAny(b, value.Field(i))
if i < value.NumField()-1 {
b.WriteString(",")
}
}
}
}
import "fmt"
/**
求素数
*/
func main(){
countPrimes