鱼C论坛

 找回密码
 立即注册
查看: 4936|回复: 15

[技术交流] 我的练习

[复制链接]
发表于 2017-3-24 13:29:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
把一个数从1加到100package main

import (
        "fmt"
)

func main() {
        a := 0
        for i := 0; i <= 100; i++ {
                a = a + i
        }
        fmt.Printf("1+1+2...+100=%d", a)
}
从1-100里选一个数,如果不是你心里想的数就输入n否则就输入y退出循环// searchNumber project main.go
package main

import (
        "fmt"
        "sort"
)

func main() {
        fmt.Println("pick number from 0 to 100")
        fmt.Printf("you number is %d\n", sort.Search(100, func(i int) bool {
                fmt.Printf("is you number <=%d?", i)
                var s string
                fmt.Scanf("%s\n", &s)
                return s != "" && s[0] == 'y'
        }))
}
注意:两个文件不能放在一个文件目录里
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-24 14:36:03 | 显示全部楼层
用迭代给数组赋值跟遍历
  1. package main

  2. import (
  3.         "fmt"
  4. )

  5. func main() {
  6.         a := make([]int, 6, 6)
  7.         for i := 0; i < 6; i++ {
  8.                 a[i] = i
  9.         }
  10.         for _, i := range a {
  11.                 fmt.Printf("%d\n", i)
  12.         }

  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 16:44:23 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-3-25 09:37:47 | 显示全部楼层
打印时长
  1. package main

  2. import (
  3.         "fmt"
  4.         "time"
  5. )

  6. func main() {
  7.         t1 := time.Now()
  8.         for j := 0; j < 7; j++ {
  9.                 t := time.Weekday(j)
  10.                 fmt.Println(t)
  11.         }

  12.         time.Sleep(time.Second)
  13.         t2 := time.Now()
  14.         d := t2.Sub(t1)
  15.         fmt.Println(d)
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-25 14:34:10 | 显示全部楼层
调用结构体的方法
  1. package main

  2. import (
  3.         "fmt"
  4.         "math"
  5. )

  6. type Vertex struct{ X, Y float64 }

  7. func (v Vertex) Abs() float64 {
  8.         return math.Sqrt(v.X*v.X + v.Y*v.Y)//开方
  9. }

  10. func main() {
  11.         v := &Vertex{3, 4}
  12.         fmt.Println(v.Abs())
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 10:17:30 | 显示全部楼层
做一个int型的方法打印出100个数
  1. package main

  2. import (
  3.         "fmt"
  4. )

  5. type A int

  6. func (self *A) Increase() {
  7.         for a := 0; a < 100; a++ {
  8.                 fmt.Println(a)
  9.         }
  10. }
  11. func main() {
  12.         var a A
  13.         a.Increase()

  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-27 09:14:33 | 显示全部楼层
利用接口实现反射机制
  1. package main

  2. import (
  3.         "fmt"
  4.         "reflect"
  5. )

  6. type Apple struct {
  7.         Id    int
  8.         Color string
  9. }

  10. func Set(o interface{}) {
  11.         v := reflect.ValueOf(o)
  12.         if v.Kind() == reflect.Ptr && !v.Elem().CanSet() {
  13.                 fmt.Println("erro")
  14.                 return
  15.         } else {
  16.                 v = v.Elem()
  17.         }
  18.         if f := v.FieldByName("Color"); f.Kind() == reflect.String {
  19.                 f.SetString("green") //把值修改成绿色
  20.         }
  21. }
  22. func main() {
  23.         u := Apple{1, "red"}
  24.         Set(&u)
  25.         fmt.Println(u)
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-27 14:10:44 | 显示全部楼层
结构体的嵌套
  1. package main

  2. import (
  3.         "fmt"
  4. )

  5. type Rectangle struct {
  6.         Text
  7.         Width  int
  8.         Height int
  9. }
  10. type Text struct {
  11.         FontColor string
  12. }

  13. func (rect Rectangle) PrintAttr() {
  14.         fmt.Println(rect)
  15. }
  16. func main() {
  17.         rectangle := Rectangle{Text{"black"}, 70, 80}
  18.         rectangle.PrintAttr()
  19.         rectangle.Text.FontColor = "red" //把字体颜色修改为红色
  20.         rectangle.PrintAttr()
  21. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-28 11:23:40 | 显示全部楼层
通道传值
  1. package main

  2. import (
  3.         "fmt"
  4.         "time"
  5. )

  6. func main() {
  7.         c := make(chan bool)
  8.         go Go(c)
  9.         b := <-c //等待通道数据传过来才继续往下执行
  10.         fmt.Println(b)
  11. }
  12. func Go(c chan bool) {
  13.         fmt.Println("go go go")
  14.         time.Sleep(3 * time.Second)
  15.         c <- true
  16. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 08:13:13 | 显示全部楼层
简单计时器功能
  1. import (
  2.         "fmt"
  3.         "time"
  4. )

  5. func main() {
  6.         c := make(chan bool)
  7.         for i := 0; i < 60; i++ {
  8.                 fmt.Println(i)
  9.                 go TimeOut(c)
  10.                 <-c
  11.         }
  12.         fmt.Println("哎!时间又过去了一分钟")
  13. }
  14. func TimeOut(c chan bool) {
  15.         time.Sleep(time.Second)
  16.         c <- true
  17. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 12:59:05 | 显示全部楼层
写文件
  1. package main

  2. import (
  3.         "fmt"
  4.         "os"
  5. )

  6. func main() {
  7.         userFile := "test.txt"
  8.         fout, err := os.Create(userFile)
  9.         defer fout.Close()//强制关闭资源
  10.         if err != nil {
  11.                 fmt.Println(userFile, err)
  12.                 return
  13.         }
  14.         for i := 0; i < 10; i++ {
  15.                 fout.WriteString("Just a test!\r\n")
  16.                 fout.Write([]byte("Just a test!\r\n"))
  17.         }
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 13:03:33 | 显示全部楼层
读文件
  1. package main

  2. import (
  3.         "fmt"
  4.         "os"
  5. )

  6. func main() {
  7.         userFile := "test.txt"
  8.         fin, err := os.Open(userFile)
  9.         defer fin.Close()
  10.         if err != nil {
  11.                 fmt.Println(userFile, err)
  12.                 return
  13.         }
  14.         buf := make([]byte, 1024)
  15.         for {
  16.                 n, _ := fin.Read(buf)
  17.                 if 0 == n {
  18.                         break
  19.                 }
  20.                 os.Stdout.Write(buf[:n])
  21.         }
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-31 07:50:32 | 显示全部楼层
同步锁
  1. package main

  2. import (
  3.         "fmt"
  4.         "math/rand"
  5.         "sync"
  6.         "time"
  7. )

  8. type LockMap struct {
  9.         sync.Mutex
  10.         m map[string]int
  11. }

  12. var lockMap = make([]LockMap, 10)

  13. func init() {
  14.         for i := range lockMap {
  15.                 lockMap[i].m = make(map[string]int)
  16.         }
  17. }
  18. func counter(s string) {
  19.         i := int(s[0] - '0')
  20.         time.Sleep(time.Duration(i) * time.Millisecond)
  21.         lockMap[i].Lock()
  22.         defer lockMap[i].Unlock()
  23.         lockMap[i].m[s]++
  24. }
  25. func main() {
  26.         for i := 0; i < 20; i++ {
  27.                 r := fmt.Sprintf("%d", rand.Uint32())
  28.                 go counter(r)
  29.         }
  30.         time.Sleep(time.Second)
  31.         for i := range lockMap {
  32.                 for k, v := range lockMap[i].m {
  33.                         fmt.Printf("[%d]%s = %d\n", i, k, v)
  34.                 }
  35.         }
  36. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-2 10:59:08 | 显示全部楼层
select语句用法
  1. package main

  2. import (
  3.         "fmt"
  4.         "strconv"
  5. )

  6. func main() {
  7.         c := make(chan int)

  8.         go Run(c)
  9.         select {
  10.         case b := <-c:
  11.                 a := strconv.Itoa(b)
  12.                 fmt.Println("send number is " + a)
  13.         }

  14. }
  15. func Run(c chan int) {
  16.         select { //随机传一个数
  17.         case c <- 1:
  18.         case c <- 2:
  19.         }

  20. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-2 13:50:32 | 显示全部楼层
输出XML格式
  1. package main

  2. import (
  3.         "encoding/xml"
  4.         "fmt"
  5.         "os"
  6. )

  7. type Address struct {
  8.         City, State string
  9. }
  10. type Person struct {
  11.         XMLName   xml.Name `xml:"person"`
  12.         Id        int      `xml:"id,attr"`
  13.         FirstName string   `xml:"name>first"`
  14.         LastName  string   `xml:"name>last"`
  15.         Age       int      `xml:"age"`
  16.         Height    float32  `xml:"height,omitempty"`
  17.         Married   bool
  18.         Address
  19.         Comment string `xml:",comment"`
  20. }

  21. func main() {
  22.         v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42}
  23.         v.Comment = " Need more details. "
  24.         v.Address = Address{"Hanga Roa", "Easter Island"}

  25.         output, err := xml.MarshalIndent(v, "  ", "    ")
  26.         if err != nil {
  27.                 fmt.Printf("error: %v\n", err)
  28.         }

  29.         os.Stdout.Write(output)
  30. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-6 11:13:07 | 显示全部楼层
变换成json格式再转换回字典
  1. package main

  2. import (
  3.         "encoding/json"
  4.         "fmt"
  5. )

  6. func main() {
  7.         //json encode
  8.         j1 := make(map[string]interface{})
  9.         j1["name"] = "脚本之家"
  10.         j1["url"] = "http://www.jb51.net/"
  11.         js1, err := json.Marshal(j1)
  12.         if err != nil {
  13.                 panic(err)
  14.         }
  15.         fmt.Println(string(js1))
  16.         //json decode
  17.         j2 := make(map[string]interface{})
  18.         err = json.Unmarshal(js1, &j2)
  19.         if err != nil {
  20.                 panic(err)
  21.         }
  22.         fmt.Printf("%#v\n", j2)
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-27 17:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表