- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章go语言基础 seek光标位置os包的使用由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
语法:
os.Open()-->*File,err ***** 。
File.Seek(offset, whence),设置光标的未知 。
offset,偏移量 。
whence,从哪开始:0从头,1当前,2末尾 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package main
import (
"os"
"fmt"
)
func main() {
/*
seek(offset int, whence int),表示设置光标的位置
offset int,设置多少个字节
whence int,从哪开始
0,距离文件开头
1,当前的位置
2,距离文件末尾
*/
//file,_:= os.Open("C:\\liu\\pro\\aa.txt") //RDONLY
file,_:=os.OpenFile("C:\\liu\\pro\\aa.txt",os.O_RDWR,0)
//1.打开文件后,光标默认在文件开头。
bs := make([] byte, 1)
defer file.Close()
//2.seek()
//设置光标的位置在:距离文件开头,4个字节处。
//file.Seek(8,0)
count, _:= file.Read(bs)
fmt.Println(string(bs[:count])) //a
file.Seek(4,2)
//count, _= file.Read(bs)
//fmt.Println(string(bs[:count])) //
file.Write([]byte{65,66,67})
fmt.Println("写完了。。")
}
|
补充:Go语言-命令行参数(os.Args, flag包) 。
大部分Go程序都是没有UI的,运行在纯命令行的模式下,该干什么全靠运行参数.
这里介绍下Go语言命令行程序和他们的参数.
1. os.Args 。
程序获取运行他时给出的参数,可以通过os包来实现。先看代码:
1
2
3
4
5
6
7
8
9
10
11
|
package main
import (
"fmt"
"os"
"strconv"
)
func main () {
for idx, args := range os.Args {
fmt.Println("参数" + strconv.Itoa(idx) + ":", args)
}
}
|
运行起来得到的如下:
$go run main.go 1 3 -X ?
参数0: /tmp/go-build116558042/command-line-arguments/_obj/exe/main 。
参数1: 1 。
参数2: 3 。
参数3: -X 。
参数4: ?
可以看到,命令行参数包括了程序路径本身,以及通常意义上的参数.
程序中os.Args的类型是 []string ,也就是字符串切片。所以可以在for循环的range中遍历,还可以用 len(os.Args) 来获取其数量.
如果不想要输出os.Args的第一个值,也就是可执行文件本身的信息,可以修改上述程序:
1
|
for idx, args := range os.Args[1:] {
|
将range后面的切片,去掉第一个元素.
输出切片的所有元素,还有更简洁的方式:
1
2
3
4
5
|
fmt.Println(strings.Join(os.Args[1:], "\n"))
fmt.Println(os.Args[1:])
/*
后一种方式的结果是[1 3 -X ?],这是fmt.Println输出切片的格式
*/
|
2. flag包 。
flag包相比单纯的通过os.Args切片分析命令行参数,提供了更强的能力.
来看个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package main
import (
"fmt"
"flag"
)
var b = flag.Bool("b", false, "bool类型参数")
var s = flag.String("s", "", "string类型参数")
func main() {
flag.Parse()
fmt.Println("-b:", *b)
fmt.Println("-s:", *s)
fmt.Println("其他参数:", flag.Args())
}
------------------------------------
$ go run main.go
-b: false
-s:
其他参数: []
------------------------------------
$ go run main.go -b
-b: true
-s:
其他参数: []
------------------------------------
$ go run main.go -b -s test others
-b: true
-s: test
其他参数: [others]
------------------------------------
$ go run main.go -help
Usage of /tmp/go-build080353851/command-line-arguments/_obj/exe/main:
-b bool类型参数
-s string
string类型参数
exit status 2
|
2.1 定义参数 。
使用flag包,首先定义待解析命令行参数,也就是以"-"开头的参数,比如这里的 -b -s -help等。-help不需要特别指定,可以自动处理.
这里指定了两个参数,-b和-s:
1
2
3
4
5
6
|
var b = flag.Bool("b", false, "bool类型参数")
var s = flag.String("s", "", "string类型参数")
-----------------
原型:
func Bool(name string, value bool, usage string) *bool
func String(name string, value string, usage string) *string
|
通过flag.Bool和flag.String,建立了2个指针b和s,分别指向bool类型和string类型的变量。所以后续要通过 *b 和 *s 使用变量值.
flag.Bool和flag.String的参数有3个,分别是命令行参数名称,默认值,提示字符串.
参数 | 功能 |
---|---|
name | 命令行参数名称,比如 -b, -help |
value | 默认值,未显式指定的参数,给出隐式的默认值,比如本例中-b未给出的话,*b=false |
usage | 提示信息,如果给出的参数不正确或者需要查看帮助 -help,那么会给出这里指定的字符串 |
2.2 解析参数 。
flag使用前,必须首先解析:
1
|
flag.Parse()
|
2.3 使用参数 。
上文已经说明,通过flag方法定义好的参数变量指针,通过间接引用操作即可使用其内容:
1
2
|
fmt.Println("-b:", *b)
fmt.Println("-s:", *s)
|
2.4 未解析参数 。
参数中没有能够按照预定义的参数解析的部分,通过flag.Args()即可获取,是一个字符串切片.
1
|
fmt.Println("其他参数:", flag.Args())
|
需要注意的是,从第一个不能解析的参数开始,后面的所有参数都是无法解析的。即使后面的参数中含有预定义的参数:
1
2
3
4
|
$ go run main.go -b stop -s test others
-b: true
-s:
其他参数: [stop -s test others]
|
上面例子中,解析到stop,就已经无法继续解析了,即使后面给出了预定义好的-s,也是不能获取出来的.
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.
原文链接:https://blog.csdn.net/weixin_42100098/article/details/80148036 。
最后此篇关于go语言基础 seek光标位置os包的使用的文章就讲到这里了,如果你想了解更多关于go语言基础 seek光标位置os包的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
通过终端,您可以使用命令 - “SetFile -a B 文件名” 以编程方式,我认为我应该通过[[NSFileManager defaultManager] createDirectoryAtPat
嗨,正在尝试书中的一些示例:Practical Graph mining with R对于子图挖掘: library(subgraphMining) library(igraph) graph1 =
代码中的相同问题: class Foo { int getIntProperty () { ... } CustomObject getObjectProperty () { ... }
所以这可能是一个愚蠢的问题,但它已经困扰我一段时间了。 使用 React,我创建了两个组件(Buttons.js 和 Message.js),每个组件都有一个导出。但是,现在我希望将这两个组件用作 n
从今天早上开始,我发现我无法再从某个范围安装任何 NPM 包(或任何具有依赖项的包)。例如,如果我输入 npm i webpack 我会收到以下错误... npm ERR! code E401 npm
我在这里搜索过,Angular 2, @ngtools/webpack, AOT ,但对我不起作用。我运行了 npm install 命令。我正在做的是创建一个新的 Angular 2 项目。当我运行
情况: 我有一个 Swift 包,将其命名为 lib。 lib 位于其自己的存储库中。在lib的仓库中,有一堆本地包;也就是说,这些包是在 lib 中定义的,使用本地路径依赖格式 .package(p
我想在工作中学习和使用nodejs,但是在使用 de npm 命令安装模块/包时遇到网络问题。我是否可以使用我的家用计算机构建完整的 Node js 包,然后将其安装在另一台计算机(我的工作场所计算机
我需要将一些 .tar.bz2 格式的非 Python 包转换为 Anaconda/miniConda .egg 文件并安装它们。为此,我需要一个适用于 Windows 的 bld.bat 文件。互联
我需要共享库文件 libthrift-0.9.3.so 作为其他包的依赖项。我在构建 thrift-0.9.3 包时看到编译问题(我确实从 https://thrift.apache.org/down
我尝试在 R 版本 3.5.0 中安装“arcgisbinding”包。但是我失败了,得到以下错误和警告。 Installing package into ‘C:/Users/Lenovo/Docum
我尝试在 R 版本 3.5.0 中安装“arcgisbinding”包。但是我失败了,得到以下错误和警告。 Installing package into ‘C:/Users/Lenovo/Docum
我试图在 flutter 中测试这个应用程序,但我无法运行该应用程序,因为出现此错误“名称‘Page’在库‘package:burn_off/widgets/page.dart’和‘package’中
试图理解和学习如何编写包...用我一直使用的东西进行测试,记录... 您能帮我理解为什么“日志”变量不起作用...并且屏幕上没有日志记录吗? 谢谢! 主要文件: #!/opt/local/bin/py
我尝试运行此使用 Google 云的代码。 import signal import sys from google.cloud import language, exceptions # creat
我想知道是否有人找到了一个很好的 R 包来分析眼动追踪数据? 我遇到了 eyetrackR,但据我所知,没有可用的英文支持文档: http://read.psych.uni-potsdam.de/pm
我正在 R 上制作一个包。我有两个函数共享一个变量(全局)。 如何将其导入到包中? 例如, m<-0 f<-function() { m <- m+1 } g<-function() { m <- m
我用 C 为 Lua 编写了很多模块。每个模块都包含一个 Lua 用户数据类型,我像这样加载和使用它们: A = require("A") B = require("B") a = A.new(3,{
我正在尝试在 R 中的 Ubuntu 上安装 xlsx 包,以便使用允许在 R 中插入链接然后将它们导出到 Excel 的功能。 话虽如此,我根本无法安装该软件包。 显然它必须与 rJava 一起使用
我想在 Haskell 中做一些蒙特卡洛分析。我希望能够编写这样的代码: do n <- poisson lambda xs <- replicateM n $ normal mu sigma
我是一名优秀的程序员,十分优秀!