• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

[go]从os.Stdin探究文件类源码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

咋一看go的标准输入输出函数有一箩筐. 细究了一下.

- 从标准输入获取输入
fmt.Scan   以空白(空格或换行)分割,值满后无结束
fmt.Scanln 以空格作为分割,遇到换行结束
fmt.Scanf  以空格作为分隔符,回车结束

- 从字符串获取输入
fmt.Sscan
fmt.Sscanln
fmt.Sscanf

- 从文件获取输入
fmt.Fscan
fmt.Fscanln
fmt.Fscanf



- 输出
fmt.Print
fmt.Println
fmt.Printf

- 格式化输出并返回str
fmt.Sprint
fmt.Sprintln
fmt.Sprintf

fmt.Scan使用参考

Go语言标准库之fmt.Scan - aaronthon - 博客园

os.Stdin使用

os.Stdin.Write
os.Stdin.WriteSring
Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
func NewFile(fd uintptr, name string) *File {
	h := syscall.Handle(fd)
	if h == syscall.InvalidHandle {
		return nil
	}
	return newFile(h, name, "file")
}
func newFile(h syscall.Handle, name string, kind string) *File {
	if kind == "file" {
		var m uint32
		if syscall.GetConsoleMode(h, &m) == nil {
			kind = "console"
		}
		if t, err := syscall.GetFileType(h); err == nil && t == syscall.FILE_TYPE_PIPE {
			kind = "pipe"
		}
	}

	f := &File{&file{
		pfd: poll.FD{
			Sysfd:         h,
			IsStream:      true,
			ZeroReadIsEOF: true,
		},
		name: name,
	}}
	runtime.SetFinalizer(f.file, (*file).close)

	// Ignore initialization errors.
	// Assume any problems will show up in later I/O.
	f.pfd.Init(kind, false)

	return f
}
type File struct {
	*file // os specific
}
type file struct {
	pfd        poll.FD
	name       string
	dirinfo    *dirInfo // nil unless directory being read
	appendMode bool     // whether file is opened for appending
}


func (f *File) WriteString(s string) (n int, err error) {
	return f.Write([]byte(s))
}

简化如下

type File struct{
   *file
}


//绑定方法
func(f *File)Write(){

}
func(f *File)WriteString(){

}


//构造方法
func newFile(){
    return &File{}
}

os.Stdin = newFile(xxx)

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
构建 Go 应用 docker 镜像的十八种姿势发布时间:2022-07-10
下一篇:
Go语言的构建方法总结发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap