Chinaunix首页 | 论坛 | 博客
  • 博客访问: 606019
  • 博文数量: 150
  • 博客积分: 1132
  • 博客等级: 少尉
  • 技术积分: 2067
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 16:46
文章分类

全部博文(150)

文章存档

2015年(15)

2014年(75)

2013年(4)

2012年(56)

分类: LINUX

2014-06-17 20:37:47

1. 两个不同类型的整型数不能直接比较,但各种类型的整型变量都可以直接与字面常量(literal)进行比较。
2. ^x  取反操作
3. 浮点数比较:
因为浮点数不是一种精确的表达方式,所以像整型那样直接用==来判断两个浮点数是否相等是不可行的,这可能会导致不稳定的结果。
import "math"
//p 为用户自定义的比较精度,比如0.00001
func IsEqual(f1, f2, p float64) bool {
    return math.Fdim(f1, f2) < p
}
4. 关于条件语句:
a. 在 if 之后,条件语句之前,可以添加变量初始化语句,使用;间隔;
b.在有返回值的函数中,不允许将“最终的” return 语句包含在if...else...结构中,否则会编译失败:
function ends without a return statement.
失败的原因在于,Go编译器无法找到终止该函数的 return 语句。
5. 任意类型的不定参数:
如果希望传任意类型,可以指定类型为 interface()。
package main

import "fmt"

func MyPrintf(args ...interface{}) {
    for _, arg := range args {
        switch arg.(type) {
            case int:
                fmt.Println(arg, "is an int value.")
            case string:
                fmt.Println(arg, "is a string value.")
            case int64:
                fmt.Println(arg, "is an int64 value.")
            default:
                fmt.Println(arg, "is an unknow type.")
        }
    }
}

func main() {
    var v1 int = 1
    var v2 int64 = 234
    var v3 string = "hello"
    var v4 float32 = 1.234

    Myprintf(v1, v2, v3, v4)
}
6.  defer 关键字:
func CopyFile(dst, src string) (w int64, err error) {
    srcFile, err := os.Open(src)
    if err != nil {
        return
    }
    defer srcFile.Close()

    dstFile, err := os.Create(dstName)
    if err != nil {
        return
    }
    defer dstFile.Close()

    return io.Copy(dstFile, srcFile)
}
即使其中的 Copy() 函数抛出异常,Go 仍然会保证 dstFile 和 srcFile 会被正常关闭。
(另外,一个函数中可能存在多个 defer 语句。defer 语句的调用是遵照先进后出的原则,即最后一个 defer 语句将最先被执行。)
阅读(1899) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~