Browse Source

ttttt #Merge branch 'master' of https://github.com/SisMaker/goUtils

v1
SisMaker 5 years ago
parent
commit
5bcc6a7c28
20 changed files with 205 additions and 71 deletions
  1. +9
    -0
      src/docs/go方法.md
  2. +3
    -0
      src/go.mod
  3. +3
    -3
      src/learn/addrOp.go
  4. +1
    -1
      src/learn/ariOp.go
  5. +5
    -2
      src/learn/array.go
  6. +0
    -2
      src/learn/charCount.go
  7. +1
    -1
      src/learn/constVar.go
  8. +8
    -6
      src/learn/fetch.go
  9. +12
    -11
      src/learn/fetch2.go
  10. +2
    -2
      src/learn/geometry/geometry/geometry.go
  11. +2
    -1
      src/learn/hello.go
  12. +2
    -3
      src/learn/interface/io/io.go
  13. +25
    -0
      src/learn/method.go
  14. +33
    -0
      src/learn/methodSet.go
  15. +7
    -7
      src/learn/mulVar.go
  16. +53
    -0
      src/learn/overMethod.go
  17. +15
    -5
      src/learn/slice.go
  18. +9
    -13
      src/learn/struct.go
  19. +12
    -13
      src/learn/structs.go
  20. +3
    -1
      src/learn/var.go

+ 9
- 0
src/docs/go方法.md View File

@ -6,3 +6,12 @@
而且为防止混淆 不允许本身是指针的类型进行方法声明
type P *int
func (p P) f() {/* ... */} //编译错误 非法的接受者类型
# 方法集
类型有一个与之相关的方法集(method set) 这决定了他是否实现了某个接口
类型T方法集包含了所有 receiver T方法
类型*T方法集包含了所有receiver T + *T方法
匿名嵌入S, T方法集包含了所有 receiver S方法
匿名嵌入*S, T方法集包含了所有receiver S + *S方法
匿名嵌入S或*S, *T方法集包含了所有receiver S+ *S方法

+ 3
- 0
src/go.mod View File

@ -0,0 +1,3 @@
module goUtils
go 1.12

+ 3
- 3
src/learn/addrOp.go View File

