国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

這篇具有很好參考價(jià)值的文章主要介紹了【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

  • 博主簡(jiǎn)介:努力學(xué)習(xí)的大一在校計(jì)算機(jī)專業(yè)學(xué)生,熱愛(ài)學(xué)習(xí)和創(chuàng)作。目前在學(xué)習(xí)和分享:數(shù)據(jù)結(jié)構(gòu)、Go,Java等相關(guān)知識(shí)。
  • 博主主頁(yè): @是瑤瑤子啦
  • 所屬專欄: Go語(yǔ)言核心編程
  • 近期目標(biāo):寫(xiě)好專欄的每一篇文章

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

前幾天瑤瑤子學(xué)習(xí)了Go語(yǔ)言的基礎(chǔ)語(yǔ)法知識(shí),那么今天我們就寫(xiě)個(gè)小項(xiàng)目來(lái)練練手吧

一、備忘錄程序介紹

有以下5個(gè)功能

  • 查詢所有備忘錄
  • 新增一個(gè)備忘錄
  • 刪除備忘錄
  • 更新備忘錄
  • 退出備忘錄

下面詳細(xì)講解是以備忘錄的標(biāo)題為索引,即通過(guò)備忘錄標(biāo)題來(lái)查找對(duì)應(yīng)備忘錄內(nèi)容(文章最后會(huì)附上用序號(hào)來(lái)查找的版本)

二、功能分析和實(shí)現(xiàn)

前言

這里我的想法是一條備忘錄分為兩個(gè)模塊

  • 備忘錄標(biāo)題
  • 備忘錄內(nèi)容

map容器存儲(chǔ)備忘錄,其中備忘錄標(biāo)題memoHead作為key,備忘錄內(nèi)容memoContent作為value

還有一種方案是采用map+數(shù)組+結(jié)構(gòu)體存儲(chǔ),利用下標(biāo)索引進(jìn)行操作備忘錄,這種方法的代碼我會(huì)在最后附上

2.1:開(kāi)始菜單

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

  • 在程序開(kāi)始執(zhí)行,需要向用戶打印操作菜單,這個(gè)比較簡(jiǎn)單,我們可以吧打印菜單的操作封裝到一個(gè)函數(shù)中:
package main

import "fmt"

func printMenu() {
	menuInfo := `
				****************************************
						1、查詢所有備忘錄
						2、新增一條備忘錄
						3、刪除指定備忘錄
						4、更新某項(xiàng)備忘錄
						5、退出備忘錄
				****************************************
`
	fmt.Print(menuInfo)
}

func main() {
	printMenu()
}

看下效果:
【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

這里我們使用了Go語(yǔ)言特有的字符串賦值方式:使用反引號(hào),引起多行字符串

2.2:輸入并且讀入操作數(shù)

那么Go語(yǔ)言是如何從控制臺(tái)讀取用戶鍵盤(pán)輸入的數(shù)據(jù)呢?

在Go語(yǔ)言中,可以使用標(biāo)準(zhǔn)庫(kù)fmtbufio進(jìn)行控制臺(tái)輸入。其中,fmt包提供了Scan系列函數(shù)和Sscan系列函數(shù),bufio包提供了NewScanner函數(shù)和ReadString函數(shù)等。

  1. 下面是使用fmt包進(jìn)行控制臺(tái)輸入的例子:
package main

import "fmt"

func main() {
	var name string
	var age int

	fmt.Print("請(qǐng)輸入姓名:")
	fmt.Scanln(&name)

	fmt.Print("請(qǐng)輸入年齡:")
	fmt.Scanln(&age)

	fmt.Printf("您好,%s,您的年齡是%d歲。\n", name, age)
}

上面的代碼使用了Scanln函數(shù)讀取控制臺(tái)輸入,并使用&操作符將輸入的值存儲(chǔ)到相應(yīng)的變量中。

fmt.Scanln 函數(shù)不需要指定格式字符串,它會(huì)自動(dòng)根據(jù)空格分割輸入,并將每個(gè)部分解析為對(duì)應(yīng)的數(shù)據(jù)類型。

