获得徽章 0
GoFrame是一款模块化、高性能、企业级的Go基础开发框架。GoFrame不是一款WEB/RPC框架,而是一款通用性的基础开发框架,是Golang标准库的一个增强扩展级,包含通用核心的基础开发组件,优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。 #青训营 x 字节后端训练营#
评论
一个简单的模板示例:

// 模板定义
tepl := "My name is {{ . }}"

// 解析模板
tmpl, err := template.New("test").Parse(tepl)

// 数据驱动模板
data := "jack"
err = tmpl.Execute(os.Stdout, data) #青训营 x 字节后端训练营#
展开
评论
在Go语言中,通道是goroutine与另一个goroutine通信的媒介,并且这种通信是无锁的。换句话说,通道是一种允许一个goroutine将数据发送到另一个goroutine的技术。默认情况下,通道是双向的,这意味着goroutine可以通过同一通道发送或接收数据 #青训营 x 字节后端训练营#
评论
Go 也被称为 Golang,是 Google 开发的一种开源、编译和静态类型的编程语言。Go 创作背后的关键人物是 Rob Pike,Ken Thompson 和Robert Griesemer。Go于2009年11月公开发布。

Go 是一种通用的编程语言,语法简单并具有强大的标准库作为后盾。Go 大放异彩的关键领域之一是创建高可用性和可伸缩性的 Web 应用程序。Go 还可以用于创建命令行应用程序、桌面应用程序甚至移动应用程序。 #青训营 x 字节后端训练营#
展开
评论
Go 管道的用法
一个简单的使用方法如下
func boring(msg string, c chan string) {
for i := 0; ; i++ {
// 发送信息给管道 (hannel / chan)
// 同时,它也在等待管道的消费者消费完成
c <- fmt.Sprintf("%s %d", msg, i)
time.Sleep(time.Duration(rand.Intn(1e3)) * time.Millisecond)
}
}

func main() {
c := make(chan string) // 初始化一个管道
go boring("boring!", c)

for i := 0; i < 5; i++ {
// `<-c` 等待 `boring` 方法给它发送值,如果一直没有收到,那么会被阻塞在这一步
fmt.Printf("You say: %q\n", <-c)
}
fmt.Println("You're boring. I'm leaving")
} #青训营 x 字节后端训练营#
展开
评论
构建高可用、高性能的通信服务,通常采用服务注册与发现、负载均衡和容错处理等机制实现。根据负载均衡实现所在的位置不同,通常可分为以下三种解决方案:

1、集中式LB(Proxy Model)
2、进程内LB(Balancing-aware Client)
3、独立 LB 进程(External Load Balancing Service) #青训营 x 字节后端训练营#
展开
评论
go test 参数说明:

-bench regexp 执行相应的 benchmarks,例如:-bench=.
-cover 可以查看覆盖率
-run regexp 只运行 regexp 匹配的函数,例如:-run Array 那么就执行包含有 Array 开头的函数,该参数支持通配符 *,和部分正则表达式,例如 ^、$
-v 显示测试的详细信息 #青训营 x 字节后端训练营#
展开
评论
问题一:依赖的包下载到哪里了?还在GOPATH里吗?
不在。 使用Go的包管理方式,依赖的第三方包被下载到了$GOPATH/pkg/mod路径下。

如果你成功运行了本例,可以在您的$GOPATH/pkg/mod 下找到一个这样的包 github.com/astaxie/beego@v1.11.1 #青训营 x 字节后端训练营#
展开
评论
go mod 提供了 replace 方式来指定替换包的地址;当然,如果第三方包中引用墙外的包,就需要手动修改他们了,不如代理方式方便;

使用方式如下:

module github.com/exercise

require (
golang.org/x/text v0.3.0
gopkg.in/yaml.v2 v2.1.0
)

replace (
golang.org/x/text => github.com/golang/text v0.3.0
) #青训营 x 字节后端训练营#
展开
评论
零值是指当你声明变量(分配内存)并未显式初始化时,始终为你的变量自动设置一个默认初始值的策略。 #青训营 x 字节后端训练营#
评论
#青训营 x 字节后端训练营# func main() {
fmt.Println("Starting the server ...")
helloHandler := handler.NewHelloHandler()
http.Handle("/hello", helloHandler)
// 创建服务器,ListenAndServe若服务器宕机,会返回异常
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}
package handler

import (
"bytes"
"fmt"
"net/http"
)

type HelloHandler struct {
m map[string]string
}

func NewHelloHandler() *HelloHandler {
return &HelloHandler{m: make(map[string]string)}
}

// 回声服务器,返回接受的body,
// 实现Handler接口
func (h HelloHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request) {
b := request.Body
buf := bytes.Buffer{}
buf.ReadFrom(b)
b.Close()
s := buf.String()
fmt.Printf("get request: \nMethod:%s\n%s\n%s\n", request.Method, request.RequestURI, s)
writer.Write(buf.Bytes())
}

路由拦截下来后才能得知请求方法
我们需要手动处理io,
读取io后body需要手动映射到实例中,
链接上的参数需要我们手动使用正则取下来
路由分组问题,比如 /test/t /test/t2
返回值需要我们手动处理为[]byte类型
展开
评论
fasthttp号称比net/http快十倍,其优化的核心思路很简单:资源复用。

复用 goroutine,减轻 runtime 调度压力;

对象复用,大量使用 sync.Pool 减轻 GC 压力。 #青训营 x 字节后端训练营#
展开
评论
研究生楼环境还可以啊
欢迎大家报考fzu研究生 #挑战每日一条沸点#
评论
祝妈妈们母亲节快乐 #挑战每日一条沸点#
评论
当我不再对爱情表现出患得患失地期待与失望……也许,它才会真正开始。 #挑战每日一条沸点#
评论
more #挑战每日一条沸点#
评论
我们总无法相互理解,至多不过似是而非或是一厢情愿;我们总无法充分展示自己,哪怕我们心甘情愿;我们所谓的亲密无间无非只是将就凑合;完全的了解只不过幻梦一场。
评论
面试官建议我去继续深造是不是寄了 #挑战每日一条沸点#
评论
总统府—玄武湖公园—夫子庙—秦淮河—铃芽之旅,
中山陵—明孝陵。
以变成废物为代价,来了一次南京二日游。虽然很累,但也领略了南京的人文气息和自然风貌。
但不得不说三号线你是真的挤,来回坐了七八次你也不让我在座位上坐一次。 #挑战每日一条沸点#
展开
评论
下一页
个人成就
文章被阅读 118
掘力值 10
收藏集
0
关注标签
3
加入于