【Go自學版】01-基礎

// 變量
var a, b, c = 8, 2.3, "hello"
var d float64;
e := 6var A []int;
var B [10]int;
C := [10]int{1, 2, 3, 4}
for i := 0; i < len(B); i ++ {}
for _, value := range C {}
D = make([]int, 3)
// len = 4, cap = 10, 擴容方式 cap*=2
E := make([]int, 4, 10)
E = append(E, 1)
E1 := E[0:2] // 淺拷貝,公用底層
E2 := make([]int, 3) 
copy(E2, E) // 深拷貝
E1[0] = 100 // E會改變,E2不會改變
// 導包方式
import (new_name "package_name1""package_name2". "package_name3"
)// typedef
type myint int
// map
var mp map[string]string
if mp == nil {fmt.Printf("空\n")}
mp = make(map[string]int, 10)
mp["one"] = 1
mp["two"] = 2cMap := make(map[string]string)
cMap["one"] = "1"
cMap["two"] = "22"
delete(cMap, "one")
cMap["two"] = "2"
// 析構函數, stack
func main() {defer fmt.Printf("defer 1\n")defer fmt.Printf("defer 2\n")
}
// 函數名開頭小寫表示私有,大寫表示公有
func funName1() {}
func FunName2(a int, b string) (int, string) {ans := avar s string = breturn ans, s
}
// 本質是一個指針
type AnimalIF interface {Eat()Sleep()GetName() string
}type Dog struct {name string
}func (this *Dog) Eat() {fmt.Printf("Dog eat\n")
}func (this *Dog) Sleep() {fmt.Printf("Dog sleep\n")
}func (this *Dog) GetName() string {return this.name
}type Cat struct {name string
}func (this *Cat) Eat() {fmt.Printf("Cat eat\n")
}func (this *Cat) Sleep() {fmt.Printf("Cat sleep\n")
}func (this *Cat) GetName() string {return this.name
}func main() {var animal AnimalIFanimal = &Cat{"mike"}animal.Eat()animal.Sleep()dog := Dog{"jack"}fmt.Println(dog.GetName())
}
func testInterface(x interface{}) {value, f := x.(string)if f {fmt.Printf("value is %s", value)fmt.Printf("type is string")} else {fmt.Printf("type is not string")}
}
// [type, value]
type User struct {Id   intName string
}func (this User) Call() {fmt.Printf("user is called\n")fmt.Printf("%v\n", this)
}func reflectVar(x interface{}) {xValue := reflect.ValueOf(x)xType := reflect.TypeOf(x)fmt.Println(xType, xValue)for i := 0; i < xType.NumField(); i++ {field := xType.Field(i)value := xValue.Field(i).Interface()fmt.Printf("%s: %v = %v\n", field.Name, field.Type, value)}for i := 0; i < xType.NumMethod(); i++ {m := xType.Method(i)fmt.Printf("%s: %v\n", m.Name, m.Type)}
}func main() {user := User{11, "mike"}reflectVar(user)
}
// 標簽
type User struct {Id   int    `info:"id" doc:"編號"`Name string `info:"name" doc:"姓名"`
}func FindTag(x interface{}) {// 傳指針 FindTag(&user)t := reflect.TypeOf(x).Elem()// 傳值 FindTag(user)//t := reflect.TypeOf(x)for i := 0; i < t.NumField(); i++ {tagString := t.Field(i).Tag.Get("info")docString := t.Field(i).Tag.Get("doc")fmt.Println("info: ", tagString, ",", "doc: ", docString)}
}// json
type Moive struct {// 變量開頭大寫且加tag才能進jsonTitle  string   `json:"title"`Year   int      `json:"year"`Price  float64  `json:"price"`Actors []string `json:"actors"`
}func ReadJson(movie interface{}) {jsonStr, err := json.Marshal(movie)if err != nil {fmt.Printf("json marshal error %v\n", err)} else {fmt.Printf("jsonStr = %s\n", jsonStr)newMovie := Moive{}err = json.Unmarshal(jsonStr, &newMovie)if err != nil {fmt.Printf("json unmarshal error %v\n", err)} else {fmt.Printf("newMoive: %v\n", newMovie)}}}func main() {user := User{11, "mike"}fmt.Println(user)FindTag(&user)movie := Moive{"喜劇之王", 2000, 10, []string{"周星馳", "張柏芝"}}ReadJson(movie)
}
命令功能
go mod init生成 go.mod 文件
go mod vendor導出項目所有依賴到 vendor 目錄
go mod edit編輯 go.mod 文件
go mod download下載 go.mod 文件中指明的所有依賴
go mod tidy整理現有的依賴
go mod graph查看現有的依賴結構
go mod verify校驗一個模塊是否被篡改過
go mod why查看為什么需要依賴某模塊

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211844.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211844.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211844.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

