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

中国建设网官方网站建筑工程税率装修平台哪个口碑最好

中国建设网官方网站建筑工程税率,装修平台哪个口碑最好,网站 动态 静态,重庆工程信息网官网首页问题描述#xff1a; 在go程序中#xff0c;通过执行一个命令启动一个子命令#xff0c;并通过pipe读取子程序的标准输入和输出#xff0c;通过scanner默认按行读取#xff0c;此时如果子程序输出时没有携带’\n’#xff0c;scanner就不会打印输出#xff0c;而是会累…问题描述 在go程序中通过执行一个命令启动一个子命令并通过pipe读取子程序的标准输入和输出通过scanner默认按行读取此时如果子程序输出时没有携带’\n’scanner就不会打印输出而是会累积到缓存buf上限最终被丢弃直到遇到一个\n然后输出所有的内容默认buf缓存上限时65536如果日志打印处还有限制如glog就限制最大的打印字节数为4096那么就会导致日志再次丢失。 解决方法 不适用scanner去按行读取直接读取管道的内容然后设置上限超过时或者遇到’\n’时打印 测试代码 子程序 #include stdio.h #include unistd.hint main() { int count 0;while (1) {fprintf(stderr, %d, count);count (count 1) % 10;usleep(500); // Sleep for 500,000 microseconds (0.5 seconds) }return 0; }主程序 package mainimport (bufiofmtos/execstringslog )func main() {cmd : exec.Command(./test)stdout, err : cmd.StdoutPipe()if err ! nil {fmt.Println(Error creating StdoutPipe:, err)return}cmd.Stderr cmd.Stdouterr cmd.Start()if err ! nil {fmt.Println(Error starting command:, err)return}scanner : bufio.NewScanner(stdout)// scanner.Split(bufio.ScanBytes)// buf : // for scanner.Scan() {// buf scanner.Text()// if strings.Contains(buf, \n) || len(buf) 256 {// log.Printf(%s, buf)// buf // }// }for scanner.Scan() {log.Printf(%s, scanner.Text())}if err : scanner.Err(); err ! nil {fmt.Println(Error reading standard output:, err)}err cmd.Wait()if err ! nil {fmt.Println(Error waiting for command to finish:, err)} } 修改程序 package mainimport (bufiofmtiologos/exec )func getReaderSize(rd io.Reader) {b, ok : rd.(*bufio.Reader)if ok {log.Printf(rd size: %d, b.Size())} else {log.Printf(rd is not bufio.Reader)} }func main() {// Command to executecmd : exec.Command(./test)// Create a pipe to capture the standard output of the commandstdout, err : cmd.StdoutPipe()if err ! nil {fmt.Println(Error creating StdoutPipe:, err)return}cmd.Stderr cmd.Stdout// Start the commanderr cmd.Start()if err ! nil {fmt.Println(Error starting command:, err)return} Create a scanner to read the commands standard output//scanner : bufio.NewScanner(stdout)//scanner.Split(bufio.ScanBytes)// Read and print each line from the output//buf : make([]byte, 256)//bufLen : 0//for scanner.Scan() {// buf[bufLen] scanner.Bytes()[0]// // buf append(buf, scanner.Bytes()...)// bufLen 1// if buf[bufLen-1] \n || bufLen 256 {// log.Printf(%s, string(buf[:bufLen]))// bufLen 0// }//}// Check for errors in scanning//if err : scanner.Err(); err ! nil {// fmt.Println(Error reading standard output:, err)//}// Create a buffered reader to read from the commands stdoutreader : bufio.NewReaderSize(stdout, 256)getReaderSize(stdout)log.Printf(reader size: %d, reader.Size()) Buffer to store incomplete lines//var incompleteLine []byte// Buffer to read chunks of bytes//chunk : make([]byte, 256)////for {// // Read a chunk of bytes// n, err : reader.Read(chunk)// if err ! nil {// break // Break the loop when an error occurs (e.g., when the command finishes)// }//// // Process each byte in the chunk// for i : 0; i n; i {// b : chunk[i]//// // Check for newline or length exceeding 256// if b \n || len(incompleteLine) 256 {// // Print the line// log.Printf(%s, incompleteLine)//// // Reset the incomplete line buffer// incompleteLine nil// } else {// // Add the byte to the incomplete line buffer// incompleteLine append(incompleteLine, b)// }// }//}for {s, err : reader.ReadSlice(\n)if err ! nil err ! bufio.ErrBufferFull {if len(s) 0 {log.Printf(reader err but exist data, reader size: %d, read string size: %d, string: %s, reader.Size(), len(s), string(s))}fmt.Println(Error reader ReadString:, err)break // Break the loop when an error occurs (e.g., when the command finishes)}log.Printf(reader size: %d, read string size: %d, string: %s, reader.Size(), len(s), string(s))}// Wait for the command to finisherr cmd.Wait()if err ! nil {fmt.Println(Error waiting for command to finish:, err)} } benchmark test: package mainimport (strconvstringstesting )func stringTest1() string {var buf stringfor i : 0; i 256; i {buf strconv.Itoa(i)}return buf }func stringTest2() string {var buf strings.Builderfor i : 0; i 256; i {buf.Write([]byte(strconv.Itoa(i)))}return buf.String() }func stringTest3() string {var buf make([]byte, 0)for i : 0; i 256; i {buf append(buf, []byte(strconv.Itoa(i))...)}return string(buf) }func stringTest4() string {var buf make([]byte, 256)for i : 0; i 256; i {buf[i] 1}return string(buf) }func BenchmarkStringTest1(b *testing.B) {for i : 0; i b.N; i {stringTest1()} } func BenchmarkStringTest2(b *testing.B) {for i : 0; i b.N; i {stringTest2()} } func BenchmarkStringTest3(b *testing.B) {for i : 0; i b.N; i {stringTest3()} } func BenchmarkStringTest4(b *testing.B) {for i : 0; i b.N; i {stringTest4()} }benchmark test cmd: go test -bench . -benchmem go test -benchfunction
http://www.w-s-a.com/news/968038/

