1.结构体的使用
package main
import (
"fmt"
"unsafe"
)
type Person struct {
name string
sex byte
age int
}
type Student struct {
p [ ] Person
id [ ] int
score [ 1000 ] int
}
func test ( man Person) {
fmt. Println ( "test temp size:" , unsafe. Sizeof ( man) )
man. name = "name1"
man. age = 33
fmt. Println ( "test: man" , man)
}
func main01 ( ) {
var man Person = Person{ "andy" , 'm' , 18 }
fmt. Println ( "man:" , man)
man2 := Person{ sex: 'f' , age: 19 }
fmt. Println ( "man2:" , man2)
fmt. Printf ( "man2.name = %q\n" , man2. name)
var man3 Person
man3. name = "mike"
man3. sex = 'm'
man3. age = 99
fmt. Println ( "man3:" , man3)
man3. age = 1073
fmt. Println ( "man3:" , man3)
var p1 Person = Person{ "andy" , 'm' , 18 }
var p2 Person = Person{ "andy" , 'm' , 18 }
var p3 Person = Person{ "andy" , 'm' , 181 }
fmt. Println ( "p1 == p2 ?" , p1 == p2)
fmt. Println ( "p1 == p3 ?" , p1 == p3)
var tmp Person
fmt. Println ( "tmp" , tmp)
tmp = p3
fmt. Println ( "tmp" , tmp)
var temp Person
fmt. Println ( "main temp size:" , unsafe. Sizeof ( temp) )
test ( temp)
fmt. Println ( "temp" , temp)
fmt. Printf ( "&tmp = %p\n" , & temp)
fmt. Printf ( "&temp.name = %p\n" , & ( temp. name) )
fmt. Println ( "main temp size:" , unsafe. Sizeof ( true ) )
}
2.结构体指针
package main
import (
"fmt"
"unsafe"
)
type Person2 struct {
name string
sex byte
age int
}
func test2 ( p * Person2) {
fmt. Println ( "test2:" , unsafe. Sizeof ( p) )
p. name = "Luffy"
p. age = 779
p. sex = 'm'
}
func main02 ( ) {
var p1 * Person2 = & Person2{ "n1" , 'f' , 19 }
fmt. Println ( "p1" , p1)
var tmp Person2 = Person2{ "n1" , 'f' , 19 }
var p2 * Person2
p2 = & tmp
fmt. Println ( "p2" , p2)
p3 := new ( Person2)
p3. name = "n3"
p3. age = 22
p3. sex = 'f'
fmt. Printf ( "p3, type= %T\n" , p3)
fmt. Println ( "p3:" , p3)
fmt. Println ( "main:" , unsafe. Sizeof ( p3) )
test2 ( p3)
fmt. Println ( "p3:" , p3)
}
3.结构体传参
package main
import "fmt"
type Person3 struct {
name string
age int
flg bool
intereset [ ] string
}
func initFunc ( p * Person3) {
p. name = "Nami"
p. age = 18
p. flg = true
p. intereset = append ( p. intereset, "shopping" )
p. intereset = append ( p. intereset, "sleeping" )
}
func initFunc2 ( ) * Person3 {
p := new ( Person3)
p. name = "Nami"
p. age = 18
p. flg = true
p. intereset = append ( p. intereset, "shopping" )
p. intereset = append ( p. intereset, "sleeping" )
return p
}
func main03 ( ) {
p2 := initFunc2 ( )
fmt. Println ( "p2" , p2)
}
4.strings头文件字符串处理
package main
import (
"fmt"
"strings"
)
func main04 ( ) {
str := "I love my work and I love my family too"
ret := strings. Split ( str, " I" )
for _ , s := range ret {
fmt. Println ( s)
}
ret = strings. Fields ( str)
for _ , s := range ret {
fmt. Println ( s)
}
flg := strings. HasSuffix ( "test.abc" , ".mp3" )
fmt. Println ( flg)
flg = strings. HasPrefix ( "test.abc" , "tes." )
fmt. Println ( flg)
}
5.文件打开和创建
package main
import (
"fmt"
"os"
)
func main0501 ( ) {
f, err := os. Create ( "D:/testFile.xyz" )
if err != nil {
fmt. Println ( "create err:" , err)
return
}
defer f. Close ( )
fmt. Println ( "successful" )
}
func main0502 ( ) {
f, err := os. Open ( "D:/testFile.xyz" )
if err != nil {
fmt. Println ( "open err:" , err)
return
}
defer f. Close ( )
strings := make ( [ ] byte , 10 )
count := 0
count, err = f. Read ( strings)
if err != nil {
return
}
fmt. Printf ( "打开文件总共数量:%d , %s\n" , count, strings)
}
func main0503 ( ) {
f, err := os. OpenFile ( "D:/testFile.xyz" , os. O_RDWR, 6 )
if err != nil {
fmt. Println ( "OpenFile err:" , err)
return
}
defer f. Close ( )
_ , err = f. WriteString ( "######" )
if err != nil {
fmt. Println ( "WriteString err:" , err)
return
}
fmt. Println ( "successful" )
}
6.写文件
package main
import (
"fmt"
"io"
"os"
)
func main06 ( ) {
f, err := os. OpenFile ( "D:/testFile.xyz" , os. O_RDWR, 6 )
if err != nil {
fmt. Println ( "OpenFile err:" , err)
return
}
defer f. Close ( )
fmt. Println ( "successful" )
n, err := f. WriteString ( "helloworld\r\n" )
if err != nil {
fmt. Println ( "WriteString err:" , err)
return
}
fmt. Println ( "WriteString n = " , n)
off, _ := f. Seek ( - 5 , io. SeekEnd)
fmt. Println ( "off:" , off)
n, _ = f. WriteAt ( [ ] byte ( "1111" ) , off)
fmt. Println ( "WriteAt n :" , n)
}
7.读文件
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main07 ( ) {
f, err := os. OpenFile ( "C:/Users/ACER/Desktop/reader.xyz" , os. O_RDWR, 6 )
if err != nil {
fmt. Println ( "OpenFile err:" , err)
return
}
defer f. Close ( )
fmt. Println ( "successful" )
reader := bufio. NewReader ( f)
for {
buf, err := reader. ReadBytes ( '\n' )
if err != nil && err == io. EOF {
fmt. Println ( "文件读取完毕" )
return
} else if err != nil {
fmt. Println ( "ReadBytes err:" , err)
}
fmt. Print ( string ( buf) )
}
}
8.文件拷贝
package main
import (
"fmt"
"io"
"os"
)
func main08 ( ) {
f_r, err := os. Open ( "C:/itcast/01-复习.avi" )
if err != nil {
fmt. Println ( "Open err: " , err)
return
}
defer f_r. Close ( )
f_w, err := os. Create ( "C:/itcast/test.avi" )
if err != nil {
fmt. Println ( "Create err: " , err)
return
}
defer f_w. Close ( )
buf := make ( [ ] byte , 4096 )
for {
n, err := f_r. Read ( buf)
if err != nil && err == io. EOF {
fmt. Printf ( "读完。n = %d\n" , n)
return
}
f_w. Write ( buf[ : n] )
}
}
9.目录操作
package main
import (
"fmt"
"os"
)
func main09 ( ) {
fmt. Println ( "请输入待查询的目录:" )
var path string
fmt. Scan ( & path)
f, err := os. OpenFile ( path, os. O_WRONLY, os. ModeDir)
if err != nil {
fmt. Println ( "OpenFile err: " , err)
return
}
defer f. Close ( )
info, err := f. Readdir ( - 1 )
if err != nil {
fmt. Println ( "Readdir err: " , err)
return
}
for _ , fileInfo := range info {
if fileInfo. IsDir ( ) {
fmt. Println ( fileInfo. Name ( ) , " 是一个目录" )
} else {
fmt. Println ( fileInfo. Name ( ) , " 是一个文件" )
}
}
}
10.练习1
package main
import (
"fmt"
"os"
"strings"
)
func main10 ( ) {
fmt. Println ( "请输入待查询的目录:" )
var path string
fmt. Scan ( & path)
f, err := os. OpenFile ( path, os. O_RDONLY, os. ModeDir)
if err != nil {
fmt. Println ( "OpenFile err: " , err)
return
}
defer f. Close ( )
info, err := f. Readdir ( - 1 )
if err != nil {
fmt. Println ( "Readdir err: " , err)
return
}
for _ , fileInfo := range info {
if ! fileInfo. IsDir ( ) {
if strings. HasSuffix ( fileInfo. Name ( ) , ".mp3" ) {
fmt. Println ( "jpg 文件有:" , fileInfo. Name ( ) )
}
}
}
}
11.练习2
package main
import (
"fmt"
"io"
"os"
"strings"
)
func cpMP32Dir ( src, dst string ) {
f_r, err := os. Open ( src)
if err != nil {
fmt. Println ( "Open err: " , err)
return
}
defer f_r. Close ( )
f_w, err := os. Create ( dst)
if err != nil {
fmt. Println ( "Create err: " , err)
return
}
defer f_w. Close ( )
buf := make ( [ ] byte , 4096 )
for {
n, err := f_r. Read ( buf)
if err != nil && err == io. EOF {
fmt. Printf ( "读完。n = %d\n" , n)
return
}
f_w. Write ( buf[ : n] )
}
}
func main11 ( ) {
fmt. Println ( "请输入待查询的目录:" )
var path string
fmt. Scan ( & path)
f, err := os. OpenFile ( path, os. O_RDONLY, os. ModeDir)
if err != nil {
fmt. Println ( "OpenFile err: " , err)
return
}
defer f. Close ( )
info, err := f. Readdir ( - 1 )
if err != nil {
fmt. Println ( "Readdir err: " , err)
return
}
for _ , fileInfo := range info {
if ! fileInfo. IsDir ( ) {
if strings. HasSuffix ( fileInfo. Name ( ) , ".mp3" ) {
cpMP32Dir ( path+ "/" + fileInfo. Name ( ) , "./" + fileInfo. Name ( ) )
}
}
}
}