JavaScript的执行过程(深入执行上下文、GO、AO、VO和VE等概念)
JavaScript的执行过程
前言
编写一段JavaScript代码,它是如何执行的呢?简单来说,JS引擎在执行JavaScript代码的过程中需要先解析再执行。那么在解析阶段JS引擎又会进行哪些操作,接下来就一起来了解一下JavaScript在执行过程中的详细过程,包括执行上下文、GO、AO、VO和VE等概念的理解。
1.初始化全局对象
首先,JS引擎 ...
Go 字符串拼接6种,最快的方式 -- strings.builder
我们首先来了解一下Go语言中string类型的结构定义,先来看一下官方定义:
// string is the set of all strings of 8-bit bytes, conventionally but not// necessarily representing UTF-8-encoded text. A string ...
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
什么是流处理
如果有 java 使用经验的同学一定会对 java8 的 Stream 赞不绝口,极大的提高了们对于集合类型数据的处理能力。
int sum = widgets.stream()
.filter(w -> w.getColor() == RED)
.mapToInt(w -> w.getWeight())
.sum();
Stream 能让我们支持链式调用和函数编程的风 ...
Go 语言标准库之 os 包
os 包提供了平台无关的操作系统功能接口,主要是文件相关的I/O,本文会重点对文件操作进行介绍。
文件 I/O
在 Go 中,文件描述符封装在os.File结构中。os.File代表一个打开的文件对象,可以使用该对象进行文件读写操作。
type File struct {
*file // os specific
}
type file struct {
pfd poll.FD
n ...
go学习(四)新建go的Web项目
一、vscode搭建Go环境
1、安装go环境
官网或golang中文网 ,下载xx.windows-amd64.msi
cmd查看版本:go version
我用的是golang 1.16.5,golang 1.18版本添加了泛型。
2、使用 Go Module
2.1 go module简介
(1)不再需要GOROOT和GOPATH
使用Go Module进行包管理,就不再需要GOROOT和GOPATH了!
Go开发相关的环境变量(GOR ...
Go 疑难杂症汇总
1. revision v0.0.0: unknown revision v0.0.0
go get -u github.com/uudashr/gopkgs/cmd/gopkgs 报错:
[root@lubanseven home]$ go get -u github.com/uudashr/gopkgs/cmd/gopkgs
go: downloading github.com/uudashr/gopkgs v1.3.2
go: downloading github.com/uudashr/gopkgs/cmd/gopkgs v0.0.0-20191024034442-58e9141 ...
【Go反射】创建对象
前言
最近在写一个自动配置的库cfgm,其中序列化和反序列化的过程用到了大量反射,主要部分写完之后,我在这里回顾总结一下反射的基本操作。
第一篇【Go反射】读取对象中总结了利用反射读取对象的方法。
第二篇【Go反射】修改对象中总结了利用反射修改对象的方法。
本篇总结一下创建操作,即创建新的简单类型(int、uint、f ...
【Go反射】修改对象
前言
最近在写一个自动配置的库cfgm,其中序列化和反序列化的过程用到了大量反射,主要部分写完之后,我在这里回顾总结一下反射的基本操作。
上一篇【Go反射】读取对象中总结了利用反射读取对象的方法。
本篇总结一下写入操作,即对简单类型(int、uint、float、bool、string)、指针、切片、数组、map、结构体的修改操作, ...
Go结构体与接口
一、结构体(struct)
相当于Java中的类,结构体名称首字母需大写,结构体名称首字母大写是公有的,包外可访问;首字母小写是私有的,仅在包内可访问
结构体命名需要使用驼峰命名法,且不能出现下划线
Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体(stru ...
--go_out: protoc-gen-go: Plugin failed with status code 1.
person.proto文件
//指定版本
//注意proto3与proto2的写法有些不同
syntax = "proto3";
//包名,通过protoc生成时go文件时
option go_package="/address2";
//手机类型
//枚举类型第一个字段必须为0
enum PhoneType {
HOME = 0;
WORK = 1;
}
//手机
message Phone {
PhoneType type = 1;
string numb ...
我好像发现了一个Go的Bug?
从一次重构说起
这事儿还得从一次重构优化说起。
最近在重构一个路由功能,由于路由比较复杂,需求变化也多,于是想通过责任链模式来重构,刚好这段时间也在 Sentinel-Go 中看到相关源码。
用责任链模式,最大的好处是可以针对每次请求灵活地插拔路由能力,如:
这样实现会在每次请求到来时去 new 出整个责任链,可以预见 ...
go: go.mod file not found in current directory or any parent directory; see 'go help mod 解决
go: go.mod file not found in current directory or any parent directory; see 'go help mod
go:在当前目录或任何父目录中找不到 go.mod 文件; 参见“去帮助模块”
1、原因go module没有开启
yang@master:~/go/GOROOT/bin/hello$ go env
GO111MODULE=""
2、解决办法:
go的环境设置问题,执行:
go env -w GO11 ...
十一. Go并发编程--singleflight
一.前言
1.1 为什么需要Singleflight?
很多程序员可能还是第一次听说,本人第一次听说这个的时候以为翻译过来就是程序设计中被称为的是 "单例模式"。 google之后二者天壤之别。
一般情况下我们在写一写对外的服务的时候都会有一层 cache 作为缓存,用来减少底层数据库的压力,但是在遇到例如 redis 抖动或者其他情况可能 ...
【Go学习】一文彻底搞懂go mod使用
jquery中文网为您提供一文彻底搞懂go mod使用等资源,欢迎您收藏本站,我们将为您提供最新的一文彻底搞懂go mod使用资源
目录
一、如何使用go mod
二、golang开启mod后import报红解决
三、go mod 怎么导入本地其它项目的包?
四、完整代码
一、如何使用go mod
下面的函数中使用了iris,所以我们需要先使用go mod下 ...
go程序不停机重启
让我们给http服务写一个版本更新接口,让它自动更新版本并重启服务吧。
初步例子
注:为了精简,文中代码都去除了err处理
main.go
var Version = "1.0"
/* 打印版本 */
func version(w http.ResponseWriter, r *http.Request) {
msg := fmt.Sprintf("version %v\n", Version)
w.Write([]byte(msg))
}
/* ...
uber-go guide,uber的go编码规范
uber-go guide,uber的go语言编码规范
感谢翻译者和原作们
本文转自:https://github.com/xxjwxc/uber_go_guide_cn
(特此感谢作者的翻译,感谢他们的辛苦付出)
原英文:https://github.com/uber-go/guide,uber-go/guide 的中文翻译
原英文:uber-go style
(也感谢uber-go的原作者们)
uber-go/guide 的中文翻译
English ...
性能优化 | Go Ballast 让内存控制更加丝滑
关于 Go GC 优化的手段你知道的有哪些?比较常见的是通过调整 GC 的步调,以调整 GC 的触发频率。
设置 GOGC
设置 debug.SetGCPercent()
这两种方式的原理和效果都是一样的,GOGC 默认值是 100,也就是下次 GC 触发的 heap 的大小是这次 GC 之后的 heap 的一倍。
我们都知道 GO 的 GC 是标记-清除方式,当 GC 会触发时全 ...
九. Go并发编程--context.Context
一. 序言
1.1 场景一
现在有一个 Server 服务在执行,当请求来的时候我们启动一个 goroutine 去处理,然后在这个 goroutine 当中有对下游服务的 rpc 调用,也会去请求数据库获取一些数据,这时候如果下游依赖的服务比较慢,但是又没挂,只是很慢,可能一次调用要 1min 才能返回结果,这个时候我们该如何处理?
如下图所示 ...
go发送邮件
1.项目中需要把脚本附件发送给同事邮箱,找了好久
1、安装 gomail 包:
go get -v gopkg.in/gomail.v2
2、完整代码:
package main
import (
"fmt"
"gopkg.in/gomail.v2"
"mime"
)
/*
go邮件发送
*/
func SendMail(mailTo []string, subject string, body string) error {
// 设置邮箱主体
mail ...
八. Go并发编程--errGroup
一. 前言
了解 sync.WaitGroup的用法都知道
一个 goroutine 需要等待多个 goroutine 完成和多个 goroutine 等待一个 goroutine 干活时都可以解决问题
WaitGroup 的确是一个很强大的工具,但是使用它相对来说还是有一点小麻烦,
一方面我们需要自己手动调用 Add() 和 Done() 方法,一旦这两个方法有一个多调用或者少调 ...