掌握PyTorch數據預處理(一):讓模型表現更上一層樓!!!

引言 在PyTorch中&#xff0c;數據預處理是模型訓練過程中不可或缺的一環。通過精心優化數據&#xff0c;我們能夠確保模型在訓練時能夠更高效地學習&#xff0c;從而在實際應用中達到更好的性能。今天&#xff0c;我們將深入探討一些常用的PyTorch數據預處理技巧&#xff0c;…

C++如何通過調用ffmpeg接口對H264文件進行編碼和解碼

C可以通過調用FFmpeg的API來對H264文件進行編碼和解碼。下面是一個簡單的例子。 首先需要在代碼中包含FFmpeg的頭文件&#xff1a; extern "C" { #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale…

Linux系統編程:進程間通信總結

管道 在Linux中&#xff0c;管道是一種進程間通信方式&#xff0c;它允許一個進程&#xff08;寫入端&#xff09;將其輸出直接連接到另一個進程&#xff08;讀取端&#xff09;的輸入。從本質上說&#xff0c;管道也是一種文件&#xff0c;但它又和一般的文件有所不同。 具體…

Docker部署開源分布式任務調度平臺DolphinScheduler并實現遠程訪問辦公

文章目錄 前言1. 安裝部署DolphinScheduler1.1 啟動服務 2. 登錄DolphinScheduler界面3. 安裝內網穿透工具4. 配置Dolphin Scheduler公網地址5. 固定DolphinScheduler公網地址 前言 本篇教程和大家分享一下DolphinScheduler的安裝部署及如何實現公網遠程訪問&#xff0c;結合內…

前端知識筆記(二十七)———CSS核心功能手冊:從熟悉到精通

參考HTML代碼 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

12.9_黑馬數據結構與算法筆記Java

目錄 057 多路遞歸 e03 楊輝三角2 thinking&#xff1a;二維數組的動態初始化&#xff1f; 057 多路遞歸 e03 楊輝三角3 058 鏈表 e01 反轉單向鏈表1 058 鏈表 e01 反轉單向鏈表2 058 鏈表 e01 反轉單向鏈表3 遞歸 058 鏈表 e01 反轉單向鏈表4 為什么是returnn1呢&…

【Cisco Packet Tracer】路由器 NAT實驗

NAT的實現方式有三種&#xff0c;即靜態轉換Static Nat、動態轉換Dynamic Nat和端口多路復用OverLoad。 靜態轉換是指內部本地地址一對一轉換成內部全局地址&#xff0c;相當內部本地的每一臺PC都綁定了一個全局地址。一般用于在內網中對外提供服務的服務器。 [3] 動態轉換是指…

C++ 迭代器

迭代器 迭代器類似于指針類型&#xff0c;也提供了對對象的間接訪問。 就迭代器而言&#xff0c;其對象是容器中的元素或 string 對象中的字符。 獲取迭代器 容器的迭代器類型 使用作用域運算符來說明我們希望使用的類型成員&#xff1b;例&#xff1a;string::iterator it…

探秘MSSQL存儲過程:功能、用法及實戰案例

在現代軟件開發中&#xff0c;高效地操作數據庫是至關重要的。而MSSQL&#xff08;Microsoft SQL Server&#xff09;作為一款強大的關系型數據庫管理系統&#xff0c;為我們提供了豐富的功能和工具來處理數據。其中&#xff0c;MSSQL存儲過程是一項強大而又常用的功能&#xf…

改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制

???改進YOLOv8注意力系列一:結合ACmix、Biformer、BAM注意力機制 代碼ACmixBiFormerBAMBlock加入方法各種yaml加入結構本文提供了改進 YOLOv8注意力系列包含不同的注意力機制以及多種加入方式,在本文中具有完整的代碼和包含多種更有效加入YOLOv8中的yaml結構,讀者可以獲…

