Go Web编程 谢大(Go基础:第一二章)

阅读谢大的beedb,学习Go语言的反射机制 func (orm *Model) ScanPK(output interface{}) *Model { if reflect.TypeOf(reflect.Indirect(reflect.ValueOf(output)).Interface()).Kind() == reflect.Slice { sliceValue := reflect.Indirect(refl 阅读详情

2.1

除了main包外,所有的package都会生成*.a文件。

2.2

字节

每个byte是一个字节,数组byte[]是若干个字节,int、int32和float都是4个字节。

iota

用于枚举,每次加1。
##大写
包(可导出),class(public函数)。

数组

  • 长度也是数组类型的一部分,[3]int和[4]int是不同的类型,数组不能改变长度。
  • 赋值:数组的赋值是值赋值,当把数组传入函数时,传入的是数组副本,当传入slice时,使用的是指针。

动态数组(slice)

数组的声明为 var arr [10]int
slice的声明为 var sli []int

  • 指定长度:a := arr[2:5] 意为arr[2] arr[3] arr[4]
  • 对slice的slice可以在cap上拓展
  • len:长度
  • cap:最大容量

函数

###变参数
传入一个slice:例如func myfunc(arg …int) {}
###传指针
传指针需要参数为int, 传入的参数为&param,操作的是param,但是string、slice和map的底层实现机制类似指针,可以不取地址而直接传递。

defer

多个defer:后进先出

panic 和 recover

如果没有任何panic,recover会返回nil。

包导入

由于A包会导入其他BC包,BC包又会导入其他DE包,因此首先对DE、BC、A按顺序执行(导入、初始化变量、执行可能有的init函数的工作)。最后执行main函数。

这里写图片描述

像fmt这种系统自带的包是在GOROOT路径下的。

struct

###匿名字段,实现字段的继承
只声明类型,不声明名称。如果在struct A内声明了匿名的struct B,会嵌入式导入该struct的全部字段,作为A的成员。
###匿名字段重复时,的访问的方式
比如struct A里有字段x 和 struct B,其中struct B里也有字段x,则直接访问A.x可以访问A中的字段,A.B.x可以访问B中的字段。

2.5

class面向对象

struct的函数,可以访问其成员变量。
有传值和传指针两种方式

// 传值:改变成员的副本
func (r Rectangle) area() float64{
	return r.w * r.h
}

// 传指针:改变成员
func (r* Rectangle) area() float64{
	return r.w * r.h
}

自定义类型均可自定义方法

// struct
type Circle struct{
	r float64
}

func (c Circle) area() float64{
	return c.r * c.r * math.Pi
}

// 其他类型别名
type CircleList []Circle

func (cl CircleList) SetFirstCircle(idx int) (isOk bool){
	cl[idx] = "Black"
	return true
}

指针的访问

ptr.val 和 *ptr.val都是取的指针对应地址的值。

#method继承
struct A 的字段中包含 struct B,则相当于B是A的基类,A具备B的所有属性,则派生类A可以重写基类A的函数,实现method的继承。

typedef Human struct{
	name string
	age  int
}

typedef Student struct{
	Human
	school string
}

func (h *Human) SayHi(){
	fmt.Print("hi, i am %s", h.name)
}

func (s *Student) SayHi(){
	fmt.Print("hi, i am %s, from %s", s.name, s.school)
}

2.6 interface

interface就是一组方法的集合,谁实现了该集合的所有方法,就实现了该interface。

interface的变量存实现了该interface的对象。例如interface 变量m,可以存Human,Student,或者Employee值。

因此,可以定义一个interface的slice,其中可以存放任意类型的变量。

// 定义接口类型
type Men interface{
	SayHi()
	Sing(lyrics string)
}

// 实例化接口变量
var i Men

// 接口i可存储Student类型的对象
i = mike
i.SayHi()
i.Sing("hello")

// 接口i可存储Employee类型的对象
i = Tom
i.SayHi()
i.Sing("hello")

// 实例化接口slice变量
isli := make([]Men, 3)
// 每个接口变量可以存储不同类型的对象
isli[0],isli[1],isli[2] = paul,sam,mike
// 分别对每个类型调用接口,但调用方式都一样
for _, i := range isli{
	i.SayHi()
}

##空interface

var a interface

var i int = 5
var s string = "hello"

// 接口可存任意类型的数值
a = i
a = s

函数参数为interface,则可接收任意类型变量为参数
函数返回为。。。。,则可返回。。。。。。。。。。

通过interface,可让函数接收各种参数。

comma-ok测试

if value, ok := element.(int); ok{
	fmt.Printf("list[%d] is an int and its value is %d\n", 
}
for index, element := range list{
	switch value := element.(type){
		case int:
			fmt.Pritf("list[%d] is an int and its value is %d\n, index, value)
		case string:
			fmt.Printf("list[%d] is an string and its value is %s\n, index, value)
	}
}

嵌入式interface

type ReaderWriter interface{
	Reader
	Writer
}

#channel
channel可以关闭,Close(chan)

go-goland 环境配置 如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。然后运行如下命令,便可自动下载所需要的包,记录会写在go.mod下的go.sum文件中。GOPATH 是go的工作目录,主要包含三个目录:bin、src 和 pkg。在项目目录 或者 项目子模块下,运行下面命令,会产生一个go.mod文件。运行 go/bin 目录下的 go.exe,打开 cmd,执行。pkg:存放编译好的库文件, 主要是*.a文件。src:下主要存放go的源文件。bin:主要存放可执行文件。 阅读详情

相关推荐

STM32F407标准库下ADC多通道DMA采集的配置与优化

本文详细介绍了STM32F407标准库下ADC多通道DMA采集的配置与优化方法。通过GPIO模拟输入配置、ADC时钟和模式设置、DMA传输参数配置等关键步骤,实现高效的多通道数据采集。文章还提供了性能优化技巧和常见问题排查指南,帮助开发者提升采样速率和稳定性。

weixin_29192141的博客 436

Go Web编程 谢大 NO.3-其他章

3 Web基础 web前端后端工作的方式 4 表单 4.1 处理表单的输入 func login(w http.ResponseWriter, r *http.Request){ r.ParseForm() fmt.Println("username:", r.Form["username"]) } 4.2 验证表单的输入 正则表达式regexp.MatchStri...

大数据与计算机视觉 129

Qt+VS集成红外相机SDK实战:OpenCV图像处理避坑指南

红外图像采集是工业机器视觉中的基础技术环节,涉及硬件驱动、跨线程数据传递、RAW格式解析与热图可视化等核心能力。其底层原理依赖USB设备通信、异步回调机制与14位/16位图像数据流处理,技术价值在于实现高帧率、低延迟、高精度的实时温度感知。典型应用场景包括产线缺陷检测、电气设备过热监控及非接触式测温系统。本文聚焦Qt与Visual Studio协同调用红外SDK(如高德)时的真实集成难点,深入解析Qt模块链接失败、SDK多线程回调与Qt事件循环冲突、红外原始数据格式转换失真等关键问题,结合OpenCV完成从

weixin_34038293的博客 365

算法导论之线性规划

线性规划,充斥着运筹学,在图的单源最短路径求解差分约束系统就是用到线性规划。怎么样问题可以建模为线性规划来解决呢?在给定的有限的资源和竞争约束情况下,取得最大化或最小化目标的问题。导论中给出政治竞选问题、航空航线调度问题、钻井采油问题。最大化或最小化目标是函数的因变量,自变量就是资源的约束因素,其函数就是由这些制约因素构成的等式或不等式。下面数学定义下线性规划。 在一般线性规划问题中,最优化一个

医疗影像检索 2万+

使用kali对局域网内的主机进行远程控制

输入命令:hydra -l administrator -P/usr/share/woerdlists/rockyou.txt 192.168.100.241 smb -V。账户(adminitrator)密码:123456 【一般账户都是我们知晓了,如果不知道账户进行破解那几乎不太可能,密码如果设置的特别复杂无规律也是特别难破解的】【-r:扫描整个网段 后面就是设置 192.168.241.100/24的网络地址段 为 192.168.241.0/24 0和/24之间不要空格】

2301_77599769的博客 2280

golang微服务框架对比_Golang 微服务教程(一)

Golang 微服务教程(一)字数统计: 4,073原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式前言系列概览《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。本节先介绍微服务的基础概念、术语,再创建我们的...

weixin_39775976的博客 2858

【ESP32】1.编译、烧录、创建工程

本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。

梁山1号 1485

Golang微服务教程

转自:https://segmentfault.com/a/1190000015135650?utm_campaign=studygolang.com&utm_medium=studygolang.com&utm_source=studygolang.com 前言 系列概览 《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。 本节先介绍微服务...

runner668的博客 576

冗余位技术在SAR ADC中的动态误差恢复机制解析

本文深入解析了冗余位技术在SAR ADC中的动态误差恢复机制,详细介绍了其基本概念、动态误差产生原因及冗余位的容错空间设计、时序松弛策略和数字校正算法。通过实际电路设计案例和数学建模,展示了冗余位技术如何显著提升ADC的精度和能效比,同时探讨了未来发展方向。

weixin_28335283的博客 975

Android系统开发面试指南:系统Launcher岗位解析

本文针对上海礼聪Android系统开发岗位(侧重系统Launcher、充电/电池/USB底层开发)提供面试指南。内容涵盖应用开发(启动流程优化)、系统底层(充电状态机、USBOTG)、编程能力(线程安全LRU实现)、问题排查(ANR分析)及沟通协作等核心考点。通过5类典型问题及技术深度解析,帮助候选人系统准备,重点考察Framework源码理解、系统调试能力和工程思维。建议结合PowerManagerService等模块源码和systrace工具进行实践准备,同时注重技术表达与协作能力的展现。

郑伟强dev的专栏 935

跟无闻学习GO Web 编程(一) -- go 开发环境搭配(win7 64bit)

先安装好 git。这个很简单,到http://code....

weixin_33757609的博客 237

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Golang 微服务教程

本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式 前言 系列概览 《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。 本节先介绍微服务的基础概念、术语,再创建我们的第一个微服务 consignment-service 的简洁版。在接下来的第 2~10 节文章中,我们会陆续创建以下微服务: c...

哼哈的专栏 820

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

为什么要学习Go语言

Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 一、为什么要选择学习Go语言呢?与其他语言的应用相比,它有什么优点呢? 1. 学习曲线 它包含了类C语法、GC内置和工程工具。这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。 2. 效率 Go拥有接近C的运行效率和接近

shazi4399的博客 488

Golang 微服务教程(一)

原文链接:ewanvalentine.io,翻译已获作者 Ewan Valentine 授权。 本节对 gRPC 的使用浅尝辄止,更多可参考:gRPC 中 Client 与 Server 数据交互的 4 种模式 前言 系列概览 《Golang 微服务教程》分为 10 篇,总结微服务开发、测试到部署的完整过程。 本节先介绍微服务的基础概念、术语,再创建我们的第一个微服务 consign...

weixin_41282397的博客 2159

Golang的init函数和main函数

一、init函数 在Go中,init函数是用于包(package)的初始化。 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 每个包可以拥有多个init函数 包的每个源文件也可以拥有多个init函数 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用 二、main函数 像其他编程语言一样,main函数也是Go语言程序的默认入口

Chasel_H 1202

Go语言学习笔记——Go语言的make的理解

实例:https://tour.go-zh.org/moretypes/10 谢大《Go Web编程》书中的讲解https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/02.2.md 转载于:https://www.cnblogs.com/liyao0312/p/8341767.html...

X18856323059的博客 281

ubuntu安装golang

如果之前有安装过go的,需要提前卸载。 apt-get purge golang-go 参考大佬的文章就好: https://www.cnblogs.com/tinywan/p/6928300.html 谢大的:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.1.md ...

Yu的博客 360

Gopher China 2018 讲师专访-方圆

工作多年的小码农,谢大多年基友。罗辑思维首席架构师,曾先后在 Cisco,新浪微博从事基础架构研发工作。十多年一直专注于后端技术的研发,在消息通信,分布式存储等方向有着丰富的经验(突然感觉自己很老)。个人技术兴趣广泛,主要专注 Go/Java/Python 等编程语言的发展,尤其是在云计算等前沿领域的应用(其实我最喜欢的还是拿起相机做老法师)。什么原因,什么时候与Go结缘?10年的时候,听过一次许

Go中国 1217

Go语言经典库使用分析(一)| 开篇

Go语言经典库使用分析,未完待续,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续系列。觉得有帮助的话,顺手分享到朋友圈吧,...

flysnow_org的博客 239

AI芯片性能优化:深入理解总线事务与内存映射

总线是计算机系统数据流动的骨架,任何高性能计算都离不开高效的数据搬运机制。总线事务定义了主设备与从设备之间的每一次读写交互,而内存映射则规划了所有地址资源的归属与访问规则。理解握手机制、突发传输、仲裁策略以及Cache一致性,是定位系统瓶颈、优化数据通路的关键。在AI芯片、异构计算、嵌入式SoC等场景中,内存访问的效率和正确性直接影响算力发挥。从基础概念到工程实践,从DMA配置到IOMMU页表管理,掌握总线事务与内存映射的原理,能够帮助开发者从系统层面提升性能,缩短调试周期。本文围绕这两个核心主题,结合真实

weixin_34236869的博客 480

Gopher China 2018 讲师专访-王旭

自我介绍Hyper.sh 的看门大爷,目前专注于虚拟化容器相关技术,2017年 kubecon 上,和 intel 一起 announce 了 kata containers 项目。曾经混迹于 Hadoop 社区(老 Java 程序员了),也曾在盛大云做过存储,写过书,也翻译过书,Kernel, 虚拟化, 存储, NoSQL,都略有涉及,15年开始转向容器领域,成为了 Hyper.sh 的创始看门

Go中国 897

途牛原创|途牛周刊

Tuniu Weekly Inspired By 《湾区日报》 我们团队也想基于这种模式,让大家感受到技术的人文。 《Tuniu Weekly》就这样产生了。 《Tuniu Weekly》的本质是团队博客,关注互联网、创业、技术,每周推荐5篇优质文章。 独特 精选:我们不是传统小编的复制粘贴、应付任务的拼凑。《Tuniu Weekl...

weixin_34092370的博客 136
上一篇: scp 远程拷贝
下一篇: Go Web编程 谢大 NO.3-其他章
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值