往期回顾:
- Go语言开发小技巧&易错点100例(一)
- Go语言开发小技巧&易错点100例(二)
- Go语言开发小技巧&易错点100例(三)
- Go语言开发小技巧&易错点100例(四)
- Go语言开发小技巧&易错点100例(五)
- Go语言开发小技巧&易错点100例(六)
- Go语言开发小技巧&易错点100例(七)
- Go语言开发小技巧&易错点100例(八)
- Go语言开发小技巧&易错点100例(九)
- Go语言开发小技巧&易错点100例(十)
- Go语言开发小技巧&易错点100例(十一)
- Go语言开发小技巧&易错点100例(十二)
本期看点(技巧类用【技】表示,易错点用【易】表示):
- Go HTTP文件上传下载【技】
- Go程序弹出浏览器【技】
正文开始:
Go HTTP文件上传下载
这段代码是一个简单的Go语言HTTP服务器,主要实现了文件上传和文件下载的功能。
uploadPath
:定义了上传文件的存储路径。maxUploadSize
:定义了允许上传的最大文件大小为10MB。
go
package main
import (
"fmt"
"io"
"math/rand"
"net"
"net/http"
"os"
"path"
"path/filepath"
)
const (
uploadPath = "tmp"
maxUploadSize = 10 << 20 //10MB
)
func main() {
listen, _ := net.Listen("tcp", ":8888")
//文件上传
http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) {
if err := r.ParseMultipartForm(maxUploadSize); err != nil {
fmt.Printf("ParseMultipartForm err = %s", err)
return
}
file, fileHeader, err := r.FormFile("file")
if err != nil {
fmt.Printf("FormFile err = %s", err)
return
}
defer func() {
_ = file.Close()
}()
if fileHeader.Size > maxUploadSize {
fmt.Printf("max err = %s", err)
return
}
fileBytes, err := io.ReadAll(file)
if err != nil {
fmt.Printf("read err = %s", err)
return
}
newFileName := randToken(12) + path.Ext(fileHeader.Filename) //新文件名+后缀
newFile, err := os.Create(filepath.Join(uploadPath, newFileName))
if err != nil {
fmt.Printf("Create err = %s", err)
return
}
defer func() {
_ = newFile.Close()
}()
if _, err := newFile.Write(fileBytes); err != nil || newFile.Close() != nil {
fmt.Printf("Write err = %s", err)
return
}
_, _ = w.Write([]byte("ok"))
})
//文件下载 http://localhost:8888/static/9a621d729566c74d10037c4d.jpg
http.Handle("/static/", http.FileServer(http.Dir(uploadPath)))
_ = http.Serve(listen, nil)
}
func randToken(len int) string {
b := make([]byte, len)
rand.Read(b)
return fmt.Sprintf("%x", b)
}
Go程序弹出浏览器
这段Go语言代码主要包含了两个函数:main
和Open
。main
函数是程序的入口点,它调用了Open
函数,并传入了一个URL字符串作为参数。Open
函数则用于执行一个外部命令,尝试在Windows系统的命令提示符(cmd)中打开指定的URL。此外,还定义了一个名为execCommand
的函数,它用于执行任意命令,并读取命令的标准输出。
go
package main
import (
"bufio"
"fmt"
"io"
"os/exec"
"time"
)
func main() {
_ = Open("http://localhost:8889")
}
func Open(uri string) error {
cmd := exec.Command("cmd", "/C", "start "+uri)
return cmd.Run()
}
// 执行cmd命令
func execCommand(commandName string, params []string) bool {
cmd := exec.Command(commandName, params...)
stdout, err := cmd.StdoutPipe()
if err != nil {
return false
}
if err := cmd.Start(); err != nil {
panic(err)
}
reader := bufio.NewReader(stdout)
for {
out, err2 := reader.ReadBytes('\n')
if err2 != nil || io.EOF == err2 {
break
}
fmt.Println(string(out))
}
if err := cmd.Wait(); err != nil {
panic(err)
}
return true
}
结束~