golang
昙花逐月
沉迷coding,无法自拔
展开
-
go 使用锁和chanel按顺序进行协程调度的练习
package mainimport ( "fmt" "sync" "sync/atomic")func fish(wg *sync.WaitGroup, counter uint64, fishch, catch chan int) { //for { // if counter == 2 { // wg.Done() // return // } for i := uint64(0); i < counter; i++ { <-fishch fmt..原创 2021-03-24 04:24:22 · 361 阅读 · 1 评论 -
简单实现多个协程按顺序打印数字(面试题)
package mainimport ( "fmt" "time")func main() { a := 0 fn := func() int { a++ return a } ch := make(chan int, 1) defer close(ch) for i := 0; i < 3; i++ { go func(j int) { for { ch <- 1 n := fn() if n > 100 {原创 2021-03-18 01:19:41 · 457 阅读 · 0 评论 -
golang 对redis的简单操作 练习
package mainimport ( "fmt" "github.com/gomodule/redigo/redis")func main() { // 连接Redis数据库 conn, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println("连接Reids失败:") panic(err) } fmt.Println("连接成功:", conn) reply, err := conn原创 2021-03-03 01:26:20 · 100 阅读 · 0 评论 -
golang 实现socket通信编程 练习
socket/server.gopackage mainimport ( "fmt" "io" "net")func main() { fmt.Println("服务器开始监听端口8888...") listen, err := net.Listen("tcp", "0.0.0.0:8888") if err != nil { fmt.Println("listen err:", err) return } defer listen.Close() // 接受客户..原创 2021-03-02 03:00:50 · 510 阅读 · 0 评论 -
golang json序列化/反序列化/文件读写 单元测试综合练习
test/store.gopackage testimport ( "bufio" "encoding/json" "io" "os")type Monster struct { Name string `json:"name"` Age int `json:"age"` Skill string `json:"skill""`}// 将Monster对象序列化后保存到文件func (monster *Monster) Store(fileName strin.原创 2021-03-01 18:55:27 · 300 阅读 · 0 评论 -
golang json格式的序列化和反序列化 练习
package mainimport ( "encoding/json" "fmt")type User struct { Name string `json:"name_haha~~"` Age int Gender rune Phone string}func main() { var user User user = User{ Name: "tom", Age: 23, Gender: '男', Phone: "13333",原创 2021-03-01 14:29:52 · 89 阅读 · 0 评论 -
golang 指定标签的命令行参数获取 练习
package mainimport ( "flag" "fmt" "os")func main() { var ( user string pwd string host string port int ) flag.StringVar(&user, "u", os.Getenv("USERNAME"), "用户名,默认为当前系统用户") flag.StringVar(&pwd, "pwd", "", "密码") flag.StringVar(原创 2021-03-01 02:53:25 · 132 阅读 · 0 评论 -
golang 获取命令行参数 练习
package mainimport ( "fmt" "os")func main() { args := os.Args fmt.Printf("命令行的参数有 %v 个\n", len(args)) for i, v := range args { fmt.Printf("args[%v] = %v\n", i, v) }}执行结果:原创 2021-03-01 02:21:22 · 92 阅读 · 0 评论 -
golang 统计文件中 英文/数字/空格及其他字符的个数 练习
package mainimport ( "bufio" "fmt" "io" "os")type CharCount struct { ChCount int // 记录英文个数 NumCount int // 记录数字个数 SpaceCount int // 记录空格个数 OtherCount int // 记录其他字符个数}func main() { file, _ := os.Open("d:/test.txt") reader := bufio.New原创 2021-03-01 02:04:49 · 356 阅读 · 0 评论 -
golang 拷贝文件 练习
package mainimport ( "bufio" "fmt" "io" "os")func main() { fmt.Println(CopyImage("C:\\Users\\53254\\Pictures\\Screenshots\\屏幕截图(3).png", "d:/xxx.png"))}func CopyImage(file1, file2 string) (written int64, err error) { fileName1, err := os.Open原创 2021-03-01 01:10:09 · 72 阅读 · 0 评论 -
golang 判断文件(或目录)是否存在 练习
package mainimport ( "fmt" "os")func main() { fmt.Println(PathExist("c:/aow_drsv.log"))}func PathExist(filePath string) (bool, error) { _, err := os.Stat(filePath) if err != nil { if os.IsNotExist(err) { fmt.Println("文件不存在:", err) retu原创 2021-03-01 00:41:16 · 254 阅读 · 0 评论 -
Golang 复制文件的三种做法
主要介绍三种复制文件的方法:使用io.Copy()方法一次性读取输入文件,然后再一次性写入目标文件使用buffer一块块地复制文件方法一 : 使用io.Copyfunc copy(src, dst string) (int64, error) { sourceFileStat, err := os.Stat(src) if err != nil { return 0, err } if !sourceFileStat.Mode().IsRegular()转载 2021-02-28 23:44:17 · 3517 阅读 · 0 评论 -
golang读取并追加内容到文件 练习
package mainimport ( "bufio" "fmt" "io" "os")func main() { file, err := os.OpenFile("d:/test.txt", os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if err != nil { fmt.Println("获取文件句柄失败:", err) os.Exit(2) } defer func() { err := file.Close() f原创 2021-02-28 23:25:09 · 162 阅读 · 0 评论 -
golang 创建文件并追加内容练习
package mainimport ( "bufio" "fmt" "os")func main() { file, err := os.OpenFile("d:/test.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { fmt.Println("获取文件句柄失败:", err) os.Exit(2) } defer file.Close() writer := bufio.NewWrite原创 2021-02-28 22:51:53 · 403 阅读 · 0 评论 -
golang 一次性读取文件内容练习
package mainimport ( "fmt" "io/ioutil" "os")func main() { content, err := ioutil.ReadFile("d:/fileOpen.txt") // 一次性读取文件中的所有内容,文件较大时候会影响性能 if err != nil { fmt.Println("read file err:", err) os.Exit(2) } fmt.Println(string(content))}...原创 2021-02-28 19:06:12 · 245 阅读 · 0 评论 -
golang缓存方式逐行读取文件内容练习
package mainimport ( "bufio" "fmt" "io" "os")func main() { file, err := os.Open("d:/fileOpen.txt") if err != nil { fmt.Println("open file err:", err) } defer file.Close() reader := bufio.NewReader(file) for true { // 循环读取文件内容 str, err原创 2021-02-28 18:57:43 · 268 阅读 · 0 评论 -
golang利用反射机制实现函数适配器调度模式
package mainimport ( "fmt" "reflect")func main() { ReflectFunction()}func ReflectFunction() { test1 := func(v1,v2 int){ fmt.Println(v1,v2) } test2 := func(v1,v2 int,s string) { fmt.Println(v1,v2,s) } bridge := func(test interface{},a原创 2021-02-25 17:43:49 · 186 阅读 · 0 评论 -
golang反射机制练习(结构体字段,方法的获取和调用)
package mainimport ( "fmt" "reflect")type Cal struct { Num1, num2 int}func (cal Cal) GetSub(name string) { fmt.Printf("%v 完成了减法运行,%v - %v = %v", name, cal.Num1, cal.num2, cal.Num1-cal.num2)}func rt(v interface{}) { rv:=reflect.ValueOf(v) .原创 2021-02-25 15:30:21 · 199 阅读 · 0 评论 -
golang通过反射修改变量的值
package mainimport ( "fmt" "reflect")func reflectTest(str interface{}) { fs := reflect.ValueOf(str) fs.Elem().SetString("jack") fmt.Printf("%v\n" ,fs.Elem())}func main(){ var str string = "tom" reflectTest(&str) fmt.Println(str)}原创 2021-02-24 03:08:39 · 363 阅读 · 0 评论 -
golang反射机制练习02
package mainimport ( "fmt" "reflect")func main(){ var v float64 = 1.2 rv := reflect.ValueOf(v) rtype := rv.Type() rkind := rv.Kind() rinterface := rv.Interface() vr,ok := rinterface.(float64) fmt.Println(rv,rtype,rkind,rinterface,vr,reflect原创 2021-02-24 02:06:53 · 107 阅读 · 0 评论 -
golang反射机制练习01
package mainimport( "fmt" "reflect")func reflectTest01(n interface{}){ rtype := reflect.TypeOf(n) fmt.Println("rtype:",rtype) rValue := reflect.ValueOf(n) fmt.Println("rValue:",rValue)}func reflectTest02(n interface{}){ rtype := reflect.Typ原创 2021-02-24 02:06:08 · 102 阅读 · 0 评论 -
golang 获取变量类型的三种方式
Using string formattingfunc typeof(v interface{}) string { return fmt.Sprintf("%T", v)}Using reflect packagefunc typeof(v interface{}) string { return reflect.TypeOf(v).String()}Using type assertionsfunc typeof(v interface{}) string {原创 2021-02-24 01:59:40 · 346 阅读 · 0 评论 -
随机生成10个1-100的整数保存到数组,并倒序打印,求平均值,求最大值和最大值的下标,并查找里面是否有55
package mainimport ( "fmt" "strings" "math/rand" "time" "sort")func main(){ randArr()}//随机生成10个1-100的整数保存到数组,并倒序打印,求平均值,求最大值和最大值的下标,并查找里面是否有55func randArr(){ var arr [10]int rand.Seed(time.Now().UnixNano()) for i := 0; i < 10; i++ { .原创 2021-02-18 00:23:57 · 2573 阅读 · 0 评论 -
golang随机数生成
package mainimport ( "fmt" "math/rand" "time")func main(){ rand.Seed(time.Now().UnixNano()) arr := rand.Intn(100) fmt.Println(arr)}原创 2021-02-17 23:01:40 · 116 阅读 · 0 评论 -
go语言实现二分查找
packagemainimport("fmt")funcmain(){arr:=[6]int{1,2,3,5,7}BinaryFind(&arr,0,len(arr)-1,5)}//二分查找,数组必须有序,下一次查找必须是:中间下标的后一个或前一个开始funcBinaryFind(arr*[6]int,leftIndex,rightIndex,findValint){ifleftIndex>ri...原创 2021-02-17 22:11:35 · 116 阅读 · 0 评论