四月二十九号日报

Posted swtczb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四月二十九号日报相关的知识,希望对你有一定的参考价值。

今日学习内容

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)

func fp(a *[3]int) 
    a[1] = 2
    fmt.Println(a)


func main() 
    var ar [3]int
    f(ar)
    fp(&ar)

上面函数f并没有修改原数组,想通过传参修改原数组内容,可以通过加操作符&来实现

1.1数组常量:如果数组值已经提前知道了,那么可以通过 数组常量 的方法来初始化数组

package main

import "fmt"

func main() 
    var arrkeyValue = [5]string3: "Chris", 4: "Ron"//只有索引3和4被赋值其他置空
    for i := 0; i < len(arrkeyValue); i++ 
        fmt.Printf("Person at %d is %s\n", i, arrkeyValue[i])
    

1.2多维数组:用法如下

package main

const (
    WIDTH  = 1920
    HEIGHT = 1080
)

type pixel int

var screen [WIDTH][HEIGHT]pixel

func main() 
    for y := 0; y < HEIGHT; y++ 
        for x := 0; x < WIDTH; x++ 
            screen[x][y] = 0
        
    

2切片是对数组一个连续片段的引用,所以切片是一个引用类型,切片也是一个可变长数组。用法如下

声明格式为:var identifuer []tye

初始化格式为:vae slice1 []type = arr1[start:end]

package main

import "fmt"

func main() 
    var arr1 [6]int
    var slice1 []int = arr1[2:5]
    for i := 0; i < len(arr1); i++ 
        arr1[i] = i
    
    for i := 0; i < len(slice1); i++ 
        fmt.Printf("Slice at %d is %d\n", i, slice1[i])
    

2.1用make()创建一个切片:make接受2个参数:元素的类型以及切片的元素个数。基本格式如下

var slice1 []type = make([]type, len)

package main

import "fmt"

func main() 
    var slice1 []int = make([]int, 10)

    fmt.Println("the len is ", len(slice1))
    for i := 0; i < len(slice1); i++ 
        slice1[i] = 5 * i
    
    for i := 0; i < len(slice1); i++ 
        fmt.Printf("Slice at %d is %d\n", i, slice1[i])
    

2.2new()make()的区别:

  • new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为*T的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体);它相当&T`。
  • make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:切片、map 和 channel

3切片重组:slice1 := make([]type, start_length, capacity),其中 start_length 作为切片初始长度而 capacity 作为相关数组的长度。这么做的好处是我们的切片在达到容量上限后可以扩容。改变切片长度的过程称之为切片重组 reslicing,做法如下:slice1 = slice1[0:end],其中 end 是新的末尾索引(即长度)

4切片的复制与追加:如果想增加切片的容量,我们必须创建一个新的更大的切片并把原分片的内容都拷贝过来。

package main

import "fmt"

func main() 
    sl_from := []int1, 2, 3
    sl_to := make([]int, 10)

    n := copy(sl_to, sl_from)
    fmt.Println(sl_to)
    fmt.Printf("Copied %d elements\n", n)

    sl3 := []int1, 2, 3
    sl3 = append(sl3, 4, 5, 6)
    fmt.Println(sl3)

文件与目录的默认权限与隐藏权限

3.1文件特殊权限:SUID,SGID,SBIT

SUID

  • SUID权限仅对二进制程序有效
  • 执行者需要对该程序具有x的访问权限
  • 本权限仅在执行该程序过程中有效

SGID

  • 用户对于此目录具有r与x的权限时,该用户能进入此目录
  • 用户在此目录下的有效群组将会变成该目录的群组

SBIT(只针对当前目录有效)

  • 当前用户对于此目录具有w,x权限,亦具有写入的权限时
  • 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件

3.2查看文件类型:file命令可以来查看文件类型

命令与文件查询

4.1脚本文件名搜寻:通过which命令来查看指令的完整文件名放在哪里

4.2文件名的查找:whereis(查找特定文件),locate,find

SQL语法

5.1词法结构:SQL输入由一个命令序列组成。一个命令由一个记号的序列构成,并由一个分号(“;”)终结。输入流的末端也会标志一个命令的结束。

--下面是一个(语法上)合法的SQL输入:
SELECT * FROM MY_TABLE;
UPDATE MY_TABLE SET A = 5;
INSERT INTO MY_TABLE VALUES (3, 'hi there');

5.2标识符和关键字:SQL标识符和关键词必须以一个字母(a-z,也可以是带变音符的字母和非拉丁字母)或一个下划线(_)开始。后续字符可以是字母、下划线()*、数字(0-9)或美元符号($)。

5.3常量:在PostgreSQL中有三种隐式类型常量:字符串、位串和数字。

5.3.1字符串常量在SQL中,一个字符串常量是一个由单引号(‘)包围的任意字符序列,例如‘This is a string‘

5.3.2位串常量:位串常量看起来像常规字符串常量在开引号之前(中间无空白)加了一个B(大写或小写形式),例如B‘1001‘。位串常量中允许的字符只有0和1。

5.3.3数字常量:整数,小数,指数等

5.4操作符:+ - * / < > = ~ ! @ # % ^ & | ` ?

  • -- 和 /*不能在一个操作符名的任何地方出现,因为它们将被作为一段注释的开始
  • 一个多字符操作符名不能以+或-结尾,除非该名称也至少包含这些字符中的一个:
    ~ ! @ # % ^ & | ` ?

以上是关于四月二十九号日报的主要内容,如果未能解决你的问题,请参考以下文章

四月二十四号日报

四月二十三号日报

四月二十五号日报

四月三十号日报

四月八号日报

四月十六号日报