这篇文检讨一下学 Go 这几天,
今天没有一个学得很完整的东西可以分享(再加上好累#
想写一个 concurrent 的 merge sort 一直不顺,之後写好会放回这篇
2021/10/15 更新:merge sort 写好了,但不知道怎麽去设定 go runtime 的 parallel
看了一个 Coursera 影片,
补了一点点 go concurrency 的东西到 goroutine 那篇。
之後继续看,希望帮助之後写 concurrent 的 go 程序时少踩一点坑。
尝试写点东西
// 要先 import bufio 和 os
reader := bufio.NewReader(os.Stdin)
// ReadString 吃 byte 所以不能打 "\n"
// 记得放 _ 因为会回传 error
newinput, _ := reader.ReadString('\n')
failed ^_^
net/http
、log
等,另外就是小 repo 不太会用到 design patterns。
想学好的程序架构设计真的是一条漫漫长路,没有太多捷径呢。
这几天下来,觉得 syntax 熟悉度要多练,可能还是需要更多写扣的时间。
因为熟悉度不够,导致看程序码时,尤其碰到 struct / interface 的地方,常常对於这里要不要加 {}
各种问号
今天写 merge sort 传 array 也卡了
与其急着去了解更多的 modules,好像更该练习好基础,之後才能自己实作呢。
package main
import (
"fmt"
"math/rand"
"time"
)
func Mergesort(arr []int)([]int) {
if len(arr) < 2 {
return arr
}
mid := len(arr) / 2
return merge(Mergesort(arr[:mid]), Mergesort(arr[mid:]))
}
func merge(a1 []int, a2 []int)([]int){
a:=[]int{}
//fmt.Println(a1, a2, len(a1), len(a2))
i, j := 0, 0
for i < len(a1) && j < len(a2) {
if a1[i] <= a2[j] {
a = append(a, a1[i])
i++
} else if a1[i] > a2[j]{
a = append(a, a2[j])
j++
}
}
for i < len(a1) {
a = append(a, a1[i])
i++
}
for j < len(a2) {
a = append(a, a2[j])
j++
}
//fmt.Println("a is ", a)
return a
}
func main() {
arr := []int{}
rand.Seed(time.Now().UnixNano())
// for i := 0; i < 10; i++ {
// arr[i] = rand.Intn(100)
// }
arr = rand.Perm(20)
fmt.Println(arr)
newarr := Mergesort(arr)
fmt.Println(newarr)
}
package main
import (
"fmt"
"math/rand"
"time"
)
func mergesort(arr []int, ch chan []int) {
if len(arr) < 2 {
ch <- arr
return
}
mid := len(arr) / 2
ch1, ch2 := make(chan []int), make(chan []int)
go mergesort(arr[:mid], ch1)
go mergesort(arr[mid:], ch2)
ch <- merge(<-ch1, <-ch2)
}
func merge(a1 []int, a2 []int)([]int){
// 同上,此略
}
func main() {
arr := []int{}
rand.Seed(time.Now().UnixNano())
arr = rand.Perm(100)
fmt.Println("unsorted array: ", arr)
ch := make(chan []int, 0)
// 这边忘记开一个 goroutine 结果导致 deadlock XD
go mergesort(arr, ch)
newarr := <-ch
fmt.Println("sorted array: ", newarr)
}
<<: [第三十天]从0开始的UnityAR手机游戏开发-另一个物体碰到小龙时会扣血的脚本和後记
>>: 【在厨房想30天的演算法】Day 29 资讯安全与演算法 : 数位签章
前言 若实作中遇到与资料来源有关的设定,会回到 Data Source 页面来做调整,因此在进入实作...
当我们拿到一个现有的 Web Component 时 , 如何在 React 专案中引用呢 ? 利用...
由於很多人都写了要怎麽创建专案、开启专案,这边就来分享一下我写的一些小功能: 上传档案後制作超连结下...
拉钩上吊 一百年不许变 | 中括号[] | const下好离手 ...
上一篇我们使用 addTransceiver 单向接收串流 ,但是却不能两个人一起接收,今天我们要来...