golang Golang中多次读取锁定的示例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang Golang中多次读取锁定的示例相关的知识,希望对你有一定的参考价值。

package main

import (
	"fmt"
	"sync"
	"time"
)

func noop(l *sync.RWMutex, wg *sync.WaitGroup) {
	l.RLock()
	<-time.NewTimer(1 * time.Second).C
	fmt.Printf(".")
	wg.Done()
}

func main() {
	var lock *sync.RWMutex
	lock = new(sync.RWMutex)
	var wg = &sync.WaitGroup{}

	for i := 0; i < 100; i++ {
		wg.Add(1)
		go noop(lock, wg)
	}
	
	wg.Wait()

	fmt.Printf("\n%v\n", lock)
}

golang 在Go(golang)中进行分段上传的示例

package main

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"mime/multipart"
	"net/http"
	"os"
	"path/filepath"
)

// Creates a new file upload http request with optional extra params
func newfileUploadRequest(uri string, params map[string]string, paramName, path string) (*http.Request, error) {
	file, err := os.Open(path)
	if err != nil {
		return nil, err
	}
	defer file.Close()

	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)
	part, err := writer.CreateFormFile(paramName, filepath.Base(path))
	if err != nil {
		return nil, err
	}
	_, err = io.Copy(part, file)

	for key, val := range params {
		_ = writer.WriteField(key, val)
	}
	err = writer.Close()
	if err != nil {
		return nil, err
	}

	return http.NewRequest("POST", uri, body)
}

func main() {
	path, _ := os.Getwd()
	path += "/test.pdf"
	extraParams := map[string]string{
		"title":       "My Document",
		"author":      "Matt Aimonetti",
		"description": "A document with all the Go programming language secrets",
	}
	request, err := newfileUploadRequest("https://google.com/upload", extraParams, "file", "/tmp/doc.pdf")
	if err != nil {
		log.Fatal(err)
	}
	client := &http.Client{}
	resp, err := client.Do(request)
	if err != nil {
		log.Fatal(err)
	} else {
		body := &bytes.Buffer{}
		_, err := body.ReadFrom(resp.Body)
		if err != nil {
			log.Fatal(err)
		}
                resp.Body.Close()
		fmt.Println(resp.StatusCode)
		fmt.Println(resp.Header)

		fmt.Println(body)
	}
}

以上是关于golang Golang中多次读取锁定的示例的主要内容,如果未能解决你的问题,请参考以下文章

在golang中获取锁定内存地址而不是变量

golang 用于系统稳健性测试的内存锁定和囤积实用程序

了解 GoLang Profiling 输出

Golang通道的无阻塞读写的方法示例

Golang中的channel代码示例----无缓冲有缓冲rangeclose

golang Golang中信号量的示例实现和使用