相关文章:

  • 济南网站建设是什么百度官网登录入口手机版
  • net快速建站西宁手机网站建设
  • 网站浏览器不兼容怎么办软件系统开发大概多少钱
  • 网站建设哪个公司最好shift wordpress
  • 公司网站建设功能介绍室内设计学习
  • 做网站策划容易遇到哪些问题沈阳公司网站制作
  • 做php网站都用框架吗网站备案当面核验拍摄照片
  • 泉州企业自助建站兰州最好的互联网公司
  • 监察部门网站建设方案网站seo技术教程
  • 个人网站制作源代码下载品牌建设部
  • 网站备案需要准备什么文创产品设计思路
  • 网站开发书籍推荐青岛城阳新闻最新消息
  • 秦皇岛网站建设服务聊城做网站的公司资讯
  • 30岁转行做网站设计丰涵网站建设
  • 山东省和住房建设厅网站首页开发商不按时交房可以退房吗
  • asp网站怎么做404页面跳转本地南通网站建设
  • 点击网站出现微信二维码的链接怎么做申请网站空间怎么做
  • 网站开发的论文题目广告设计排行榜
  • 网络营销网站 功能南京h5制作公司
  • 做网站的费用的会计分录合肥做网站推广哪家好
  • 电子商城网站开发怎么wordpress用的什么主题
  • 榆林电商网站建设网上做试卷的网站
  • 文山网站建设代理中公教育培训机构官网
  • 郑州it培训机构有哪些上海外贸网站seo
  • dw做网站的实用特效广东住房与城乡建设厅网站
  • 模板网站 动易哪方面的网站
  • 怎么给网站做外链邵连虎郑州做网页的公司
  • 重庆网站开发哪家好宁波网站建设caiyiduo
  • 手机网站建设价格手机网站模版更换技巧
  • 哈尔滨松北区建设局网站美妆网站建设