情景:將工資條的內容傳送到相應員工的郵箱中。
xlsx檔案內容格式:
獲取excel檔案內容,使用第三方庫:github.com/tealeg/xlsx
/* 通過for迴圈獲取**中單元格的內容 */
for _, sheet := range xlfile.sheet}}
}知識點:
xlsx操作excel檔案先獲取sheet物件,代表excel檔案的sheet,通過遍歷sheet物件,獲取每個sheet的行結果rows,對rows遍歷,就獲取到了每個單元格的內容,封裝在cells物件中。
func isemailrow(r string) (isemail bool, email string) @([a-za-z0-9-].)[a-za-z]$`)
/* 遍歷r中內容,匹配正規表示式 */
for _, v := range r
}return
false, ""
}
isemailrow函式接收的引數是陣列,所以將單元格內容轉換為陣列形式,並且去除了空格和空行:
func _getcellvalues(r *xlsx.row) (cells string)
return
}
使用map來儲存每個人的工資條資料,並且用電子郵件作為鍵值,然後將資料組裝成乙個html的**行**(因為需要傳送html格式的電子郵件才能以**的形式展現)。於是,main裡的迴圈**就變成了這樣:
/* 建立map */
sendlist := make(map[string]string)
for _, sheet := range xlfile.sheets
sendlist[curmail] += fmt.sprintf("%s
", strings.join(cells, "
")) }
}
傳送電子郵件
使用標準包:net/smtp就可以傳送電子郵件
封裝乙個函式:
func
sendtomail(user, password, host, to, subject, body, mailtype
string) error
建立乙個函式,遍歷所有內容並呼叫傳送郵件函式傳送出去
func sendmail(sendlist map[string]string) else
index++
fmt.printf("%s
\n", content)}}
最後的main函式:
excelfilename := "f:\\test\\list.xlsx"
xlfile, err := xlsx.openfile(excelfilename)
if err != nil
sendlist := make(map[string]string)
for _, sheet := range xlfile.sheets else
}if count >1 else }}
}sendmail(sendlist)
fmt.print("按下回車結束")
bufio.newreader(os.stdin).readline()
親測可用。作為學習收藏。 go檔案操作
go語言支援的檔案操作很多 1 傳統的檔案操作 匯入檔案操作需要的包 import os f os.open filepath f.read byte f.close 這裡寫 片openfile,err os.open test.go 正確開啟檔案返回err nil 這裡如果檔案開啟異常,則丟擲錯誤...
go檔案操作
os.open 函式能夠開啟乙個檔案,返回乙個開啟的檔案物件和乙個err。對得到的檔案物件呼叫close 方法能夠關閉檔案 為了防止檔案忘記關閉,我們通常使用defer關閉檔案 是向作業系統要了乙個檔案io,如果程式沒有顯示的關閉檔案,就不會釋放這個檔案io,造成檔案不安全 func main 關閉...
Go併發程式設計之CAS操作
一 前言 go語言類似j a juc包也提供了一些列用於多執行緒之間進行同步的措施,比如低階的同步措施有 鎖 cas 原子變數操作類。相比j a來說go提供了獨特的基於通道的同步措施。我們先來看看go中cas操作 二 cas操作 go中的cas操作與j a中類似,都是借用了cpu提供的原子性指令來實...