C++ 的關鍵字(保留字)介紹

一.C中部分關鍵字的用法 1. auto 關鍵字auto是C11引入的&#xff0c;它可以用于變量聲明和函數返回類型的推導。當你不關心變量的具體類型時&#xff0c;可以使用auto來讓編譯器根據初始化表達式推導出變量的類型。這樣可以簡化代碼&#xff0c;提高可讀性。 1.在for循環中遍…

Mysql索引一篇就夠了

索引 定義 索引是對數據庫表中一列或者多列的值進行排序的結構。 目的 數據庫索引好比一本書的目錄&#xff0c;提高查詢效率。但是為表設置索引要付出相應的代價&#xff1a; 增加了數據庫的存儲空間 在插入和修改時需花費更多的時間&#xff08;因為索引也要隨之變動&#…

一、C#筆記

1.注釋 /*多行注釋*/class HelloWorld{ void Hello(){Console.WriteLine("Hello!");//單行注釋}} 2.理解語句 2.1方法、語法、語義 2.2使用標識符 標識符語法規則&#xff1a; 只能使用字母&#xff08;大寫和小寫&#xff09;、數字和下劃…

C++相關閑碎記錄(5)

1、容器提供的類型 2、Array Array大小固定&#xff0c;只允許替換元素的值&#xff0c;不能增加或者移除元素改變大小。Array是一種有序集合&#xff0c;支持隨機訪問。 std::array<int, 4> x; //elements of x have undefined value std::array<int, 5> x {…

滲透測試——七、網站漏洞——命令注入和跨站請求偽造(CSRF)

滲透測試 一、命令注入二、跨站請求偽造(CSRF)三、命令注入頁面之注人測試四、CSRF頁面之請求偽造測試 一、命令注入 命令注入(命令執行) 漏洞是指在網頁代碼中有時需要調用一些執行系統命令的函數例如 system()、exec()、shell_exec()、eval()、passthru()&#xff0c;代碼未…

基于ssm在線云音樂系統的設計與實現論文

摘 要 隨著移動互聯網時代的發展&#xff0c;網絡的使用越來越普及&#xff0c;用戶在獲取和存儲信息方面也會有激動人心的時刻。音樂也將慢慢融入人們的生活中。影響和改變我們的生活。隨著當今各種流行音樂的流行&#xff0c;人們在日常生活中經常會用到的就是在線云音樂系統…

走迷宮(詳細分析)

目錄 一、課題描述 輸入樣例&#xff1a; 輸出樣例&#xff1a; 二、需求分析 輸入的形式和輸入值的范圍&#xff1a; 輸出的形式&#xff1a; 程序所能達到的功能&#xff1a; 三、概要設計 四、流程圖 五 、代碼詳細注釋 六、測試數據和結果 一、課題描述 以一個…

freeswitch webrtc video_demo客戶端進行MCU的視頻會議

系統環境 一、編譯服務器和加載模塊 二、下載編譯指定版本video_demo 三、配置verto.conf.xml 1.修改配置文件 2.重新啟動 四、MCU通話測試 1.如何使用video_demo 2.測試結果 五、MCU的通話原理及音頻/視頻/布局/管理員等參數配置 附錄 freeswitch微信交流群 系統環境 lsb_rel…

MyBatis處理映射關系

在Mybatis實現數據處理過程中&#xff0c;字段名符合數據庫的規則&#xff0c;屬性一般為駝峰規則&#xff0c;因此字段名和屬性名通常不一致&#xff0c;此時可以通過以下兩種方式對數據庫字段進行映射處理&#xff1a; 為字段起別名&#xff0c;保證和實體類中的屬性名一致在…

lv11 嵌入式開發 IIC(下) 20

目錄 1 Exynos4412下IIC控制器介紹 1.1 總覽 1.2 特征 1.3 工作框圖 1.4 其他內容介紹 1.5 四種工作模式寄存器流程 2 IIC寄存器詳解 2.1 概述 2.2 控制寄存器 2.3 狀態寄存器 2.4 地址寄存器 2.5 數據寄存器 2.6 其他寄存器 3 MPU06050 3.1 簡介 3.2 MPU6050主…