在讀取輸入后會(huì)自動(dòng)清除輸入流緩存中的換行符,因此下一次輸入不會(huì)受到影響。

  1. 下面是使用bufio包進(jìn)行控制臺(tái)輸入的例子:
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	fmt.Print("請(qǐng)輸入字符串:")
	str, _ := reader.ReadString('\n')
	fmt.Printf("您輸入的字符串是:%s\n", str)

	fmt.Print("請(qǐng)輸入整數(shù):")
	var num int
	_, err := fmt.Fscanf(reader, "%d", &num)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("您輸入的整數(shù)是:%d\n", num)
}

上面的代碼使用了NewReader函數(shù)創(chuàng)建了一個(gè)bufio.Reader對(duì)象,使用ReadString函數(shù)讀取輸入的字符串,使用Fscanf函數(shù)讀取輸入的整數(shù)。注意,在使用Fscanf函數(shù)讀取整數(shù)時(shí),需要使用&操作符將變量的地址傳遞給函數(shù)。

這里兩種輸入方法都是完全可以的,我們采用第二種輸入方法:


func main() {
	printMenu()
	reader := bufio.NewReader(os.Stdin) //使用bufio包中的NewReader函數(shù)創(chuàng)建了一個(gè)bufio.Reader對(duì)象
	//func NewReader(rd io.Reader) *Reader,NewReader創(chuàng)建一個(gè)具有默認(rèn)大小緩沖、從r讀取的*Reader
	//os.Stdin是指從操作系統(tǒng)的標(biāo)準(zhǔn)輸入緩沖區(qū)讀取
	input, _ := reader.ReadString('\n') //會(huì)讀取第一次遇到'\n,之前的數(shù)據(jù)
	input = strings.TrimSpace(input)    //返回將s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。
}

2.3:流程控制

根據(jù)輸入,進(jìn)行流程控制,選擇相應(yīng)功能:

這里用switch-case分支結(jié)構(gòu)即可

switch 語(yǔ)句是一個(gè)選擇語(yǔ)句,用于將 switch 后的表達(dá)式的值與可能匹配的選項(xiàng) case 后的表達(dá)式進(jìn)行比較,并根據(jù)匹配情況執(zhí)行相應(yīng)的代碼塊,執(zhí)行完匹配的代碼塊后,直接退出 switch-case 。如果沒(méi)有任何一個(gè)匹配,就會(huì)執(zhí)行 default 的代碼塊。它可以被認(rèn)為是替代多個(gè) if-else 子句的常用方式。和其他語(yǔ)言不同的是,這里的case并不是入口,所以不需要在每個(gè)case后面加上break!


