你可能不知道的一些Go Packages知识

woahjknes · · 1036 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

关于Go Package关于Go Package

Go Packages 主要用来把相关的functions, variables, 和constants 组织到一起,这样你就可以很方便的迁移Packages和把它们用到自己的程序中。

注意除了main package, Go packages 不是自治程序,不能被编译成可执行文件。它们必须直接或者间接的被main package调用才能使用。
如果你直接执行一个没个package:

$ go run aPackage.go
go run: cannot run non-main package

关于Go function关于Go function

匿名函数(anonymous functions)
匿名函数可以在内部定义,而不需要使用函数名,匿名函数通常被用来实现一些不需要太多代码的功能。在Go中 一个函数可以返回一个匿名函数,或者使用匿名函数作为它的其中一个参数。另外,匿名函数可以通过一Go 变量来访问。注意,匿名函数也称为闭包,特别是在函数式编程术语中。
匿名函数具有较小的实现和本地焦点,这被认为是一种很好的做法。 如果匿名函数没有本地焦点,那么你可能需要考虑使其成为常规函数。
注意不要在没有特殊需求的时候在你程序中使用使用大量的匿名函数。

Go 函数可以返回多个值

func aFunction() (int, int, float64, float64) {
}

下面会有一个用一个functions.go来展示Go的匿名函数

package main

import (

    "fmt"
    "os"
    "strconv"
)

func doubleSquare(x int) (int, int) {
    return x * x, x * x 
}

func main() {
    arguments := os.Args
    if len(arguments) != 2 {
        fmt.Println("The program needs 1 argument!")
        return
    }
    y, err := strconv.Atoi(arguments[1])
    if err != nil {
        fmt.Println(err)
        return
    }
    square := func (s int) int {
        return s * s 
    }
    fmt.Println("The  square of", y, "is", square(y))

    double := func (s int) int {
        return s + s
    }
    fmt.Println("The double of", y, "is", double(y))
    fmt.Println(doubleSquare(y))
    d, s := doubleSquare(y)
    fmt.Println(d, s)
}

上面的square 和 double 都持有一个匿名函数。不好的一点是,在以后的程序中你可以更改square,double或之后其他变量的值为匿名函数的变量,这意味着这些变量的含义可以更改并计算其他内容。

修改值为匿名函数变量的值是不推荐的,因为这可能是导致非常难以排查bug的主要原因。

如上面所示我们可以直接打印doubleSquare()的返回值,也可以给他们分配不同的变量进行打印。

执行functions.go:

$ go run function.go 1 21 
The program needs 1 argument!
rMacBook:code mtsouk
$ go run functions.go 10
The square of 10 is 100
The double of 10 is 20
20 100
20 100

函数的返回值可以被命名函数的返回值可以被命名

下面以returnNames.go为例,我们会把returnNames.go的代码分成3部分来进行讲解
Part 1

package main

import (

    "fmt"
    "os"
    "strconv"
)

func nameMinMax(x, y int) (min, max int) {
    if x > y {
        min = y
        max = x
    } else {
        min = x
        max = y
    }
    return
}

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:woahjknes

查看原文:你可能不知道的一些Go Packages知识

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1036 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传