![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
道甚夷
给一个币,实现你的愿望
展开
-
wsl2 ubuntu下配置go执行make init 错误 /bin/bash line 1 go command not found
我原来的配置是将www设置在mnt/d/www/goland。后面改为了下面这样,然后重新拉取了项目,就可以了。原创 2023-12-06 11:23:18 · 794 阅读 · 0 评论 -
go 邮件功能(全)
【代码】go 邮件功能(全)原创 2023-09-11 12:15:27 · 2877 阅读 · 0 评论 -
go: 实现联合体
【代码】go: 实现联合体。原创 2023-08-07 14:54:02 · 345 阅读 · 0 评论 -
assignment to entry in nil map
【代码】assignment to entry in nil map。原创 2023-08-04 11:32:44 · 89 阅读 · 0 评论 -
go-chan例子及理解
代码】go-chan例子及理解。原创 2022-08-16 15:58:31 · 437 阅读 · 0 评论 -
go-go-admin&vue后台系统请求思路分析
安装go-admin# Get backend codegit clone https://github.com/go-admin-team/go-admin.git# Get the front-end codegit clone https://github.com/go-admin-team/go-admin-ui.gitrouter整个路由系统分成两个部分来处理。由init_router进入,分sys_router.go和router.go两条线分别处理系统路由和业务路由api原创 2022-01-19 11:39:56 · 584 阅读 · 0 评论 -
go-基础-切片实现原理相关
package mainimport "fmt"var pf = fmt.Printf/*问题1. 数组传参为什么要使用切片,有数组或者数组引用可以吗2. 切片的数据结构是什么,可以怎么模拟3. nil切片和空切片有什么不同,什么时候使用nil切片,什么时候使用空切片4. 切片是怎么生成的,有哪种形式5. 扩容策略是什么,怎么实现.6. 拷贝的实现7. 扩容后的数组是新数组还是老数组*/func main() { // 赋值和传参时会拷贝会复制整个数组数据。 //原创 2022-01-11 10:53:34 · 106 阅读 · 0 评论 -
go-基础-url
package mainimport ( "fmt" "net" "net/url")var p = fmt.Printlnfunc main() { s := "https://user:pass@host.com:5432/path/admin/Index?k=v&k2=v2#hash" u, err := url.Parse(s) if err != nil { panic(err) } p(u.Scheme, u.User, u.User.Username()原创 2022-01-07 09:19:46 · 1054 阅读 · 0 评论 -
go-基础-random
package mainimport ( "fmt" "time" "math/rand")var p = fmt.Printlnfunc main() { p(rand.Intn(100), ",", rand.Intn(100)) // 0 <= n < 100 p(rand.Float64()) // 0.0 <= f < 1.0 // 5.0 <= f' < 10.0 p((rand.Float64() * 5) + 5, ",", (r原创 2022-01-07 09:19:11 · 1017 阅读 · 0 评论 -
go-基础-time
package mainimport ( "fmt" "time")var p = fmt.Printlnfunc main() { now := time.Now() then := time.Date(2022, 1, 5, 17, 35, 58, 651387237, time.UTC) p(then) p(then.Year()) p(then.Month()) p(then.Day()) p(then.Hour()) p(then.Minute()) p(then.原创 2022-01-07 09:18:47 · 125 阅读 · 0 评论 -
go-基础-json
package mainimport ( "fmt" "os" "encoding/json")type resp1 struct { Page int Fruits []string}type resp2 struct { Page int `json:"page"` // Page 映射json的page 对象注解成json Fruits []string `json:"fruits"`}var p = fmt.Printlnfunc main() { // 普通类型需原创 2022-01-07 09:17:56 · 91 阅读 · 0 评论 -
go-基础-格式化
package mainimport ( "fmt" "os" "strconv")type point struct { x, y int}var logf = fmt.Printfvar log = fmt.Printlnfunc main() { p := point{1, 2} logf("struct1 %v\n", p) // 没有健 logf("struct2 %+v\n", p) // 键值 logf("struct3 %#v\n", p) // 键值和结构体原创 2022-01-07 09:17:34 · 296 阅读 · 0 评论 -
go-基础-string函数
package mainimport ( "fmt" s "strings")var log = fmt.Printlnfunc main() { log("Contains", s.Contains("test", "s")) log("Count", s.Count("test", "t")) log("HasPrefix", s.HasPrefix("test", "te")) log("HasSuffix", s.HasSuffix("test", "st")) log("I原创 2022-01-07 09:15:50 · 564 阅读 · 0 评论 -
go-基础-切片函数
package mainimport ( "fmt" "strings")func Index(vs []string, t string) int { for i, v := range vs { if v == t { return i } } return -1}func Includes(vs []string, t string) bool { return Index(vs, t) >= 0}func Some(vs []string, f fu原创 2022-01-07 09:15:17 · 326 阅读 · 0 评论 -
go-基础-recover
package mainimport ( "fmt")// recover通过捕获错误来调用其他备用策略来应付出错问题,避免程序终止.func mayPanic() { panic("a problem")}func main() { // recover函数必须在defer中使用 // 当出现panic抛出异常时,defer函数会被激活,并且里面的recover函数会捕获错误 defer func() { if err := recover(); err != nil {原创 2022-01-07 09:13:22 · 189 阅读 · 0 评论 -
go-基础-defer
package mainimport ( "fmt" "os")// Defer用于确保函数调用在程序执行的后期执行,通常用于清理目的func writeFile(f *os.File, p string) { fmt.Println("writing") fmt.Fprintln(f, p) // 写入文件}func createFile(p string) *os.File { fmt.Println("creating") f, err := os.Create(p) i原创 2022-01-07 09:12:48 · 56 阅读 · 0 评论 -
go-基础-错误终止-panic
package mainimport ( "os")func main() { panic("file not found") _, err := os.Create("tmp/file") if err != nil { panic(err) }}原创 2022-01-07 09:11:55 · 187 阅读 · 0 评论 -
go-基础-排序
package mainimport ( "fmt" "sort")type byLength []stringfunc (s byLength) Len() int { return len(s)}func (s byLength) Swap(i, j int) { s[i], s[j] = s[j], s[i]}func (s byLength) Less(i, j int) bool { return len(s[i]) < len(s[j])}func ma原创 2022-01-06 09:30:22 · 47 阅读 · 0 评论 -
go-基础-读写锁
package mainimport ( "fmt" "math/rand" "sync/atomic" "time")// 读写type readOp struct { key int resp chan int}type writeOp struct { key int val int resp chan bool}func main() { var readOps uint64 var writeOps uint64 reads := make(ch原创 2022-01-06 09:29:42 · 137 阅读 · 0 评论 -
go-基础-互斥锁-mutexes
package mainimport ( "fmt" "sync")// 互斥锁,跨多个协程安全访问数据type Container struct { m sync.Mutex // 同步状态 counters map[string]int}func (c *Container) inc(name string) { // 先锁住状态,接收counters值并计算后再解锁。 fmt.Println("lock") c.m.Lock() // 1原创 2022-01-06 09:27:51 · 337 阅读 · 0 评论 -
go-基础-原子操作-atomic
package mainimport ( "fmt" "sync" "sync/atomic")// 原子操作管理计数器状态func main() { var ops uint64 var wg sync.WaitGroup for i := 0; i < 50; i++ { wg.Add(1) go func() { for c := 0; c < 1000; c++ { // 原子操作计算,传入引用计算 atomic.AddUint64(原创 2022-01-06 09:26:53 · 101 阅读 · 0 评论 -
go-基础-任务池-sync.WaitGroup
package mainimport ( "fmt" "sync" "time")func worker(id int) { fmt.Printf("Worker %d starting\n", id) time.Sleep(time.Second) fmt.Printf("Worker %d done\n", id)}func main() { // 多任务进程组处理器 var wg sync.WaitGroup for i := 1; i <= 5; i++ {原创 2022-01-06 09:25:23 · 170 阅读 · 0 评论 -
go-基础-channels-select-阻塞&非阻塞-range-timer-ticker
package mainimport ( "fmt" "time")func worker(done chan bool) { fmt.Println("working...") time.Sleep(time.Second) fmt.Println("done") done <- true // 写入信息到管道内}func ping(pings chan<- string, msg string) { // 这里pings是出入类型 pings <- ms原创 2022-01-06 09:24:33 · 451 阅读 · 0 评论 -
go-基础-channels
package mainimport ( "fmt" "time")func worker(done chan bool) { fmt.Println("working...") time.Sleep(time.Second) fmt.Println("done") done <- true // 写入信息到管道内}func ping(pings chan<- string, msg string) { // 这里pings是输入 pings <- msg原创 2022-01-06 09:24:16 · 84 阅读 · 0 评论 -
go-基础-任务池
package mainimport ( "fmt" "time")func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Printf("工人%d,开始工作%d \n", id, j) time.Sleep(time.Second) fmt.Printf("工人%d,完成工作%d \n", id, j) results <- j * 2 }原创 2022-01-06 09:24:56 · 177 阅读 · 0 评论 -
go-基础-并发限制器
package mainimport ( "fmt" "time")// 突发限制器func main() { // 情景一 // 模拟5个同步请求 reqs := make(chan int, 5) for i := 1; i <= 5; i++ { reqs <- i } close(reqs) // 限制器,每200ms执行处理一次请求 limiter := time.Tick(200 * time.Microsecond) for req := ra原创 2022-01-06 09:24:44 · 122 阅读 · 0 评论 -
go-基础-goruntine
package mainimport ( "fmt" "time")func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) }}func main() { fmt.Println("1") f("go") fmt.Println("2") go f("routine") // 异步1 fmt.Println("3") go func(msg string) { // 异步2原创 2022-01-06 09:24:01 · 66 阅读 · 0 评论 -
go-基础-继承
package mainimport ( "fmt")type base struct { num int}func (b base) describe() string { return fmt.Sprintf("base with num=%v", b.num)}// 类似js的原型链原理type container struct { base // 继承 str string}type describer interface { // 接口 describe()原创 2022-01-05 10:18:14 · 69 阅读 · 0 评论 -
go-基础-interface
package mainimport ( "fmt" "math")type geometry interface { // 接口 area() float64 perim() float64}type rect struct { // 结构1 width, height float64}type circle struct { // 结构2 radius float64}func (r rect) area() float64 { // 结构1方法1 return r原创 2022-01-05 10:12:20 · 60 阅读 · 0 评论 -
go-基础-结构体函数
package mainimport "fmt"// 结构体// 对象type rect struct { width, height int}// 结构体函数// 对象方法// func(结构体别名 结构体名) 方法名(参数) 返回值 {}func (r *rect) area() int { return r.width * r.height}func (r rect) perim() int { return 2*r.width + 2*r.height}func原创 2022-01-05 10:09:55 · 1637 阅读 · 0 评论 -
go-基础-struct结构体
package mainimport "fmt"// 结构体,可以理解为类type person struct { name string age int}func newPerson(name string, age int) *person { p := person{name: name} p.age = age return &p}func main() { fmt.Println(person{"Bob", 20}) // 设置名原创 2022-01-05 10:06:04 · 222 阅读 · 0 评论 -
go-基础-函数
package mainimport "fmt"// 函数参数func plus(a int, b int) int { return a + b}// 简写同类型func plusPlus(a, b int) int { return a + b}// 多返回值func vals() (int, int) { return 3, 7}// 不限定参数func sum(nums ...int) { // 任意类型是int的参数 fmt.Println(nums, "原创 2022-01-05 10:02:11 · 53 阅读 · 0 评论 -
go-基础-数组
package mainimport "fmt"func main() { var a [5]int // 指定义数组长度 fmt.Println("emp:", a) a[4] = 100 fmt.Println("set:", a) fmt.Println("get:", a[4]) fmt.Println("len:", len(a)) b := [5]int{1, 2, 3, 4, 5} // 数组定义,长度固定 fmt.Println("dcl:", b) // 二维数组原创 2022-01-05 09:57:31 · 89 阅读 · 0 评论 -
go-基础-range循环
package mainimport "fmt"func main() { // 循环语句 range // 切片,数组同 nums := []int{1, 2, 3, 4} sum := 0 for _, num := range nums { sum += num } fmt.Println("sum:", sum) // 10 for i, num := range nums { if num == 3 { fmt.Println("index:", i) //原创 2022-01-05 09:56:31 · 473 阅读 · 0 评论 -
go-基础-map
package mainimport "fmt"func main() { // make(map[keyType]valueType) // map[keyType]valueType{k:v, ...} // 映射-类似js的object去理解即可 m := make(map[string]int) m["k1"] = 1 m["k2"] = 3 fmt.Println("map:", m) v1 := m["k1"] fmt.Println("v1:", v1) fmt.P原创 2022-01-05 09:54:54 · 82 阅读 · 0 评论 -
go-基础-切片
package mainimport "fmt"func main() { s := make([]string, 3) // 使用make创建切片 fmt.Println("emp:", s) s[0] = "a" s[1] = "b" s[2] = "c" fmt.Println("set:", s) fmt.Println("get:", s[2]) fmt.Println("len:", len(s)) s = append(s, "d") s = append(s, "原创 2022-01-05 09:51:47 · 143 阅读 · 0 评论 -
go-基础-类型与结构语句
package mainimport ( "fmt" "math" "time")const s string = "constant"func main() { // switch i := 2 fmt.Println("Write", i, "as") switch i { case 1: fmt.Println("one") case 2: fmt.Println("two") case 3: fmt.Println("three") } switch原创 2022-01-05 09:50:57 · 47 阅读 · 0 评论