当前位置: 首页 > news >正文

Golang学习笔记_22——Reader示例

Golang学习笔记_19——Stringer
Golang学习笔记_20——error
Golang学习笔记_21——Reader


文章目录

    • `io.Reader` 示例
      • 从字符串中读取
      • 从文件中读取
      • 从HTTP响应中读取
      • 从内存的字节切片中读取
      • 自定义`io.Reader`实现
    • 源码


io.Reader 示例

从字符串中读取

func ReadFromStrDemo() {str := "hello world"reader := bufio.NewReader(strings.NewReader(str))buf := make([]byte, 2)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}

测试方法

func TestReadFromStrDemo(t *testing.T) {ReadFromStrDemo()
}

输出结果

=== RUN   TestReadFromStrDemo
he
ll
o 
wo
rl
d
--- PASS: TestReadFromStrDemo (0.00s)
PASS

从文件中读取

func ReadFromFileDemo() {file, err := os.Open("test.txt")if err != nil {fmt.Println("Error opening file", err)return}defer file.Close()reader := bufio.NewReader(file)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}

测试方法

func TestReadFromFileDemo(t *testing.T) {ReadFromFileDemo()
}

输出结果

=== RUN   TestReadFromFileDemo
h
e
l
l
oi
o
.
R
e
a
d
e
r
--- PASS: TestReadFromFileDemo (0.00s)
PASS

从HTTP响应中读取

func ReadFromHTTPResponseDemo() {resp, err := http.Get("https://www.bing.com")if err != nil {fmt.Println("Error", err)return}defer resp.Body.Close()if resp.StatusCode != http.StatusOK {fmt.Println("StatusCode", resp.StatusCode)return}body, err := io.ReadAll(resp.Body)if err != nil {fmt.Println("Error", err)return}fmt.Println(string(body))}

测试文件

func TestReadFromHTTPResponseDemo(t *testing.T) {ReadFromHTTPResponseDemo()
}

输出结果