func main() {
	for {
		printMenu()
		reader := bufio.NewReader(os.Stdin) //使用bufio包中的NewReader函數(shù)創(chuàng)建了一個(gè)bufio.Reader對(duì)象
		//func NewReader(rd io.Reader) *Reader,NewReader創(chuàng)建一個(gè)具有默認(rèn)大小緩沖、從r讀取的*Reader
		//os.Stdin是指從操作系統(tǒng)的標(biāo)準(zhǔn)輸入緩沖區(qū)讀取
		input, _ := reader.ReadString('\n') //會(huì)讀取第一次遇到'\n,包括'\n'之前的數(shù)據(jù)
		input = strings.TrimSpace(input)    //返回將s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。

		switch input {
		case "1":
			printAllMenos() //查詢并打印所有的備忘錄
		case "2": //新增備忘錄

			//輸入、讀取備忘錄標(biāo)題和內(nèi)容
			fmt.Print("請(qǐng)輸入備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			fmt.Print("請(qǐng)輸入備忘錄內(nèi)容:")
			memoContent, _ := reader.ReadString('\n')

			//保存至memos
			addMemo(memoHead, memoContent)
		case "3": //刪除備忘錄
			fmt.Print("請(qǐng)輸入要?jiǎng)h除的備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			//先在備忘錄中查找是否存在
			//判斷key是否存在:
			_, ok := memos[memoHead]
			if ok {
				deleteMemo(memoHead)
			} else {
				fmt.Println("err:不存在該標(biāo)題的備忘錄!")
			}
		case "4": //更新備忘錄
			fmt.Print("請(qǐng)輸入要更新的備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			//先在備忘錄中查找是否存在
			//判斷key是否存在:
			_, ok := memos[memoHead]
			if ok {
				updateMemo(memoHead) //更新
			} else {
				fmt.Println("err:不存在該標(biāo)題的備忘錄!")
			}
		case "5":
			fmt.Println("*************退出備忘錄***********")
			os.Exit(0) //退出程序
		default:
			fmt.Println("err:輸入數(shù)字不合法,請(qǐng)重新選擇!")

		}
	}
}

外面套了個(gè)for,循環(huán),當(dāng)輸入5:“退出備忘錄程序”時(shí),將退出程序

2.3:查詢備忘錄功能

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏


func printAllMenos() {
	if len(memos) == 0 {
		fmt.Println("****當(dāng)前備忘錄為空φ(* ̄0 ̄)****")
		return
	}
	fmt.Printf("當(dāng)前有 %d 條備忘錄,所有備忘錄如下:\n", len(memos))
	//進(jìn)行map變量
	for memoHead, memoContent := range memos {
		fmt.Printf("memoHead : %smemoContent: %s", memoHead, memoContent)
		fmt.Println("**********************************************")
	}
}

2.4:新增備忘錄

ps:這里將我采用將備忘錄保存至map

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

case "2": //新增備忘錄

			//輸入、讀取備忘錄標(biāo)題和內(nèi)容
			fmt.Print("請(qǐng)輸入備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			fmt.Print("請(qǐng)輸入備忘錄內(nèi)容:")
			memoContent, _ := reader.ReadString('\n')

			//保存至memos
			addMemo(memoHead, memoContent)

func addMemo(memoHead string, memoContent string) {
	//給map添加元素
	memos[memoHead] = memoContent
	fmt.Println("新增備忘錄成功O(∩_∩)O")
}

2.5:刪除備忘錄

ps:這里我是根據(jù)備忘錄的標(biāo)題來(lái)刪除相應(yīng)備忘錄的。所以請(qǐng)將流程圖的序號(hào)看作標(biāo)題即可

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

case "3": //刪除備忘錄
			fmt.Print("請(qǐng)輸入要?jiǎng)h除的備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			//先在備忘錄中查找是否存在
			//判斷key是否存在:
			_, ok := memos[memoHead]
			if ok {
				deleteMemo(memoHead)
			} else {
				fmt.Println("o((>ω< ))oerr:不存在該標(biāo)題的備忘錄!")
			}
func deleteMemo(memoHead string) {
	delete(memos, memoHead)
	fmt.Println("刪除備忘錄成功(? ω ?)")
}

2.6:更新備忘錄

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏

case "4": //更新備忘錄
			fmt.Print("請(qǐng)輸入要更新的備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			//先在備忘錄中查找是否存在
			//判斷key是否存在:
			_, ok := memos[memoHead]
			if ok {
				updateMemo(memoHead) //更新
			} else {
				fmt.Println("o((>ω< ))oerr:不存在該標(biāo)題的備忘錄!")
			}
func updateMemo(memoHead string) {
	reader := bufio.NewReader(os.Stdin)
	newMemoContent, _ := reader.ReadString('\n')
	memos[memoHead] = newMemoContent
	fmt.Println("更新備忘錄成功(●ˇ?ˇ●)")
}

2.7:退出程序

case "5":
			fmt.Println("*************退出備忘錄***********")
			os.Exit(0) //退出程序

三、完整代碼

3.1:根據(jù)標(biāo)題索引

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

// 使用make函數(shù)創(chuàng)建一個(gè)map,用來(lái)存儲(chǔ)所有備忘錄(注意,全局變量在函數(shù)外,不能用短聲明:“:=”
var memos = make(map[string]string)

func printMenu() {
	menuInfo := `
				****************************************
						1、查詢所有備忘錄
						2、新增一條備忘錄
						3、刪除指定備忘錄
						4、更新某項(xiàng)備忘錄
						5、退出備忘錄
				****************************************
`
	fmt.Print(menuInfo)
}

func main() {
	for {
		printMenu()
		reader := bufio.NewReader(os.Stdin) //使用bufio包中的NewReader函數(shù)創(chuàng)建了一個(gè)bufio.Reader對(duì)象
		//func NewReader(rd io.Reader) *Reader,NewReader創(chuàng)建一個(gè)具有默認(rèn)大小緩沖、從r讀取的*Reader
		//os.Stdin是指從操作系統(tǒng)的標(biāo)準(zhǔn)輸入緩沖區(qū)讀取
		input, _ := reader.ReadString('\n') //會(huì)讀取第一次遇到'\n,包括'\n'之前的數(shù)據(jù)
		input = strings.TrimSpace(input)    //返回將s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。

		switch input {
		case "1":
			printAllMemos() //查詢并打印所有的備忘錄
		case "2": //新增備忘錄

			//輸入、讀取備忘錄標(biāo)題和內(nèi)容
			fmt.Print("請(qǐng)輸入備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			fmt.Print("請(qǐng)輸入備忘錄內(nèi)容:")
			memoContent, _ := reader.ReadString('\n')

			//保存至memos
			addMemo(memoHead, memoContent)
		case "3": //刪除備忘錄
			fmt.Print("請(qǐng)輸入要?jiǎng)h除的備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			//先在備忘錄中查找是否存在
			//判斷key是否存在:
			_, ok := memos[memoHead]
			if ok {
				deleteMemo(memoHead)
			} else {
				fmt.Println("o((>ω< ))oerr:不存在該標(biāo)題的備忘錄!")
			}
		case "4": //更新備忘錄
			fmt.Print("請(qǐng)輸入要更新的備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			//先在備忘錄中查找是否存在
			//判斷key是否存在:
			_, ok := memos[memoHead]
			if ok {
				updateMemo(memoHead) //更新
			} else {
				fmt.Println("o((>ω< ))oerr:不存在該標(biāo)題的備忘錄!")
			}
		case "5":
			fmt.Println("*************退出備忘錄***********")
			os.Exit(0) //退出程序
		default:
			fmt.Println("o((>ω< ))oerr:輸入數(shù)字不合法,請(qǐng)重新選擇!")

		}
	}
}

func printAllMemos() {
	if len(memos) == 0 {
		fmt.Println("****當(dāng)前備忘錄為空φ(* ̄0 ̄)****")
		return
	}
	fmt.Printf("當(dāng)前有 %d 條備忘錄,所有備忘錄如下:\n", len(memos))
	//進(jìn)行map遍歷
	for memoHead, memoContent := range memos {
		fmt.Printf("memoHead : %smemoContent: %s", memoHead, memoContent)
		fmt.Println("**********************************************")
	}
}

func addMemo(memoHead string, memoContent string) {
	//給map添加元素
	memos[memoHead] = memoContent
	fmt.Println("新增備忘錄成功O(∩_∩)O")
}

func deleteMemo(memoHead string) {
	delete(memos, memoHead)
	fmt.Println("刪除備忘錄成功(? ω ?)")
}
func updateMemo(memoHead string) {
	reader := bufio.NewReader(os.Stdin)
	fmt.Print("請(qǐng)輸入新備忘錄內(nèi)容:")
	newMemoContent, _ := reader.ReadString('\n')
	memos[memoHead] = newMemoContent
	fmt.Println("更新備忘錄成功(●ˇ?ˇ●)")
}

3.2:優(yōu)化:根據(jù)序號(hào)索引

根據(jù)序號(hào)索引,則不用只是用map來(lái)存儲(chǔ),而用:map+數(shù)組+結(jié)構(gòu)體來(lái)存儲(chǔ)

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

// 使用數(shù)組來(lái)存儲(chǔ),結(jié)構(gòu)體

// 定義一個(gè)備忘錄結(jié)構(gòu)體
type Memo struct {
	Head    string
	Content string
}

// 存儲(chǔ)所有備忘錄的數(shù)組,序號(hào)是備忘錄索引
var memos map[int]Memo = make(map[int]Memo)

var lastID int

func printMenu() {
	menuInfo := `
				****************************************
						1、查詢所有備忘錄
						2、新增一條備忘錄
						3、刪除指定備忘錄
						4、更新某項(xiàng)備忘錄
						5、退出備忘錄
				****************************************
`
	fmt.Print(menuInfo)
}

func main() {
	for {
		printMenu()
		reader := bufio.NewReader(os.Stdin) //使用bufio包中的NewReader函數(shù)創(chuàng)建了一個(gè)bufio.Reader對(duì)象
		//func NewReader(rd io.Reader) *Reader,NewReader創(chuàng)建一個(gè)具有默認(rèn)大小緩沖、從r讀取的*Reader
		//os.Stdin是指從操作系統(tǒng)的標(biāo)準(zhǔn)輸入緩沖區(qū)讀取
		input, _ := reader.ReadString('\n') //會(huì)讀取第一次遇到'\n,包括'\n'之前的數(shù)據(jù)
		input = strings.TrimSpace(input)    //返回將s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。

		switch input {
		case "1":
			printAllMemos() //查詢并打印所有的備忘錄
		case "2": //新增備忘錄

			//輸入、讀取備忘錄標(biāo)題和內(nèi)容
			fmt.Print("請(qǐng)輸入備忘錄標(biāo)題:")
			memoHead, _ := reader.ReadString('\n')
			fmt.Print("請(qǐng)輸入備忘錄內(nèi)容:")
			memoContent, _ := reader.ReadString('\n')

			//保存至memos
			addMemo(memoHead, memoContent)
		case "3": //刪除備忘錄
			fmt.Print("請(qǐng)輸入要?jiǎng)h除的備忘錄序號(hào):")
			id, _ := reader.ReadString('\n')
			id = strings.TrimSpace(id)
			//將字符串轉(zhuǎn)成整數(shù)
			index, err := strconv.Atoi(id)
			//判斷輸入序號(hào)是否合法
			if err != nil {
				fmt.Println(">﹏<輸入序號(hào)不合法")
			}
			_, ok := memos[index] //看該序號(hào)對(duì)應(yīng)的備忘錄是否存在
			if ok {
				deleteMemo(index)
			} else {
				fmt.Println("(;′д`)ゞ輸入的序號(hào)不存在")
			}
		case "4": //更新備忘錄
			fmt.Print("請(qǐng)輸入要更新的備忘錄序號(hào):")
			id, _ := reader.ReadString('\n')

			id = strings.TrimSpace(id)
			//將字符串轉(zhuǎn)成整數(shù)
			index, err := strconv.Atoi(id)
			//判斷輸入序號(hào)是否合法
			if err != nil {
				fmt.Println(">﹏<輸入序號(hào)不合法")
			}
			_, ok := memos[index] //看該序號(hào)對(duì)應(yīng)的備忘錄是否存在
			if ok {
				updateMemo(index)
			} else {
				fmt.Println("(;′д`)ゞ輸入的序號(hào)不存在")
			}
		case "5":
			fmt.Println("*************退出備忘錄***********")
			os.Exit(0) //退出程序
		default:
			fmt.Println("o((>ω< ))oerr:輸入數(shù)字不合法,請(qǐng)重新選擇!")

		}
	}
}

func printAllMemos() {
	if len(memos) == 0 {
		fmt.Println("****當(dāng)前備忘錄為空φ(* ̄0 ̄)****")
		return
	}
	fmt.Printf("當(dāng)前有 %d 條備忘錄,所有備忘錄如下:\n", len(memos))
	//遍歷
	for id, memo := range memos {
		fmt.Printf("ID : %d memoHead : %smemoContent: %s", id, memo.Head, memo.Content)
		fmt.Println("**********************************************")
	}
}

func addMemo(memoHead string, memoContent string) {
	lastID++
	//為該條新備忘錄創(chuàng)建一個(gè)實(shí)體
	memo := Memo{Head: memoHead, Content: memoContent}
	memos[lastID] = memo

	fmt.Println("新增備忘錄成功O(∩_∩)O")
}

func deleteMemo(id int) {
	delete(memos, id)
	fmt.Println("刪除備忘錄成功(? ω ?)")
}
func updateMemo(id int) {
	reader := bufio.NewReader(os.Stdin)

	fmt.Printf("請(qǐng)更新%d號(hào)備忘錄的標(biāo)題:", id)
	newMemoHead, _ := reader.ReadString('\n')
	fmt.Printf("請(qǐng)更新%d號(hào)備忘錄的內(nèi)容:", id)
	newMemoContent, _ := reader.ReadString('\n')

	//將數(shù)據(jù)更新
	memo := Memo{Head: newMemoHead, Content: newMemoContent}
	memos[id] = memo

	fmt.Println("更新備忘錄成功(●ˇ?ˇ●)")
}

效果展示:

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏
【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏


?????♀?上面是一個(gè)Go語(yǔ)言實(shí)現(xiàn)的通訊錄小項(xiàng)目,非常適合拿來(lái)練手,整合Go的基礎(chǔ)知識(shí)

歡迎在評(píng)論區(qū)交流和留下你的想法和建議

如果對(duì)你有用,還請(qǐng):??評(píng)論+????點(diǎn)贊+?收藏+?關(guān)注

【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-455604.html

  • Java島冒險(xiǎn)記【從小白到大佬之路】
  • LeetCode每日一題–進(jìn)擊大廠
  • 算法
  • C/C++
  • Go語(yǔ)言核心編程
  • 數(shù)據(jù)結(jié)構(gòu)

到了這里,關(guān)于【Golang項(xiàng)目實(shí)戰(zhàn)】手把手教你寫(xiě)一個(gè)備忘錄程序|附源碼——建議收藏的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 手把手教你寫(xiě)go單元測(cè)試

    ? 在 Go 語(yǔ)言中,單元測(cè)試是一種測(cè)試方法,用于驗(yàn)證代碼的某個(gè)獨(dú)立單元是否按預(yù)期功能,它的目的是確保代碼的每個(gè)組成部分都在獨(dú)立測(cè)試的情況下運(yùn)行正常。 ? 在我們對(duì)項(xiàng)目新增一個(gè)新功能時(shí),最好就要養(yǎng)成寫(xiě)單元測(cè)試的好習(xí)慣,這樣可以有助于提高我們代碼的質(zhì)量、

    2024年04月14日
    瀏覽(21)
  • 零基礎(chǔ)手把手教你寫(xiě)NFT搶購(gòu)軟

    零基礎(chǔ)手把手教你寫(xiě)NFT搶購(gòu)軟

    由于之前寫(xiě)過(guò)幾篇文章,但是個(gè)人不是很滿意,所以這次我打算把所有的知識(shí)匯總成一篇文章??赡軙?huì)有很多地方寫(xiě)的不是很好,歡迎大家評(píng)論指出,我后續(xù)修正。 個(gè)人vx:http://wc.ljlju.cn/4ZGETK 我們?cè)邳c(diǎn)擊搶購(gòu)按鈕的時(shí)候,會(huì)向平臺(tái)的服務(wù)器發(fā)送HTTP請(qǐng)求,這條HTTP請(qǐng)求會(huì)攜帶你

    2024年02月06日
    瀏覽(43)
  • 手把手教你寫(xiě)stm32f103智能風(fēng)扇

    手把手教你寫(xiě)stm32f103智能風(fēng)扇

    本系統(tǒng)可以分為兩個(gè)模式來(lái)進(jìn)行運(yùn)行,分別為手動(dòng)模式和自動(dòng)模式,同時(shí),在上電進(jìn)入系統(tǒng)后,還會(huì)有一個(gè)模式選擇的界面產(chǎn)生。 模式選擇:在此界面中,可以通過(guò)按鍵K1來(lái)控制模式選擇,兩個(gè)模式分別為手動(dòng)模式和自動(dòng)模式;通過(guò)按鍵K2可以進(jìn)入模式。 手動(dòng)模式:在手動(dòng)模

    2023年04月17日
    瀏覽(92)
  • 正則表達(dá)式詳解(零基礎(chǔ)教學(xué),手把手教你寫(xiě)正則)

    本篇文章將從零講解什么是正則表達(dá)式,以及正則表達(dá)式的規(guī)則、在python中的應(yīng)用,用通俗易懂的描述方式進(jìn)行零基礎(chǔ)級(jí)別的講解,盡量做到全網(wǎng)最全講解,力求最高質(zhì)量文章,歡迎關(guān)注!點(diǎn)擊目錄可直接進(jìn)行相關(guān)位置跳轉(zhuǎn)。 目錄: 什么是正則? 為什么需要正則? 元字符

    2023年04月08日
    瀏覽(21)
  • 【Java】手把手教你寫(xiě)學(xué)生信息管理系統(tǒng)(窗口化+MYSQL)

    【Java】手把手教你寫(xiě)學(xué)生信息管理系統(tǒng)(窗口化+MYSQL)

    ? ? ? ? ? ? (本項(xiàng)目使用到了數(shù)據(jù)庫(kù)的可視化軟件DataGrip,需要同學(xué)們自行下載并配置環(huán)境) 首先我們需要在DataGrip中建立一個(gè)student的框架 ????????????????????????????????????????????????????????然后建立一個(gè)studenttable表? ? ? ? ? ? ? ? ? ?

    2024年02月04日
    瀏覽(29)
  • 手把手教你新建一個(gè)winform項(xiàng)目(史上最全)

    手把手教你新建一個(gè)winform項(xiàng)目(史上最全)

    最近有粉絲訂閱了我的博客專欄《winform控件從入門(mén)到精通》,但是卻來(lái)問(wèn)我平時(shí)使用什么軟件來(lái)開(kāi)發(fā)winform程序,我本以為訂閱我專欄的粉絲至少應(yīng)該是掌握Microsoft Visual Studio的基本用法,也能夠創(chuàng)建winform項(xiàng)目,看來(lái)是我大意了,我的錯(cuò),粉絲們!對(duì)于不會(huì)創(chuàng)建winform項(xiàng)目但是

    2024年02月04日
    瀏覽(71)
  • 手把手教你寫(xiě)代碼——基于控制臺(tái)的通訊錄管理系統(tǒng)(單表)

    手把手教你寫(xiě)代碼——基于控制臺(tái)的通訊錄管理系統(tǒng)(單表)

    本欄目專為入門(mén)java學(xué)習(xí)者設(shè)計(jì)的一些簡(jiǎn)單的入門(mén)項(xiàng)目 本項(xiàng)目為簡(jiǎn)單的基于控制臺(tái)的通訊錄管理系統(tǒng),所需要的環(huán)境僅僅為jdk以及mysql(版本不限)!只有一個(gè)簡(jiǎn)單的eclipse軟件以及我們的mysql可視化工具(視頻使用navicat) 本項(xiàng)目數(shù)據(jù)庫(kù)表僅有一個(gè),單表操作,方便學(xué)習(xí)! 本項(xiàng)

    2024年02月15日
    瀏覽(23)
  • FPGA之手把手教你寫(xiě)串口協(xié)議解析(STM32與FPGA數(shù)據(jù)互傳)

    最近趁熱打鐵做了一個(gè)關(guān)于STM32與FPGA通信并且控制高速DA模塊產(chǎn)生不同頻率信號(hào)的正弦波、方波、三角波和鋸齒波的項(xiàng)目,從中收獲到了很多東西,也踩了一些雷和坑,將分為幾篇文章將整個(gè)過(guò)程分享出來(lái)。 這一次準(zhǔn)備分享的是對(duì)串口數(shù)據(jù)的解析和賦值。解析的數(shù)據(jù)由STM32發(fā)

    2024年02月06日
    瀏覽(27)
  • 手把手教你實(shí)現(xiàn)一個(gè)JavaWeb項(xiàng)目:創(chuàng)建一個(gè)自己的網(wǎng)頁(yè)博客系統(tǒng)(前端+后端)(一)

    手把手教你實(shí)現(xiàn)一個(gè)JavaWeb項(xiàng)目:創(chuàng)建一個(gè)自己的網(wǎng)頁(yè)博客系統(tǒng)(前端+后端)(一)

    一篇博客帶你實(shí)現(xiàn)一個(gè)真正的項(xiàng)目! ?先來(lái)看看它是什么樣式的: 目錄: 1、大體步驟??: ????????1、創(chuàng)建Maven項(xiàng)目?? ????????2、引入依賴?? ????????3、創(chuàng)建必要的目錄?? ????????4、編寫(xiě)代碼?? ????????5、打包部署(基于SmartTomcat)?? ????????

    2024年02月06日
    瀏覽(21)
  • QT初體驗(yàn):手把手帶你寫(xiě)一個(gè)自己的串口助手

    QT初體驗(yàn):手把手帶你寫(xiě)一個(gè)自己的串口助手

    本文記錄一下用QT Creator 寫(xiě)一個(gè)基本功能齊全的串口助手的過(guò)程,整個(gè)工程只有幾百行代碼,跟著做下來(lái)對(duì)新手來(lái)說(shuō)可以更快了解整個(gè)QT項(xiàng)目的開(kāi)發(fā)過(guò)程和一些常用控件的使用方法。對(duì)新手學(xué)習(xí)QT能增強(qiáng)信心,話不多說(shuō),正文開(kāi)始 先看成品: (1) 創(chuàng)建QMainWindow工程。這一步就不

    2024年02月05日
    瀏覽(87)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包