鱼C论坛

 找回密码
 立即注册
查看: 4593|回复: 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'
        }))
}
注意:两个文件不能放在一个文件目录里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

import (
        "fmt"
)

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

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 16:44:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

import (
        "fmt"
        "time"
)

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

        time.Sleep(time.Second)
        t2 := time.Now()
        d := t2.Sub(t1)
        fmt.Println(d)
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "math"
)

type Vertex struct{ X, Y float64 }

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

func main() {
        v := &Vertex{3, 4}
        fmt.Println(v.Abs())
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
)

type A int

func (self *A) Increase() {
        for a := 0; a < 100; a++ {
                fmt.Println(a)
        }
}
func main() {
        var a A
        a.Increase()

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "reflect"
)

type Apple struct {
        Id    int
        Color string
}

func Set(o interface{}) {
        v := reflect.ValueOf(o)
        if v.Kind() == reflect.Ptr && !v.Elem().CanSet() {
                fmt.Println("erro")
                return
        } else {
                v = v.Elem()
        }
        if f := v.FieldByName("Color"); f.Kind() == reflect.String {
                f.SetString("green") //把值修改成绿色
        }
}
func main() {
        u := Apple{1, "red"}
        Set(&u)
        fmt.Println(u)
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
)

type Rectangle struct {
        Text
        Width  int
        Height int
}
type Text struct {
        FontColor string
}

func (rect Rectangle) PrintAttr() {
        fmt.Println(rect)
}
func main() {
        rectangle := Rectangle{Text{"black"}, 70, 80}
        rectangle.PrintAttr()
        rectangle.Text.FontColor = "red" //把字体颜色修改为红色
        rectangle.PrintAttr()
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "time"
)

func main() {
        c := make(chan bool)
        go Go(c)
        b := <-c //等待通道数据传过来才继续往下执行
        fmt.Println(b)
}
func Go(c chan bool) {
        fmt.Println("go go go")
        time.Sleep(3 * time.Second)
        c <- true
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

func main() {
        c := make(chan bool)
        for i := 0; i < 60; i++ {
                fmt.Println(i)
                go TimeOut(c)
                <-c
        }
        fmt.Println("哎!时间又过去了一分钟")
}
func TimeOut(c chan bool) {
        time.Sleep(time.Second)
        c <- true
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "os"
)

func main() {
        userFile := "test.txt"
        fout, err := os.Create(userFile)
        defer fout.Close()//强制关闭资源
        if err != nil {
                fmt.Println(userFile, err)
                return
        }
        for i := 0; i < 10; i++ {
                fout.WriteString("Just a test!\r\n")
                fout.Write([]byte("Just a test!\r\n"))
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "os"
)

func main() {
        userFile := "test.txt"
        fin, err := os.Open(userFile)
        defer fin.Close()
        if err != nil {
                fmt.Println(userFile, err)
                return
        }
        buf := make([]byte, 1024)
        for {
                n, _ := fin.Read(buf)
                if 0 == n {
                        break
                }
                os.Stdout.Write(buf[:n])
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "math/rand"
        "sync"
        "time"
)

type LockMap struct {
        sync.Mutex
        m map[string]int
}

var lockMap = make([]LockMap, 10)

func init() {
        for i := range lockMap {
                lockMap[i].m = make(map[string]int)
        }
}
func counter(s string) {
        i := int(s[0] - '0')
        time.Sleep(time.Duration(i) * time.Millisecond)
        lockMap[i].Lock()
        defer lockMap[i].Unlock()
        lockMap[i].m[s]++
}
func main() {
        for i := 0; i < 20; i++ {
                r := fmt.Sprintf("%d", rand.Uint32())
                go counter(r)
        }
        time.Sleep(time.Second)
        for i := range lockMap {
                for k, v := range lockMap[i].m {
                        fmt.Printf("[%d]%s = %d\n", i, k, v)
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "fmt"
        "strconv"
)

func main() {
        c := make(chan int)

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

}
func Run(c chan int) {
        select { //随机传一个数
        case c <- 1:
        case c <- 2:
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "encoding/xml"
        "fmt"
        "os"
)

type Address struct {
        City, State string
}
type Person struct {
        XMLName   xml.Name `xml:"person"`
        Id        int      `xml:"id,attr"`
        FirstName string   `xml:"name>first"`
        LastName  string   `xml:"name>last"`
        Age       int      `xml:"age"`
        Height    float32  `xml:"height,omitempty"`
        Married   bool
        Address
        Comment string `xml:",comment"`
}

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

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

        os.Stdout.Write(output)
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

import (
        "encoding/json"
        "fmt"
)

func main() {
        //json encode
        j1 := make(map[string]interface{})
        j1["name"] = "脚本之家"
        j1["url"] = "http://www.jb51.net/"
        js1, err := json.Marshal(j1)
        if err != nil {
                panic(err)
        }
        fmt.Println(string(js1))
        //json decode
        j2 := make(map[string]interface{})
        err = json.Unmarshal(js1, &j2)
        if err != nil {
                panic(err)
        }
        fmt.Printf("%#v\n", j2)
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-27 22:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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