Golang 之 文件硬连接 与 软连接

Golang support for native Windows hard links was added in Go 1.4. Specifically, this commit makes the following snippet work:

err := os.Link("original.txt", "link.txt")

Beware that not all Windows file systems support hard links. Currently NTFS and UDF support it, but FAT32, exFAT and the newer ReFS do not.

Full example code:

package main

import (
    "log"
    "os"
    "io/ioutil"
)

func main() {   
    err := ioutil.WriteFile("original.txt", []byte("hello world"), 0600)
    if err != nil {
        log.Fatalln(err)
    }    

    err = os.Link("original.txt", "link.txt")
    if err != nil {
        log.Fatalln(err)
    }
}

 软连接(symbolic link) 就是把上面硬链接的Link 改成  SymLink

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用以下步骤将文件从本地以分块方式并发上传到服务端: 1. 打开本地的文件并获取文件的大小。 2. 创建一个缓冲区,用于存储每个分块的数据。 3. 将文件分成多个大小相等的块,每个块的大小可以根据需要进行调整。 4. 使用 goroutine 并发地读取每个分块的数据,并将其存储到缓冲区。 5. 将每个分块的数据通过网络传输上传到服务端。你可以使用标准库的 net/http 包或者其他第三方库来完成这一步骤。 6. 服务端接收到每个分块的数据后,进行相应处理和存储。 下面是一个简单示例代码,用于演示如何实现上述步骤: ```go package main import ( "fmt" "io" "log" "net/http" "os" "path/filepath" "sync" ) func main() { filePath := "/path/to/file" // 替换为你的文件路径 chunkSize := 1024 * 1024 // 每个分块的大小(1MB) file, err := os.Open(filePath) if err != nil { log.Fatal(err) } defer file.Close() fileInfo, err := file.Stat() if err != nil { log.Fatal(err) } fileSize := fileInfo.Size() numChunks := int(fileSize / int64(chunkSize)) var wg sync.WaitGroup wg.Add(numChunks) for i := 0; i < numChunks; i++ { go func(chunkIndex int) { defer wg.Done() offset := int64(chunkIndex * chunkSize) chunk := make([]byte, chunkSize) file.Seek(offset, io.SeekStart) _, err := file.Read(chunk) if err != nil && err != io.EOF { log.Println(err) return } uploadChunk(chunk) }(i) } wg.Wait() } func uploadChunk(chunk []byte) { // 在这里实现将分块上传到服务端的逻辑 // 你可以使用 net/http 包或者其他第三方库来发送 HTTP 请求并上传数据 fmt.Println("Uploading chunk:", string(chunk)) } ``` 在示例代码,我们首先打开本地文件并获取文件的大小,然后根据指定的块大小计算出需要分成多少个块。接下来,我们使用 goroutine 并发地读取每个分块的数据,并通过 `uploadChunk` 函数将其上传到服务端。 请注意,示例代码的 `uploadChunk` 函数只是一个占位函数,你需要替换为实际的上传逻辑。你可以使用适合你的特定需求的库来实现文件上传功能,例如使用 `net/http` 包发送 HTTP 请求或使用第三方库如 `minio-go`、`qiniu/go-sdk` 等。 同时,你还需要确保在上传过程处理错误和异常情况,例如网络连接断、服务端返回错误等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值