@ -2,7 +2,7 @@ package main
import "fmt"
func main(){
func main() {
var a int = 4
var b int32
var c float32
@ -13,7 +13,7 @@ func main(){
fmt.Printf("第三行 -c 变量类型为 %T\n", c)
ptr = &a
fmt.Printf("a的值为 %d \n",a)
fmt.Printf("a的值为 %d \n", a)
fmt.Printf("ptr为 %d\n", *ptr)
fmt.Printf("ptr %d\n", ptr)
}
}

+ 1
- 1
src/learn/ariOp.go View File

@ -12,7 +12,7 @@ func main() {
fmt.Printf("第 2222 c 的值 %d \n", c)
c = a * b
fmt.Printf("第 3333 c 的值 %d \n", c)
c = a*1.0 / b
c = a * 1.0 / b
fmt.Printf("第 4444 c 的值 %d \n", c)
c = a % b
fmt.Printf("第 5555 c 的值 %d \n", c)

+ 5
- 2
src/learn/array.go View File

@ -11,9 +11,12 @@ func main() {
}
//var tet , bb int = 1, 2
var (tet int; bb string)
var (
tet int;
bb string
)
print(tet, bb)
months := [...]string{1:"January", 12:"December"}
months := [...]string{1: "January", 12: "December"}
Q2 := months[4:7]
fmt.Println("%T %T", months, Q2)

+ 0
- 2
src/learn/charCount.go View File

@ -12,7 +12,6 @@ import (
var g = make(map[string]map[string]map[string]bool)
var s = []uint{1}
func main() {
counts := make(map[rune]int)
var utflen [utf8.UTFMax + 1]int
@ -55,5 +54,4 @@ func main() {
}
}

+ 1
- 1
src/learn/constVar.go View File

@ -5,7 +5,7 @@ import (
"unsafe"
)
const(
const (
a1 = "abc"
b1 = len(a1)
c1 = unsafe.Sizeof(a1)

+ 8
- 6
src/learn/fetch.go View File

@ -1,23 +1,25 @@
package main
import(
import (
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main(){
for _, url := range os.Args[1:]{
func main() {
for _, url := range os.Args[1:] {
resp, err := http.Get(url)
if err != nil{
if err != nil {
fmt.Fprintf(os.Stderr, "fetch:%v\n", err)
os.Exit(1)
}
b, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil{
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
os.Exit(1)
}
fmt.Printf("IMY****\n %s\n", b)
}
}
}

+ 12
- 11
src/learn/fetch2.go View File

@ -1,5 +1,6 @@
package main
import(
import (
"fmt"
"io"
"io/ioutil"
@ -8,29 +9,29 @@ import(
"time"
)
func main() {
func main() {
start := time.Now()
ch := make(chan string)
for _, url := range os.Args[1:]{
go fetch(url, ch) // 启动一个goroutine
for _, url := range os.Args[1:] {
go fetch(url, ch) // 启动一个goroutine
}
for range os.Args[1:]{
fmt.Println(<- ch)
for range os.Args[1:] {
fmt.Println(<-ch)
}
fmt.Printf("IMY*****main* %2fs elapsed\n", time.Since(start).Seconds())
}
func fetch(url string, ch chan <- string){
func fetch(url string, ch chan<- string) {
start := time.Now()
resp, err := http.Get(url)
if err != nil{
if err != nil {
ch <- fmt.Sprint(err) // 发送到通道ch
return
}
nbytes, err := io.Copy(ioutil.Discard, resp.Body)
resp.Body.Close() //不要泄露资源
if err != nil{
resp.Body.Close() //不要泄露资源
if err != nil {
ch <- fmt.Sprintf("while reading %s %v", url, err)
return
@ -38,4 +39,4 @@ func fetch(url string, ch chan <- string){
secs := time.Since(start).Seconds()
ch <- fmt.Sprintf("IMY***fetch* %.2fs, %7d %s ", secs, nbytes, url)
}
}

+ 2
- 2
src/learn/geometry/geometry/geometry.go View File

@ -2,7 +2,7 @@ package geometry
import "math"
type Point struct {X, Y float64}
type Point struct{ X, Y float64 }
// 普通函数
func Distance(p, q Point) float64 {
@ -32,4 +32,4 @@ func (path Path) Distance() float64 {
func (p *Point) ScaleBy(factor float64) {
p.X *= factor
p.Y *= factor
}
}

+ 2
- 1
src/learn/hello.go View File

@ -1,6 +1,7 @@
package learn
import "fmt"
func main(){
func main() {
fmt.Println("hello world!")
}

+ 2
- 3
src/learn/interface/io/io.go View File

@ -1,4 +1,5 @@
package io
type Reader interface {
Read(p []byte) (n int, err error)
}
@ -11,7 +12,7 @@ type Closer interface {
Close() error
}
type ReadWriter interface{
type ReadWriter interface {
Reader
Writer
}
@ -28,5 +29,3 @@ type ReadWriteCloser2 interface {
Writer
Close() error
}

+ 25
- 0
src/learn/method.go View File

@ -0,0 +1,25 @@
package main
import "fmt"
type N int
func (n N) value() {
n++
fmt.Println("v: %p %v \n ", &n, n)
}
func (n *N) pointer() {
(*n)++
fmt.Println("v: %p %v \n ", n, *n)
}
func main() {
var a N = 25
p := &a
p2 := &p
(*p2).value()
(*p2).pointer()
}

+ 33
- 0
src/learn/methodSet.go View File

@ -0,0 +1,33 @@
package main
import (
"fmt"
"reflect"
)
type S struct{}
type T struct {
S
}
func (S) sVal() {}
func (*S) sPtr() {}
func (T) tVal() {}
func (*T) tPtr() {}
func methodSet(I interface{}) {
t := reflect.TypeOf(I)
fmt.Println(t)
for i, n := 0, t.NumMethod(); i < n; i++ {
m := t.Method(i)
fmt.Println(m.Name, m.Type)
}
}
func main() {
var t T
methodSet(t)
println("-----------------")
methodSet(&t)
}

+ 7
- 7
src/learn/mulVar.go View File

@ -1,9 +1,9 @@
package main
var x, y int
var ( // 这种因式分解关键字的写法一般用于声明全局变量
a int
b bool
var ( // 这种因式分解关键字的写法一般用于声明全局变量
a int
b bool
)
var c, d int = 1, 2
@ -12,7 +12,7 @@ var e, f = 123, "hello"
//这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello"
func main(){
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
}
func main() {
g, h := 123, "hello"
println(x, y, a, b, c, d, e, f, g, h)
}

+ 53
- 0
src/learn/overMethod.go View File

@ -0,0 +1,53 @@
package main
type Str interface {
toStr()
add()
}
type user struct {
a int
b string
}
type manger struct {
*user
aa int
bb string
}
func (u user) toStr() {
println("IMY********user", u.a, " ", u.b)
}
func (u user) add() {
println("IMY********user222", u.a, " ", u.b)
}
func (m manger) toStr() {
println("IMY********manger")
}
func overa(s Str) {
println("TEST********", s)
s.toStr()
}
func overb(s Str) {
println("TEST********", s)
s.add()
}
func main() {
var m manger = manger{&user{22, "22uuuuuuuu"}, 1, "mmmmm"}
var u user = user{2, "uuuuuuuuu"}
u.toStr()
m.toStr()
overa(m)
overa(u)
overb(u)
overb(m)
}

+ 15
- 5
src/learn/slice.go View File

@ -34,17 +34,27 @@ func remove(slice []int, i int) []int {
return slice[:len(slice)-1]
}
func remove2(slice []int, i int) []int{
slice[i] = slice[len(slice) - 1]
return slice[:len(slice) - 1]
func remove2(slice []int, i int) []int {
slice[i] = slice[len(slice)-1]
return slice[:len(slice)-1]
}
func main(){
func main() {
s := []int{5, 6, 7, 8, 9}
fmt.Println(s[:len(s)])
fmt.Println(remove2(s, 2))
}
m := map[string][2]int{
"a": {1, 2},
"b": {3, 4},
}
s1 := m["a"]
s2 := s1[:]
fmt.Printf("sssss %v %v \n", s1, s2)
ssss := [][][][][][]int{}
fmt.Printf("%T \n", ssss)
}

+ 9
- 13
src/learn/struct.go View File

@ -1,24 +1,22 @@
package main
import (
"fmt"
"time"
)
type Emplyee struct{
Id int
Name string
Address string
Dob time.Time
Position string
Salary int
type Emplyee struct {
Id int
Name string
Address string
Dob time.Time
Position string
Salary int
ManagerId int
}
var dilbert Emplyee
func test(){
func test() {
dilbert.Salary -= 5000
posPtr := &dilbert.Position
*posPtr = "fdfdsfdfd" + *posPtr
@ -32,11 +30,9 @@ func test(){
//没有任何成员变量的结构体成为空结构体
set := make(map[string]struct{})
if _, ok := set[str]; !ok{
if _, ok := set[str]; !ok {
set[str] = struct{}{}
}
}

+ 12
- 13
src/learn/structs.go View File

@ -2,14 +2,14 @@ package main
import "fmt"
type Books struct{
title string
author string
type Books struct {
title string
author string
subject string
book_id int
}
func main(){
func main() {
var Book1 Books
var Book2 Books
@ -24,16 +24,15 @@ func main(){
Book2.book_id = 464513
/* 打印 Book1 信息 */
fmt.Printf( "Book 1 title : %s\n", Book1.title)
fmt.Printf( "Book 1 author : %s\n", Book1.author)
fmt.Printf( "Book 1 subject : %s\n", Book1.subject)
fmt.Printf( "Book 1 book_id : %d\n", Book1.book_id)
fmt.Printf("Book 1 title : %s\n", Book1.title)
fmt.Printf("Book 1 author : %s\n", Book1.author)
fmt.Printf("Book 1 subject : %s\n", Book1.subject)
fmt.Printf("Book 1 book_id : %d\n", Book1.book_id)
/* 打印 Book2 信息 */
fmt.Printf( "Book 2 title : %s\n", Book2.title)
fmt.Printf( "Book 2 author : %s\n", Book2.author)
fmt.Printf( "Book 2 subject : %s\n", Book2.subject)
fmt.Printf( "Book 2 book_id : %d\n", Book2.book_id)
fmt.Printf("Book 2 title : %s\n", Book2.title)
fmt.Printf("Book 2 author : %s\n", Book2.author)
fmt.Printf("Book 2 subject : %s\n", Book2.subject)
fmt.Printf("Book 2 book_id : %d\n", Book2.book_id)
}

+ 3
- 1
src/learn/var.go View File

@ -1,5 +1,7 @@
package main
import "fmt"
func main() {
// 声明一个变量并初始化
@ -22,7 +24,7 @@ func main() {
var a1 *int
var a2 []int
var a3 map[string] int
var a3 map[string]int
var a4 chan int
var a5 func(string) int
var a6 error // error 是接口

Loading…
Cancel
Save