四月二十八号日报

今日学习内容

Go语言函数

1.1介绍:Go里面有三种类型的函数:

  • 普通的带有名字的函数
  • 匿名函数或者lambda函数
  • 方法

函数可以将其他函数调用作为它的参数,只要这个被调用函数的返回值个数、返回值类型和返回值的顺序与调用函数所需求的实参是一致的。在Go语言中不支持函数的重载(原因是函数重载需要进行多余的类型匹配影响性能)

1.2函数参数与返回值:相比于C/C++、Java等多返回值是Go的一大特性

1.2.1按值传递与按引用传递:Go 默认使用按值传递来传递参数,也就是传递参数的副本。如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加&符号,比如 &variable)传递给函数,这就是按引用传递,比如 Function(&arg1),此时传递给函数的是一个指针。

1.2.2命名返回值:如果命名了返回值参数,一个没有参数的return语句,会将当前的值作为返回值返回。

package main
import "fmt"
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

func main() {
    fmt.Println(split(17))
}

尽量使用命名返回值:会使代码更清晰、更简短,同时更加容易读懂。

1.2.3空白符_用来匹配一些不需要的值,然后丢弃掉

package main

import (
    "fmt"
)

func main() {
    var i1 int
    var f1 float32
    i1, _, f1 = ThreeValues()
    fmt.Printf("The int: %d, the float: %f \n", i1, f1)
}

func ThreeValues() (int, int, float32) {
    return 5, 6, 7.5
}

1.3传递变长参数:如果函数的最后一个参数是采用 ...type 的形式,那么这个函数就可以处理一个变长的参数,这个长度可以为 0,这样的函数称为变参函数。

package main

import "fmt"

func main() {
    x := min(1, 3, 2, 0)
    fmt.Printf("The minimum is: %d\n", x)
    arr := []int{7, 9, 3, 5, 1}
    x = min(arr...)
    fmt.Printf("The minimum in the array arr is: %d", x)
}

func min(a ...int) int {
    if len(a) == 0 {
        return 0
    }
    min := a[0]
    for _, v := range a {
        if v < min {
            min = v
        }
    }
    return min
}

1.4defer和追踪:关键字 defer 允许我们推迟到函数返回之前一刻才执行某个语句或函数关键字 defer的用法类似于面向对象编程语言 Java 和 C# 的 finally 语句块,它一般用于释放某些已分配的资源。

package main

import "fmt"

func main() {
    function1()
}
func function1() {
    fmt.Printf("In function1 at the top\n")
    function2()
    fmt.Printf("In function1 at the bottom!\n")
}

func function2() {
    fmt.Printf("function2: Deferred until the end of the calling function!\n")
}

1.5递归函数:当一个函数在其函数体内调用自身,则称之为递归。

package main
import "fmt"

func main() {
    fmt.Print(pr(5))
}

func pr(n int) int {
    if n == 1 {
        return 1
    } else {
        return n * pr(n-1)
    }
}

1.6将函数作为参数:函数可以作为其它函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调。

package main

import "fmt"

func main() {
    callback(1, Add)
}

func Add(a, b int) {
    fmt.Printf("The sum of %d and %d is: %d\n", a, b, a+b)
}

func callback(y int, f func(int, int)) {
    f(y, 2)
}

1.7闭包:当我们不希望给函数起名字的时候,可以使用匿名函数,这样的一个函数不能够独立存在但可以被赋值于某个变量,即保存函数的地址到变量中然后通过变量名对函数进行调用。

package main

import "fmt"

func main() {
    func() {
        fmt.Print("hello world")
    }()
}

1.8应用闭包:将函数作为返回值:下面两个函数均是返回一个闭包,然后调用她

package main

import "fmt"

func main() {
    // make an Add2 function, give it a name p2, and call it:
    p2 := Add2()
    fmt.Printf("Call Add2 for 3 gives: %v\n", p2(3))
    // make a special Adder function, a gets value 3:
    TwoAdder := Adder(2)
    fmt.Printf("The result is: %v\n", TwoAdder(3))
}

func Add2() func(b int) int {
    return func(b int) int {
        return b + 2
    }
}

func Adder(a int) func(b int) int {
    return func(b int) int {
        return a + b
    }
}

Linux文件与目录管理

2.1headtail命令:这是对数据做一个简单的提取功能,就是取出前面与取出后面文字的功能

  • head [-n number] 文件-n后面接数字代表几行的意思

2.2od命令:我们可以用od这个命令来读取非纯文本文件内容

  • od [-t TYPE] 文件

2.3touch命令:修改文件时间或创建新文件

? linux下有许多时间参数,主要是三个:

  • mtime文件数据内容更改时间
  • ctime文件状态更改时间,比如权限属性等
  • atime文件内容被取用时的时间,比如使用cat命令时

所以touch主要用来新建一个空的文件和将文件日期修订为目前日期(mtime,atime)

2.4文件的默认权限与隐藏权限

2.4.1文件默认权限:umask:目前用户在建立文件或目录时候的默认权限值

  • 新建文件时的权限:rw-r--r--
  • 新建目录时的权限:rwxr-xr-x

