php網(wǎng)頁(yè)設(shè)計(jì)論文,淄博seo公司,電商網(wǎng)站有哪些官網(wǎng),南寧網(wǎng)站建設(shè)智能優(yōu)化目錄標(biāo)題 一、Reflection反射1. What is reflection? 什么是反射2. Inspect a variable and find its type 檢查變量并找到它的類(lèi)型3. Reflect.Type and reflect.Value 反射類(lèi)型和值4. Reflect.Kind 查看底層種類(lèi)5. NumField() and Field() methods 字段數(shù)量和索引值方法6. In…
目錄標(biāo)題
一、Reflection反射
1. What is reflection? 什么是反射
2. Inspect a variable and find its type 檢查變量并找到它的類(lèi)型
3. Reflect.Type and reflect.Value 反射類(lèi)型和值
4. Reflect.Kind 查看底層種類(lèi)
5. NumField() and Field() methods 字段數(shù)量和索引值方法
6. Int() and String() methods 整型和字符型方法
7. Complete Program 完整示例
二、 Reading Files
1. Reading Files 讀取文件
2. Using absolute file path 使用絕對(duì)路徑
3. Passing the file path as a command line flag 將文件路徑作為命令行標(biāo)志傳遞
2. Inspect a variable and find its type 檢查變量并找到它的類(lèi)型
package mainimport("fmt")type order struct{ordId intcustomerId int}type employee struct{name stringid intaddress stringsalary intcountry string}funccreateQuery(b order)string{i := fmt.Sprintf("insert into order values(%d, %d)", b.ordId, b.customerId)return i}funccreateQuerySet(b employee)string{i := fmt.Sprintf("insert into order values(%s, %d, %s, %d, %s)", b.name, b.id, b.address, b.salary, b.country)return i}funcmain(){a :=10fmt.Printf("%d, %T\n", a, a)b := order{171103,1006,}e := employee{"Like",1,"Shanghai",999999,"Minghang",}fmt.Println(createQuery(b))fmt.Println(createQuerySet(e))}// 10, int// insert into order values(171103, 1006)// insert into order values(Like, 1, Shanghai, 999999, Minghang)
3. Reflect.Type and reflect.Value 反射類(lèi)型和值
package mainimport("fmt""reflect")type order struct{ ordId intcustomerId int}funccreateQuery(q interface{}){ t := reflect.TypeOf(q)v := reflect.ValueOf(q)fmt.Println("Type ", t)fmt.Println("Value ", v)}funcmain(){ o := order{ordId:456,customerId:56,}createQuery(o)}// Type main.order // Value {456 56}
4. Reflect.Kind 查看底層種類(lèi)
package mainimport("fmt""reflect")type order struct{ ordId intcustomerId int}funccreateQuery(q interface{}){ t := reflect.TypeOf(q)k := t.Kind()fmt.Println("Type ", t)fmt.Println("Kind ", k)}funcmain(){ o := order{ordId:456,customerId:56,}createQuery(o)}// Type main.order // Kind struct
5. NumField() and Field() methods 字段數(shù)量和索引值方法
package mainimport("fmt""reflect")type order struct{ ordId intcustomerId int}funccreateQuery(q interface{}){if reflect.ValueOf(q).Kind()== reflect.Struct {// struct == structv := reflect.ValueOf(q)// {456 56}fmt.Println("Number of fields", v.NumField())// 2for i :=0; i < v.NumField(); i++{fmt.Printf("Field:%d type:%T value:%v\n", i, v.Field(i), v.Field(i))}}}funcmain(){ o := order{ordId:456,customerId:56,}createQuery(o)}// Number of fields 2 // Field:0 type:reflect.Value value:456 // Field:1 type:reflect.Value value:56
6. Int() and String() methods 整型和字符型方法
package mainimport("fmt""reflect")funcmain(){ a :=56x := reflect.ValueOf(a).Int()fmt.Printf("type:%T value:%v\n", x, x)b :="Naveen"y := reflect.ValueOf(b).String()fmt.Printf("type:%T value:%v\n", y, y)}// type:int64 value:56 // type:string value:Naveen
7. Complete Program 完整示例
package mainimport("fmt""reflect")type order struct{ ordId intcustomerId int}type employee struct{ name stringid intaddress stringsalary intcountry string}funccreateQuery(q interface{}){if reflect.ValueOf(q).Kind()== reflect.Struct {t := reflect.TypeOf(q).Name()query := fmt.Sprintf("insert into %s values(", t)// 輸出傳入的valuesv := reflect.ValueOf(q)// 賦值vfor i :=0; i < v.NumField(); i++{switch v.Field(i).Kind(){case reflect.Int:if i ==0{query = fmt.Sprintf("%s%d", query, v.Field(i).Int())}else{query = fmt.Sprintf("%s, %d", query, v.Field(i).Int())}case reflect.String:if i ==0{query = fmt.Sprintf("%s\"%s\"", query, v.Field(i).String())}else{query = fmt.Sprintf("%s, \"%s\"", query, v.Field(i).String())}default:fmt.Println("Unsupported type")return}}query = fmt.Sprintf("%s)", query)fmt.Println(query)return}fmt.Println("unsupported type")}funcmain(){ o := order{ordId:456,customerId:56,}createQuery(o)e := employee{name:"Naveen",id:565,address:"Coimbatore",salary:90000,country:"India",}createQuery(e)i :=90createQuery(i)}// insert into order values(456, 56) // insert into employee values("Naveen", 565, "Coimbatore", 90000, "India") // unsupported type
二、 Reading Files
1. Reading Files 讀取文件
package mainimport("fmt""os")funcmain(){contents, err := os.ReadFile("test.txt")if err !=nil{fmt.Println("File reading error", err)return}fmt.Println("Contents os file:",string(contents))}// Contents os file: Hello World. Welcome to file handling in GO
2. Using absolute file path 使用絕對(duì)路徑
package mainimport("fmt""os")funcmain(){contents, err := os.ReadFile("D:/Go/oop/test.txt")if err !=nil{fmt.Println("File reading error", err)return}fmt.Println("Contents os file:",string(contents))}// Contents os file: Hello World. Welcome to file handling in GO
3. Passing the file path as a command line flag 將文件路徑作為命令行標(biāo)志傳遞
package main import("flag""fmt")funcmain(){ fptr := flag.String("fpath","test.txt","file path to read from")flag.Parse()contents, err := os.ReadFile(*fptr)if err !=nil{fmt.Println("File reading error", err)return}fmt.Println("Contents of file: ",string(contents))}// Contents of file: Hello World. Welcome to file handling in GO.
4. Reading a file in small chunks
package mainimport("bufio""flag""fmt""io""log""os")funcmain(){targetPath := flag.String("targetPath","test.txt","file path to read from")flag.Parse()// 進(jìn)行命令行參數(shù)的解析 將相應(yīng)的值賦給標(biāo)志變量targetPathf, err := os.Open(*targetPath)// err: nil f: *os.Fileif err !=nil{log.Fatal(err)// 將錯(cuò)誤信息打印到標(biāo)準(zhǔn)錯(cuò)誤輸出}deferfunc(){// 延遲開(kāi)啟匿名函數(shù)一直循環(huán) 如果關(guān)閉文件時(shí)發(fā)送錯(cuò)誤 log處理錯(cuò)誤if err = f.Close(); err !=nil{log.Fatal(err)}}()r := bufio.NewReader(f)// 創(chuàng)建了一個(gè) bufio.Reader 對(duì)象r用于逐行讀取文件內(nèi)容b :=make([]byte,3)for{n, err := r.Read(b)// r.Read(b) 方法讀取文件內(nèi)容 將讀取到的內(nèi)容存儲(chǔ)在字節(jié)切片b中 并返回讀取的字節(jié)數(shù)n和可能出現(xiàn)的錯(cuò)誤errif err == io.EOF {// 如果讀取到文件末尾輸出fmt.Println("Finished reading file")break}if err !=nil{// 如果讀取文件發(fā)生錯(cuò)誤fmt.Println("Error %s reading files", err)break}fmt.Println(string(b[0:n]))// 輸出切片內(nèi)容 切片容量3}}// Hel // lo // Wor // ld. // We// lco // me // to // fil // e h // and // lin // g i // n G // o. // finished reading file
5. Reading a file line by line 逐行讀取文件
package mainimport("bufio""flag""fmt""log""os")funcmain(){ fptr := flag.String("fpath","test.txt","file path to read from")flag.Parse()f, err := os.Open(*fptr)if err !=nil{log.Fatal(err)}deferfunc(){if err = f.Close(); err !=nil{log.Fatal(err)}}()s := bufio.NewScanner(f)for s.Scan(){fmt.Println(s.Text())}err = s.Err()if err !=nil{log.Fatal(err)}}// Hello World. Welcome to file handling in Go. // This is the second line of the file. // We have reached the end of the file.