GO标准库 bytes标准库

对字节切片的工具包

常用函数

转换

func ToUpper(s []byte) []byte //将s中所有的字符转为大写格式
func ToLower(s []byte) []byte //将s中所有的字符转为小写格式

比较

按照ASCLL码,大写大于小写
A=65
0=48
a=97

func Compare(a,b []byte) int //比较两个[]byte,a<b返回-1;a==b返回0;a>b返回1
func Equal(a,b []byte) bool //判断是否相等,nil相当于空[]byte
func EqualFold(a,b []byte) bool //判断是否相等,忽略大小写和标题格式

拆合

func Split(s sep []byte) [][]byte 
//以sep为分隔符切分s为多个字串,结果不包含分隔符。若不包含sep则s被切分为Unicode字符列表
func SplitN(s sep []byte,n int) [][]byte 
//指定切分n次,超出n的部分将不切分
func SplitAfter(s sep []byte) []byte 
//同Split但包含分隔符(在各个字串尾部)
func SplitAfterN(s sep []byte) []byte 
//同SplitN但包含分隔符(在各个字串尾部)
func Fields(s []byte) [][]byte
//以连续空白切分s为多个字串,结果不包含分隔符,即["h  s a"]分割为[h][s][a]
func FieldsFunc(s []byte ,f func(rune)bool) [][]byte
//以符合f字符为分割符切分s,结尾不包含分隔符
func Join(s [][]byte, sep []byte)[]byte
//以sep为连接符将s字串连在一起
func Repeat(b []byte, count int) []byte
//b重复count次返回

字串

func HasPrefix(s, prefix []byte)bool
//判断s是否有前缀prefix
func HasSufix(s, suffix []byte)bool
//判断s是否有前缀suffix 
func ContainsRune(b []byte, r rune)bool
//判断b是否包含子串/字符 r
func ContainsAny(b []byte, chars string)bool
//判断b中是否包含chars中的任一字符
func Index(s seq []byte) int
//查找子串seq在s中第一次出现的位置,找不到则返回-1
func IndexByet(s []byte, c byte)int
//查找子串 字符c在s中第一次出现的位置,找不到则返回-1
func Index(s []byte, f func(r rune) bool)int
//查找符合f的字符在s中第一次出现的位置,找不到则返回-1
func Count(s,sep []byte)int
//获取sep在s中出现的次数(sep不能重叠)

替换

func Replace(s, old, new []byte,n int) []byte
//将s中前n个old替换为new,n<0则替换全部
func Map(mapping func(r rune) rune, s []byte)[]byte
//将s中的字符全部替换为mapping的返回值,若mapping返回负值则丢弃该字符
func Runes(s []byte) []rune
//将s转为[]rune返回

Buffer类型

具有读取和写入方法的可变大小的字节缓冲区
Buffer的零值是准备使用的空缓冲区

声明

##写数据

在这里插入图片描述
在这里插入图片描述

其他方法

在这里插入图片描述
Next和Read类似,但是没有指定buf。
在这里插入图片描述在这里插入图片描述

Reader类型



补充

func Read(p []byte) (n int, err error)
//设置偏移量,他有2个参数,第一个是偏移多少个字节,第二个参数是从哪里开始偏移。
//Read 读数据的时候只需要给一个 buffer 就行了,偏移在内部维护
func ReadAt(p []byte, off int64) (n int, err error)
//从偏移量开始读取,传入参数是两个,
//一个 ( 装读到的数据 buffer ),off(读取的偏移位置),
//返回值 n(标示读到了多少数据),err(错误码);
//ReadAt 可以让你从指定的位置读数据,偏移自维护

关于Read和ReadAt的区别

Read 读数据的时候只需要给一个 buffer 就行了,偏移在内部维护,ReadAt 可以让你从指定的位置读数据,偏移自维护。这个是两个接口的最明显的区别。
但除此之外还有一个问题
Golang 里面 Read 接口对于读的结果有这么几种情况:

  1. 读成功了,数据完全填充 buffer ,读到了用户预期的数据大小,这个时候 n == len(p),err == nil,p里都是用户有用的数据;
  2. 读失败了,err != nil ,这个时候 err 会标示出对应的错误;
  3. 读到 EOF 了,err ==EOF,n 标示读到的有用数据大小,p 部分被填充;
  4. 第四种最坑(最细节),这个也是 Read 特意说明的(我截屏标红的),golang 允许当数据还没全部准备好的时候,返回部分数据,这个时候 err == nil;

也就是说,Read接口允许:没有读满预期的 buffer,也不是 EOF 的情况,err == nil,这种情况是 Golang Read接口语义的一部分;

ReadAt 接口,Golang 的 interface 也特意说明了,这个接口比 Read 更严格,不允许第四种情况的发生。也就是说,ReadAt 读数据的结果,只有三种:

  1. 那么就是读成功,读满 buffer,这个时候 n == len(p),err == nil。
  2. 要们就是读到 EOF,这个时候没有读满 buffer,只读到了部分有效数据,n<len(p),err==EOF,n 指明有效数据的大小;
  3. 要么就是读失败,这个时候 err 标示错误码;

ReadAt 绝对不允许出现,没有读满 buffer,又非 EOF,又没有 err 的情况发生,这个是接口语义明确规定的,这是一个非常细节的区别。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Go语言调用GitLab API合并分支,您需要执行以下步骤: 1. 获取访问令牌:在GitLab中,转到用户设置>访问令牌,并生成一个新的访问令牌。将其保存在安全的地方。 2. 构建API请求:使用HTTP PUT请求,构建请求URL,包括您的GitLab服务器地址,项目ID和分支名称。您还需要在请求标头中包含访问令牌。 3. 发送API请求:使用Go语言中的标准HTTP客户端库发送API请求。您需要构建一个HTTP请求对象,并将其传递给HTTP客户端库的Do()方法。 以下是一个示例Go代码片段,用于使用GitLab API合并名为“feature_branch”的分支到“master”分支: ```go package main import ( "bytes" "encoding/json" "fmt" "net/http" ) type MergeRequest struct { ID int `json:"id"` Source string `json:"source_branch"` Target string `json:"target_branch"` Title string `json:"title"` RemoveSrc bool `json:"remove_source_branch"` } func main() { url := "https://gitlab.example.com/api/v4/projects/123/merge_requests" token := "your_access_token" mr := MergeRequest{ Source: "feature_branch", Target: "master", Title: "Merge feature branch into master", RemoveSrc: true, } requestBody, err := json.Marshal(mr) if err != nil { panic(err) } req, err := http.NewRequest("PUT", url, bytes.NewBuffer(requestBody)) if err != nil { panic(err) } req.Header.Set("PRIVATE-TOKEN", token) req.Header.Set("Content-Type", "application/json") client := &http.Client{} resp, err := client.Do(req) if err != nil { panic(err) } fmt.Println(resp.Status) } ``` 在这个例子中,我们构造了一个名为“MergeRequest”的结构体,表示要合并的请求。我们使用Go语言的标准库中的json.Marshal()方法将结构体序列化为JSON格式的字符串,然后将其作为请求主体发送到GitLab API。我们使用http.NewRequest()方法构造HTTP PUT请求,将访问令牌设置为请求标头的一部分,然后使用http.Client.Do()方法发送请求。最后,我们打印响应状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值