如果需要更改默认权限值则用命令umask+三个数字(root的umask默认是022)

2.4.2文件隐藏属性chattr,lsattr(显示文件隐藏属性)

  • chattr [+-=][ASacdistu]文件目录或名称 (其中有几个重要的参数讲解,如下)
  • +:增加某一个特殊的参数,其它原本存在的参数不懂
  • -:删除某一个特殊的参数,其它原本存在的参数不懂
  • =:仅有后面接的参数
  • a:当设置a后,这个文件只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性
  • i:让一个文件不能被删除,改名,设置连接也无法写入或添加数据,只有root能设置此属性

原文地址:https://www.cnblogs.com/swtczb/p/11632632.html

时间: 2024-11-03 16:14:39

四月二十八号日报的相关文章

四月二十五号日报

今日学习内容 Go语言的控制结构 1.1if-else结构:关键字if和else之后左大括号{必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行.这两条规则都是被编译器强制规定的. if condition { //代码 } else if condition{ //代码 }else{ //代码 } if可以包含一个初始化语句(比如给一个变量赋值)这种写法具有固定的格式(在初始化语句后必须加上分号),但要注意的是,使用简短

四月十八号日报

今日学习内容 1:Go 程序的基本结构和要素 1.1包的概念.导入与可见性 包是结构化代码的一种方式:每个程序都由包(通常简称为 pkg)的概念组成,可以使用自身的包或者从其它包中导入内容,每个Go文件都属于且仅属于一个包,每个Go应用程序都包含一个名为main的包,一个Go程序是通过import关键字将一组包链接在一起.有如下方式 import "fmt" import "os" 也可以这样 import "fmt";import "

四月二十四号日报

今日学习内容 PostgreSQL的高级特性 1.1视图:我们可以在该查询上创建一个视图,这会给该查询一个名字,我们可以像使用一个普通表一样来使用它.如下 create view myview as select city,temp_lo,temo_hi,date,location from weather,cities where city=name select *from myview; 1.2外键:简而言之就是起约束作用,①插入非空值时,如果主键中没有这个值,则不能插入②更新时,不能改变

四月二十九号日报

今日学习内容 Go语言的数组与切片 1声明和初始化:数组是具有相同 唯一类型 的一组已编号且长度固定的数据项序列 Go 语言中的数组是一种 值类型,所以可以通过 new() 来创建: var arr1 = new([5]int),这种方式和 var arr2 [5]int 的区别是arr1 的类型是 *[5]int,而 arr2的类型是 [5]int. package main import "fmt" func f(a [3]int) { a[1] = 2 fmt.Println(a

四月二十三号日报

今日学习内容 Go语言的字符类型,字符串,strings和strconv包,指针 1.1字符类型:严格来说,这并不是 Go 语言的一个类型,字符只是整数的特殊用例.byte类型是unit8的别名. var ch byte = 65或 var ch byte ='\x41' \x总是紧跟着长度为2或者16的二进制数,还有一种写法是\后面紧跟着长度为3的八进制数,Go同样支持Unicode(UTF-8),在书写 Unicode 字符时,需要在 16 进制数之前加上前缀 \u 或者 \U.因为 Uni

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安装scrapy模块以及依赖模块 安装以下模块 1.lxml-3.8.0.tar.gz (XML处理库) 2.Twisted-17.5.0.tar.bz2 (用Python编写的异步网络框架) 3.Scrapy-1.4.0.tar.gz

Powershell管理系列(二十六)PowerShell操作之批量导出&导入邮箱

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750 项目中有时候做跨林邮箱迁移的时候,条件不成熟,比如安全考虑或者其他考虑,不能做双林信任,这样就提出了一个问题,历史邮件需要使用的话怎么办,一个简单高效的解决办法就是从源森林批量导出邮件为.pst文件,在批量导入到目的域森林,具体操作如下: 1.赋予管理账号邮件导入导出权限,命令如下: cls whoami New-Manageme

二十岁出头,你一无所有,但你却拥有一切,因为你还有牛逼的梦想。 可那又怎样,只有行动,才能解除你所有的不安

我从来没有看到过一句话,如此让我共鸣.二十岁出头,你一无所有,但你却拥有一切,因为你还有牛逼的梦想. 可那又怎样,只有行动,才能解除你所有的不安 (一)嘴上说说的人生 那年我在离家的时候一个劲地往自己的硬盘里塞<灌篮高手>,我妈一副嗤之以鼻的表情 看着我,似乎是在说:"这么大的人了居然还这么喜欢看动漫." 我不知道怎么回应她,只好耸耸肩,因为我实在无法对我亲爱的娘亲说明这部动漫对我的 意义. 你知道,有些歌有些东西就是有那种力量.哪怕它在你的手机里藏了好几年,哪怕它早就 过

从零开始学android&lt;android事件的处理方式.二十四.&gt;

在android中一共有 多种事件,每种事件都有自己相对应的处理机制 如以下几种 1 单击事件 View.OnClickListener public abstract void onClick (View v) 单击组件时触发 2 单击事件 View.OnLongClickListener public abstract boolean onLongClick (View v) 长按组件时触发 3 键盘事件 View.OnKeyListener public abstract boolean