go 代码练习
1.1 把一个int32的数换算成二进制
package main
import (
"fmt"
"math"
"strings"
)
func main() {
fmt.Println(BinaryFormat(0))
fmt.Println(BinaryFormat(-1))
fmt.Println(BinaryFormat(1))
fmt.Println(BinaryFormat(260))
fmt.Println(BinaryFormat(-260))
}
func BinaryFormat(n int32) string {
a := uint32(n)
sb := strings.Builder{}
c := uint32(math.Pow(2, 31))
for i := 0; i < 32; i++ {
if a&c > 0 {
sb.WriteString("1")
} else {
sb.WriteString("0")
}
c >>= 1
}
return sb.String()
}
2.1 把字符串1998-10-01 08:10:00解析成time.Time,再格式化成字符串199810010810
func timeshow() {
format1 := "2006-05-16 09:53:03"
format2 := "20060116095303"
dt := "1998-10-01 08:10:00"
loc,_ := time.LoadLocation("Asia/Shanghai")
t,_ := time.ParseInLocation(format1, dt,loc)
t1 := t.Format(format2)
fmt.Println(t1)
}
func main() {
timeshow()
}
3.1 我们是每周六上课,输出我们未来4次课的上课日期(不考虑法定假日)
func workday() {
now := time.Now()
days := int(time.Saturday - now.Weekday())
fmt.Println(days)
if days == 0 {
days = 7
}
workday1 := now.Add(24 * time.Hour * time.Duration(days))
fmt.Println(workday1)
for i := 1;i < 3;i ++ {
workday1 = workday1.Add(24 * time.Hour * 7)
fmt.Println(workday1)
}
}
func main() {
workday()
}
4.1 并发读取多个文件夹下的内容,并发写入一个文件内,没有先后顺序
var fileChan = make(chan string,10000)
var readChanFinsh = make(chan struct{})
var writeChanFinsh = make(chan struct{})
var wg sync.WaitGroup
func readFile(filename string) {
defer func() {
wg.Done()
}()
fin,err := os.Open(filename)
if err != nil {
fmt.Println(err.Error())
return
}
defer fin.Close()
reader := bufio.NewReader(fin)
for {
line,err := reader.ReadString('\n')
if err != nil {
if err == io.EOF{
if len(line) >0 {
line += "\n"
fileChan <- line
fmt.Printf("write %s to fileChan\n",line)
}
break
} else {
fmt.Println(err)
break
}
}else {
fmt.Printf("write %s to fileChan\n",line)
fileChan <- line
}
}
}
func writeFile(filename string) {
defer close(writeChanFinsh)
fout,err := os.OpenFile(filename,os.O_CREATE|os.O_TRUNC|os.O_WRONLY,os.ModePerm)
if err != nil {
fmt.Println(err)
}
defer fout.Close()
writer := bufio.NewWriter(fout)
LOOP:
for {
select {
case <- readChanFinsh:
close (fileChan)
fmt.Println(len(fileChan))
for line := range fileChan{
writer.WriteString(line)
}
fmt.Println("读结束的管道已经关闭,退出循环前已经遍历管道剩余内容并写入了,管道已清零")
break LOOP
case line := <-fileChan:
fmt.Printf("read %s from fileChan\n",line)
writer.WriteString(line)
}
}
writer.Flush()
}
func main() {
wg.Add(3)
for i := 1;i <= 3;i++ {
fileName := "C:\\Users\\丽丽小可爱\\Desktop\\代码勿删\\go\\测试\\"+strconv.Itoa(i)
go readFile(fileName)
}
wg.Wait()
go writeFile("C:\\Users\\丽丽小可爱\\Desktop\\代码勿删\\go\\测试\\merge")
close(readChanFinsh)
<-writeChanFinsh
}
例子2:
var fileChan = make(chan string,10000)
var writeChanFinsh = make(chan struct{})
var wg sync.WaitGroup
func readFile(filename string) {
defer func() {
wg.Done()
}()
fin,err := os.Open(filename)
if err != nil {
fmt.Println(err.Error())
return
}
defer fin.Close()
reader := bufio.NewReader(fin)
for {
line,err := reader.ReadString('\n')
if err != nil {
if err == io.EOF{
if len(line) >0 {
line += "\n"
fileChan <- line
fmt.Printf("write %s to fileChan\n",line)
}
break
} else {
fmt.Println(err)
break
}
}else {
fmt.Printf("write %s to fileChan\n",line)
fileChan <- line
}
}
}
func writeFile(filename string) {
defer close(writeChanFinsh)
fout,err := os.OpenFile(filename,os.O_CREATE|os.O_TRUNC|os.O_WRONLY,os.ModePerm)
if err != nil {
fmt.Println(err)
}
defer fout.Close()
writer := bufio.NewWriter(fout)
for {
if line,ok := <- fileChan;ok {
writer.WriteString(line)
} else {
break
}
}
writer.Flush()
}
func main() {
wg.Add(3)
for i := 1;i <= 3;i++ {
fileName := "C:\\Users\\丽丽小可爱\\Desktop\\代码勿删\\go\\测试\\"+strconv.Itoa(i)
go readFile(fileName)
}
wg.Wait()
go writeFile("C:\\Users\\丽丽小可爱\\Desktop\\代码勿删\\go\\测试\\merge")
<-writeChanFinsh
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!