=== RUN   TestReadFromHTTPResponseDemo
<!doctype html><html lang="zh" dir="ltr"><head><meta name="theme-color" content="#4F4F4F" /><meta name="description" content="使用 Microsoft 必应进行搜索,并利用 AI 的强大功能查找信息、浏览网页、图像、视频、地图等。为永远充满好奇心的人提供的智能搜索引擎。" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta property="fb:app_id" content="3732605936979161" /><meta property="og:type" content="website" /><meta property="og:title" content="变换的地平线" /><meta property="og:image" content="https://www.bing.com/th?id=OHR.NamibiaDunes_ZH-CN5102483490_tmb.jpg&amp;rf=" /><meta property="og:image:width" content="1366" /><meta property="og:image:height" content="768" /><meta property="og:url" content="https://www.bing.com/?form=HPFBBK&amp;ssd=20250108_1600&amp;mkt=zh-CN" /><meta property="og:site_name" content="搜索 - Microsoft 必应" /><meta property="og:description" content="想象在日出时分,连绵起伏的沙丘泛着橙色光芒,延伸至视野尽头,欢迎来到横跨纳米比亚数千英里的纳米布沙漠" /><title>搜索 - Microsoft 必应</title><link href="https://cn.bing.com/" rel="canonical" /><link rel="preconnect" href="https://r.bing.com" /><link rel="preconnect" href="https://r.bing.com" crossorigin/><link rel="dns-prefetch" href="https://r.bing.com" /><link rel="dns-prefetch" href="https://r.bing.com" crossorigin/><link rel="stylesheet" href="/rp/RCJCS6O5TykkUhXX1pwc6RsdyuI.gz.css" type="text/css"/><script type="text/javascript" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(n){for(var t,r,i=1,u=arguments.length;i<u;i++){t=arguments[i];for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n},__assign.apply(this,arguments)},logE=function(n,t,i){t===void 0&&(t=null);i===void 0&&(i="ClientInst");var r=[__assign({T:"CI.".concat(i),FID:"CI",Name:n},t&&{Text:t})],u="".concat(_G.lsUrl,"&Type=Event.ClientInst&DATA=").concat(encodeURIComponent(JSON.stringify(r)));(new Image).src=u},CSPIF;window.CSPEL=[];CSPIF=function(n){var t="clarity",i="CSPViolation",r,u;return(window[t]&&(window[t]("set",i,n.sample),window[t]("event",i)),r=["chrome-extension"],u=["javascript:void(0)","javascript: void(0)"],r.some(function(t){return n.sourceFile.includes(t)})||u.some(function(t){return n.sample.includes(t)}))?!0:window.CSPEL.includes(n.sample)?!0:(window.CSPEL.push(n.sample),!1)};try{var ignErr=["ResizeObserver loop","Script error"],ignCSPErr=["unsafe-eval"],maxErr=3,ignoreCurrentError=function(n,t){return(ignErr.some(function(t){return n.includes(t)})||ignCSPErr.some(function(t){return n.includes(t)}))?ignCSPErr.some(function(t){return n.includes(t)})&&t.filename&&!t.filename.includes("chrome-extension://")?!1:(t!=null&&(typeof sj_sp!="undefined"&&sj_sp(t),typeof sj_pd!="undefined"&&sj_pd(t)),!0):!1},regexEsc=function(n){return n.replace(/([.?*+^$&[\]\\(){}|<>-])/g,"\\$1")},ignoreCSPLog=function(n){return["javascript:void(0)","javascript: void(0)","javascript:void()"].some(function(t){return n.sample.includes(t)})};window.jsErrorHandler=function(n){var f,p,h,rt,ut,u,e,ft,o,a,v,s;try{if(f='"noMessage"',p=(n.error||n).message||f,ignoreCurrentError(p,n))return;if(h=(window.ERC?window.ERC:0)+1,window.ERC=h,h>maxErr){logE("max errors reached");return}var c=n.error||n,w=n.filename,b=n.lineno,k=n.colno,d=n.extra,l=c.severity||"Error",g=c.message||f,i=c.stack,t='"'+escape(g.replace(/"/g,""))+'"',nt=new RegExp(regexEsc(location.href),"g"),tt=window.lirab,it=window.liraa,r=tt?" hint == ["+tt:"";if(r=r+(it?", "+it+")":r?"]":""),i){for(rt=/\(([^\)]+):[0-9]+:[0-9]+\)/g,u={};(ut=rt.exec(i))!==null;)e=ut[1],u[e]?u[e]++:u[e]=1;o=0;for(a in u)u[a]>1&&(v=regexEsc(a),ft=new RegExp(v,"g"),i=i.replace(ft,o),i+="#"+o+"="+v,o++);i=i.replace(nt,"self").replace(/"/g,"");t+=',"Stack":"'+(escape(i)+'"')}if(w?t+=',"Meta":"'+escape(w.replace(nt,"self"))+r+'"':r&&(t+=',"Meta":"'+r+'"'),b&&(t+=',"Line":"'+b+'"'),k&&(t+=',"Char":"'+k+'"'),d&&(t+=',"ExtraInfo":"'+d+'"'),g===f)if(l="Warning",t+=',"ObjectToString":"'+n.toString()+'"',JSON&&JSON.stringify)t+=',"JSON":"'+escape(JSON.stringify(n))+'"';else for(s in n)n.hasOwnProperty(s)&&(t+=',"'+s+'":"'+n[s]+'"');var et=(new Date).getTime(),ot='"T":"CI.'+l+'","FID":"CI","Name":"JS'+l+'","Text":'+t+"",st="<E><T>Event.ClientInst<\/T><IG>"+_G.IG+"<\/IG><TS>"+et+"<\/TS><D><![CDATA[[{"+ot+"}]]\]><\/D><\/E>",ht="<ClientInstRequest><Events>"+st+"<\/Events><STS>"+et+"<\/STS><\/ClientInstRequest>",y=new XMLHttpRequest;y.open("POST","/fd/ls/lsp.aspx?",!0);y.setRequestHeader("Content-Type","text/xml");y.send(ht);typeof sj_evt!="undefined"&&sj_evt.fire("ErrorInstrumentation",t)}catch(ct){logE("MetaJSError","Failed to execute error handler. "+ct.message)}};window.CSPEH=function(n){CSPIF(n)||logE("CSPViolation",n.sample,"Error")};window.addEventListener&&(window.addEventListener("error",window.jsErrorHandler,!1),window.addEventListener("unhandledrejection",window.jsErrorHandler,!1),window.addEventListener("securitypolicyviolation",window.CSPEH))}catch(e){logE("MetaJSError","Failed to bind error handler "+e.message)};
//]]></script></head><body><div class="hp_body"><div class="hpl hp_cont"><div class="sbox"><form action="/search" id="sb_form" class="sb_form"><input id="sb_form_q" class="sb_form_q" name="q"placeholder="" type="search" maxlength="1000" autocapitalize="off" autocomplete="off" spellcheck="false"title="输入搜索词" autofocus="autofocus" ) /><input id="sb_form_go" type="submit"title="搜索" name="search" value=""tabIndex="0" /><label for="sb_form_go" class="search icon tooltip" aria-label="搜索网页"><svg viewBox="0 0 25 25" enable-background="new 0 0 25 25"><path stroke="#007DAA" stroke-width="2.5" stroke-linecap="round" stroke-miterlimit="10" fill="none" d="M23.75 23.75l-9-9" /><circle stroke="#007DAA" stroke-width="2.5" stroke-linecap="round" stroke-miterlimit="10" cx="9" cy="9" r="7.75" fill="none" /><path fill="none" d="M25 25h-25v-25h25z" /></svg></label><input type="hidden" value="QBLH" name="form" /></form><a id="hpinsthk" aria-hidden="true" tabindex="-1" class="linkBtn" href="javascript:void(0)" h="ID=SERP,5067.1"><span></span></a></div></div><div class="hpl bottom_row"><div class="scroll_cont" id="scroll_cont"><footer class="footer no_mod " id="footer"><div class="footerbody "><span class="msft">&#169; 2025 Microsoft</span><ul class="items"><li class="item"><a id="ICPLicense" href="https://dxzhgl.miit.gov.cn/dxxzsp/xkz/xkzgl/resource/qiyereport.jsp?num=caf04fa4-bd8a-4d9e-80b6-2aa1b86c1509&amp;type=yreport" h="ID=SERP,5068.1">增值电信业务经营许可证:合字B2-20090007</a></li><li class="item"><a id="ICPFiling" href="https://beian.miit.gov.cn" h="ID=SERP,5069.1">京ICP备10036305号-7</a></li><li class="item"><a id="MMAIS" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010802022657" h="ID=SERP,5070.1">京公网安备11010802022657号</a></li><li class="item"><a id="privacy" href="//go.microsoft.com/fwlink/?LinkId=521839" h="ID=SERP,5071.1">隐私与 Cookie</a></li><li class="item"><a id="legal" href="//go.microsoft.com/fwlink/?LinkID=246338" h="ID=SERP,5072.1">法律声明</a></li><li class="item"><a id="" href="//go.microsoft.com/fwlink/?linkid=868923" h="ID=SERP,5073.1">广告</a></li><li class="item"><a id="" href="//go.microsoft.com/fwlink/?LinkID=286759" h="ID=SERP,5074.1">关于我们的广告</a></li><li class="item"><a id="help" href="//support.microsoft.com/topic/82d20721-2d6f-4012-a13d-d1910ccf203f" h="ID=SERP,5075.1">帮助</a></li><li class="item"><a id="sb_feedback" href="#" h="ID=SERP,5076.1">反馈</a></li></ul></div></footer></div></div></div><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="https://r.bing.com/rs/6r/fU/jnc,nj/tlifxqsNyCzxIJnRwtQKuZToQQw.js?or=n"></script><script type="text/javascript" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
_G={Region:"CN",Lang:"zh-CN",ST:(typeof si_ST!=='undefined'?si_ST:new Date),Mkt:"zh-CN",RevIpCC:"cn",RTL:false,Ver:"02",IG:"FF4EF23145174E85AD474F918FF1DBA7",EventID:"677f654f27004b968703ecd7c0d95c04",V:"homepage",P:"SERP",DA:"MWHE01",CID:"38558B11726A671F048D9E7E73306660",SUIH:"WRx5BKryomwCvf4uGF4x7w",adc:"b_ad",EF:{bmasynctrigger:1,getslctspt:1,newtabsloppyclick:1,chevroncheckmousemove:1,sharepreview:1,shareoutimage:1,sharefixreadnum:1,sharepreviewthumbnailid:1,shareencodefix:1,chatskip2content:1,fablogfix:1},gpUrl:"\/fd\/ls\/GLinkPing.aspx?" }; _G.lsUrl="/fd/ls/l?IG="+_G.IG+"&CID="+_G.CID ;curUrl="https:\/\/cn.bing.com\/";_G.EnableCompression=false;_G.DirectLogFlight=0;function si_T(a){ if(document.images){_G.GPImg=new Image;_G.GPImg.src=_G.gpUrl+'IG='+_G.IG+'&CID='+_G.CID+'&'+a;}return true;}_G.BAT="0";_G.NTT="600000";_G.CTT="3000";_G.BNFN="Default";_G.LG="160";_G.FilterFlareInterval=5;;
//]]></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/ACby6guiuiyuEYRTFOH8no-JKCo.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/sTqO8BLDL3SMwm5-DmlL0eodCJk.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/PVEp6LmF7FGQF4_wW3Ri1trRPv4.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/oJtq_u9TBV7TshzGOx6yvnobEEU.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/PrUVzF4hlCEHR6XAp8AR6euT5OM.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/qN3rmGYj9Qsn6JmjzmYclpmfCHI.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/omjewb8RA_1ed-86jqIwN_f_ON8.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/9RU9Mo45ZvCytDGnLCWS0LulULU.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/svYzgo4yD9vzUlVytiD-v2lepRM.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="https://r.bing.com/rb/5U/jnc,nj/P2x0V8oF_ckBp8Ub5FlrxazIArQ.js?bu=BuAE5ATmBKMEzwTsBA&or=n"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/ICf9X-WMafiZOnS_3M9RpM8994E.gz.js"></script><script type="text/javascript" crossorigin="anonymous" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=" src="/rp/nIt_N_kpXwbKZc4NbcR2zfSrv0E.gz.js"></script><script type="text/javascript" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
_w.rms.js({'A:rms:answers:Shared:BingCore.Bundle':'\/rp\/yvav1_QXkA6zP3dpoNUdncQpO8o.gz.js'},{'A:rms:answers:Feedback:FeedbackAccessibility':'\/rp\/peNl4yUB4P3PwDM4J7NWGzi8hKM.gz.js'},{'A:AppendHTML':'https:\/\/r.bing.com\/rs\/6r\/lz\/nj\/pxzfjFIjWTDQikh0A5aT_cguYyc.js?or=n'},{'A:AjaxLoad':'https:\/\/r.bing.com\/rs\/6r\/lN\/nj\/EmG-XMIMCcq8zmcVBBO7jkFERAE.js?or=n'},{'A:rms:answers:Feedback:FeedbackBootstrapBundle':'\/rp\/FfXzXdr8vxge7bE3bEZV_NYyNIE.gz.js'},{'A:0':0},{'A:rms:answers:BoxModel:Rules':'\/rp\/N0NZj2UoTgAcpHMO-3FYmE5C7G4.gz.js'},{'A:rms:answers:BoxModel:TriggerFirstChunk':'\/rp\/iuYNUHE3kZrz6Jrb0_Mf0yBFZN0.gz.js'},{'A:rms:answers:BoxModel:ViewportQueue':'\/rp\/8srl0LOx92Ew0yyAq2m2e33cq7I.gz.js'},{'A:rms:answers:BoxModel:LayoutQueue':'\/rp\/Mt62GUgrdySmO3Hz6WvsY51OVCM.gz.js'},{'A:rms:answers:BoxModel:EventQueue':'\/rp\/8AigLIxHhxH6NCSV3aSsPWpKiRs.gz.js'},{'A:rms:answers:BoxModel:Framework':'\/rp\/TLp8x4XeidQ-QJsLYxakNdnyojQ.gz.js'});;
//]]></script><div id="aRmsDefer"><script type="text/rms" nonce="NswLywYcmcprKdDH3kMxFF5vl+yeKu1radXvoCmwxVY=">//<![CDATA[
Feedback.Bootstrap.InitializeFeedback({page:true},"sb_feedback",1,0,0);;
//]]></script></div></body></html>
--- PASS: TestReadFromHTTPResponseDemo (1.40s)
PASS

从内存的字节切片中读取

func ReadFromMemoryDemo() {data := []byte("hello io.Reader")reader := bytes.NewReader(data)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}

测试方法

func TestReadFromMemoryDemo(t *testing.T) {ReadFromMemoryDemo()
}

输出结果

=== RUN   TestReadFromMemoryDemo
h
e
l
l
oi
o
.
R
e
a
d
e
r
--- PASS: TestReadFromMemoryDemo (0.00s)
PASS

自定义io.Reader实现

// 自定义io.Reader实现
type myReader struct {data []bytepos  int
}func (mr *myReader) Read(p []byte) (int, error) {n := copy(p, mr.data[mr.pos:])mr.pos += nif mr.pos >= len(mr.data) {return n, io.EOF}return n, nil
}func ReadFromMyReaderDemo() {data := []byte("hello io.Reader")reader := &myReader{data, 0}buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}

测试方法

func TestReadFromMyReaderDemo(t *testing.T) {ReadFromMyReaderDemo()
}

输出结果

=== RUN   TestReadFromMyReaderDemo
h
e
l
l
oi
o
.
R
e
a
d
e
r
--- PASS: TestReadFromMyReaderDemo (0.00s)
PASS

源码

// reader_demo_2.go 文件
package reader_demoimport ("bufio""bytes""fmt""io""net/http""os""strings"
)func ReadFromStrDemo() {str := "hello world"reader := bufio.NewReader(strings.NewReader(str))buf := make([]byte, 2)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}func ReadFromFileDemo() {file, err := os.Open("test.txt")if err != nil {fmt.Println("Error opening file", err)return}defer file.Close()reader := bufio.NewReader(file)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}func ReadFromHTTPResponseDemo() {resp, err := http.Get("https://www.bing.com")if err != nil {fmt.Println("Error", err)return}defer resp.Body.Close()if resp.StatusCode != http.StatusOK {fmt.Println("StatusCode", resp.StatusCode)return}body, err := io.ReadAll(resp.Body)if err != nil {fmt.Println("Error", err)return}fmt.Println(string(body))}func ReadFromMemoryDemo() {data := []byte("hello io.Reader")reader := bytes.NewReader(data)buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}// 自定义io.Reader实现
type myReader struct {data []bytepos  int
}func (mr *myReader) Read(p []byte) (int, error) {n := copy(p, mr.data[mr.pos:])mr.pos += nif mr.pos >= len(mr.data) {return n, io.EOF}return n, nil
}func ReadFromMyReaderDemo() {data := []byte("hello io.Reader")reader := &myReader{data, 0}buf := make([]byte, 1)for {n, err := reader.Read(buf)if err != nil && err != io.EOF {fmt.Println("Error reading", err)break}if n == 0 {break}fmt.Println(string(buf[:n]))if err == io.EOF {break}}
}
// readder_demo_2_test.go 文件
package reader_demoimport "testing"func TestReadFromStrDemo(t *testing.T) {ReadFromStrDemo()
}func TestReadFromFileDemo(t *testing.T) {ReadFromFileDemo()
}func TestReadFromHTTPResponseDemo(t *testing.T) {ReadFromHTTPResponseDemo()
}func TestReadFromMemoryDemo(t *testing.T) {ReadFromMemoryDemo()
}func TestReadFromMyReaderDemo(t *testing.T) {ReadFromMyReaderDemo()
}

相关文章:

Golang学习笔记_22——Reader示例

Golang学习笔记_19——Stringer Golang学习笔记_20——error Golang学习笔记_21——Reader 文章目录 io.Reader 示例从字符串中读取从文件中读取从HTTP响应中读取从内存的字节切片中读取自定义io.Reader实现 源码 io.Reader 示例 从字符串中读取 func ReadFromStrDemo() {str…...

【2024年华为OD机试】(A卷,100分)- 猜字谜(Java JS PythonC/C++)

一、问题描述 小王设计了一个简单的猜字谜游戏&#xff0c;游戏的谜面是一个错误的单词&#xff0c;比如 nesw&#xff0c;玩家需要猜出谜底库中正确的单词。猜中的要求如下&#xff1a; 对于某个谜面和谜底单词&#xff0c;满足下面任一条件都表示猜中&#xff1a; 变换顺序…...

iostat命令详解

iostat 命令是 I/O statistics(输入/输出统计)的缩写&#xff0c;用来报告系统的 CPU 统计信息和块设备及其分区的 IO 统计信息。iostat 是 sysstat 工具集的一个工具&#xff0c;在 Ubuntu 系统中默认是不带 iostat 命令的&#xff0c;需要自行安装&#xff1a; $ sudo apt in…...

Linux:操作系统简介

前言&#xff1a; 在本片文章&#xff0c;小编将带大家理解冯诺依曼体系以及简单理解操作喜欢&#xff0c;并且本篇文章将围绕什么以及为什么两个话题进行展开说明。 冯诺依曼体系&#xff1a; 是什么&#xff1a; 冯诺依曼体系&#xff08;Von Neumann architecture&#xff…...

企业级信息系统开发讲课笔记4.12 Spring Boot默认缓存管理

文章目录 1. Spring Boot默认缓存管理2. Spring的缓存机制2.1 缓存机制概述2.2 缓存接口和缓存管理接口3. 声明式缓存注解3.1 @EnableCaching注解3.2 @Cacheable注解3.2.1 value/cacheNames属性3.2.2 key属性3.2.3 keyGenerator属性3.2.4 cacheManager/cacheResolver属性3.2.5 …...

2025制定一个高级java开发路线:分布式系统、多线程编程、高并发经验

1-熟悉分布式系统的设计和应用&#xff0c;熟悉分布式、缓存、消息、负载均衡等机制和实现者优先。 2-熟悉多线程编程&#xff0c;具备高并发经验优先。 技术学习规划&#xff1a;熟悉分布式系统和高并发技术 以下是针对目标要求的系统性学习规划&#xff0c;分为 阶段目标 和…...

20250110_ PyTorch中的张量操作

文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理&#xff1a; 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来&#xff0c;具体地是…...

hadoop-yarn常用命令

一、YARN命令介绍 1. YARN命令简介 YARN提供了一组命令行工具&#xff0c;用于管理和监控YARN应用程序和集群。 2. yarn application命令 (1) yarn application命令的基本语法 yarn application命令的基本语法如下&#xff1a; yarn application [genericOptions] [comma…...

LabVIEW滤波器功能

程序通过LabVIEW生成一个带噪声的正弦波信号&#xff0c;并利用滤波器对其进行信号提取。具体来说&#xff0c;它生成一个正弦波信号&#xff0c;叠加高频噪声后形成带噪信号&#xff0c;再通过低通滤波器滤除噪声&#xff0c;提取原始正弦波信号。整个过程展示了信号生成、噪声…...

【Unity3D日常开发】Unity3D中打开Window文件对话框打开文件(PC版)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 这篇文章继续讲如何使用Unity3D打开Window文…...

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作&#xff0c;不同的仿真平台有不同的建模语言&#xff0c;但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…...

【centos】校时服务创建-频率修改

在 NTP 配置中&#xff0c;校时频率通常是由 NTP 协议自动管理的&#xff0c;NTP 会根据网络延迟和时间偏差动态调整校时频率。不过&#xff0c;您可以通过配置文件中的一些参数来影响 NTP 的行为。 如果想要更改 NTP 的校时频率&#xff0c;可以考虑以下几个方面&#xff1a;…...

J.U.C(1)

目录 JUC&#xff08;一&#xff09;一&#xff1a;AQS二&#xff1a;reentrantlock原理1&#xff1a;加锁&#xff1a;2&#xff1a;解锁3&#xff1a;可重入锁原理4&#xff1a;可打断原理5&#xff1a;公平锁原理6&#xff1a;条件变量 三&#xff1a;读写锁&#xff08;ree…...

计算机网络之---静态路由与动态路由

静态路由 静态路由是由网络管理员手动配置并固定的路由方式。路由器通过静态配置的路由条目来转发数据包&#xff0c;而不会自动调整。它不依赖于任何路由协议。 特点&#xff1a; 手动配置&#xff1a;网络管理员需要手动在路由器中配置每条静态路由。不自动更新&#xff1a;…...

Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书

文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...

C++----STL(string)

引言&#xff1a;STL简介 什么是STL STL(standard template libaray-标准模板库)&#xff1a; 是 C标准库的重要组成部分&#xff08;注意&#xff1a;STL只是C标准库里的一部分&#xff0c;cin和cout也是属于C标准库的&#xff09;&#xff0c;不仅是一个可复用的组件库&…...

利用 Java 爬虫从 yiwugo 根据 ID 获取商品详情

在当今数字化时代&#xff0c;数据是商业决策的关键。对于从事国际贸易的商家来说&#xff0c;精准获取商品的详细信息至关重要。yiwugo 是一个知名的国际贸易平台&#xff0c;拥有海量的商品数据。通过 Java 爬虫技术&#xff0c;我们可以高效地从 yiwugo 根据商品 ID 获取详细…...

vue2修改表单只提交被修改的数据的字段传给后端接口

效果&#xff1a; 步骤一、 vue2修改表单提交的时候&#xff0c;只将修改的数据的字段传给后端接口&#xff0c;没有修改得数据不传参给接口。 在 data 对象中添加一个新的属性&#xff0c;用于存储初始表单数据的副本&#xff0c;与当前表单数据进行比较&#xff0c;找出哪些…...

Flink类加载机制详解

1. 总览 在运行Flink应用时,它会加载各种类,另外我们用户代码也会引入依赖,由于他们依赖版本以及加载顺序等不同,就可能会导致冲突,所以很要必要了解Flink是如何加载类的。 根据加载的来源的不同,我们可以将类分为三种: Java Classpath:Java类路径下,这是Java通用的…...

ClickHouse大数据准实时更新

一、问题背景 最近有一个项目需求&#xff0c;需要对日活跃的3万辆车的定位数据进行分析&#xff0c;并支持查询和统计分析结果。每辆车每天产生1条分析结果数据&#xff0c;要求能够查询过去一年内的所有分析结果。因此&#xff0c;每月需要处理约90万条记录&#xff0c;一年大…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...