当前位置: 首页 > news >正文

【Go 快速入门】基础语法 | 流程控制 | 字符串

文章目录

    • 基础语法
      • 变量
      • 常量
      • 运算符
      • 指针
        • new 和 make 区别
      • 字符串
        • byte 和 rune 类型
      • 流程控制
        • for 循环
        • If else 分支
        • switch 分支

基础语法

项目代码地址:02-basicgrammar

  • 基本类型值

Go 最基础的数据类型,比如整型、浮点型、布尔型。

  • 复合类型值

由基本类型组成的复杂数据类型,比如数组、切片、结构体、函数、map、通道、接口、字符串。

  • 指针类型值

指针类型的变量与指针类型值绑定,它内部存储的是另外一个内存单元的地址。


简单示例:

// 值
func function01() {fmt.Println(123_456)       // 123456fmt.Println("go" + "lang") // golangfmt.Println("1 + 1 = ", 1+1)     // 1 + 1 =  2fmt.Println("3 / 2 = ", 3/2)     // 3 / 2 =  1fmt.Println("7.0 / 3 = ", 7.0/3) // 7.0 / 3 =  2.3333333333333335fmt.Println(true && false) // falsefmt.Println(true || false) // truefmt.Println(!true)         // false
}

Go 中的值类型和引用类型:

  • 值类型:int系列、float系列、bool、string、数组、结构体
  • 引用类型:指针、slice切片、管道channel、接口interface、map、函数

值类型:变量直接存储值,内存通常在栈中分配
引用类型:变量存储的是一个地址,地址空间存储真正的值,内存通常在堆中分配

在Go语言中,所有东西都是以值的形式存在的,只有值传递没有引用传递。

  • 传值:你是你,我是我
  • 传指针:你是你,我是我,但我们共同指向他
  • 传“引用”:你是你,我是我,但我们有一部分共同指向他
// 指针类型
func function02() {a := 1ptr := func(b *int) {fmt.Println(&b, b) // 0xc000088028 0xc00000a0c8*b = 2fmt.Println(*b) // 2}fmt.Println(&a) // 0xc00000a0c8ptr(&a)fmt.Println(a) // 2
}// 引用类型
func function03() {s := []int{1, 2}ref := func(a []int) {fmt.Printf("%p\n", &a) // 0xc000008060a[1] = 0fmt.Println(a) // [1 0]}fmt.Printf("%p\n", &s) // 0xc000008048ref(s)fmt.Println(s) // [1 0]
}

不难看出,上述在传递参数过程中都是进行值传递的。尽管切片是引用类型,但传递时仍然会拷贝新的变量,只不过新变量的底层结构有对另一个基础类型的指向。

Go 的引用类型不同于 C++ 的引用,引用并不是同一个地址,不过底层指针是同一个指向。

对比 C++ 的引用:引用传递地址不变,a,b变量共享同一地址

#include<iostream> 
using namespace std;struct Node {int a, b, c;
};void func(Node &a) {cout << &a << endl; // 0x7ffc43a4a21c
}int main() {Node b = {1, 2, 3};func(b);cout << &b << endl; // 0x7ffc43a4a21creturn 0;
}

额外补充,切片容易踩的坑:

切片在运行时由三个字段构成,值拷贝创建副本也就是对 Data、Len、Cap字段进行拷贝,而 Data 指针指向与原slice 同一地址。

type SliceHeader struct {Data uintptr  // 指向底层数组的指针Len  int      // 切片长度Cap  int      // 切片容量
}

所以在副本中修改元素时,原 slice 的元素也会被修改。但是修改的是副本的 Len、Cap 时,原 slice 保持不变。如果副本由于扩容导致 Data 地址重新分配,那么之后副本的操作完全无法影响到原 slice。

// 传"引用"
func function04() {a := make([]int, 1, 2) // 指定len(a)=1,cap(a)=2a[0] = 1fmt.Println(len(a), cap(a), a) // 1 2 [1]ref := func(b []int) {b[0] = 4fmt.Println(len(b), cap(b), b, len(a), cap(a), a) // 1 2 [4] 1 2 [4]b = append(b, 2)fmt.Println(len(b), cap(b), b, len(a), cap(a), a) // 2 2 [4 2] 1 2 [4]b[0] = 0fmt.Println(len(b), cap(b), b, len(a), cap(a), a) // 2 2 [0 2] 1 2 [0]b = append(b, 3)fmt.Println(len(b), cap(b), b, len(a), cap(a), a) // 3 4 [0 2 3] 1 2 [0]b[0] = 1fmt.Println(len(b), cap(b), b, len(a), cap(a), a) // 3 4 [1 2 3] 1 2 [0]}ref(a)
}

上面的例子阐明了两点:

  • “引用” 是我们共同一部分指向它:b 添加元素后,len 变为 2,而原 a 的 len 还是 1,所以切片的第一个元素是被共同指向的
  • 扩容后“引用”的元素地址改变:b 扩容后,cap 变为 4,Data 地址改变,再修改第一个元素时,不再能影响原 a 的元素

如果上述不能理解,可以先放着,等下章学习了切片等类型后,再来回顾。


变量

常用两种声明变量格式:

  • var 用来声明变量,标准声明格式:var 变量名 变量类型

  • := 短变量只能用于声明局部变量,不能用于全局变量声明,即在函数或方法内部使用。

变量只声明未初始化,则为默认值。

// 变量
func function05() {var a int64          // 声明未初始化,默认 int64(0)var b string = "ABC" // 标准声明并初始化var c = 1            // 自动类型推导var d, e = 2, "3"    // 一次初始化多个变量// 批量声明var (f float64 = 3.1g bool    = false)h := .1 // 简短变量声明fmt.Println(a, b, c, d, e, f, g, h) // 0 ABC 1 2 3 3.1 false 0.1
}

常量

var 换为 const 即可定义常量

// 常量
func function06() {const pi = 3.1415// 同时声明多个常量,某个常量省略值,则和上一个相同const (e = 2.7182a // 2.7182b // 2.7182c = 3d // 3)// iota 预声明标识符,表示连续的无类型整数常量,初始值 0const (level1 = iota + 1 // 1level2            // 2level3            // 3_                 // 跳过某些值level5            // 5n      = 1000     // 在 iota 声明中插队level6 = iota     // 6, 需要再使用 iota)// 多个 iota 定义在一行,iota 值逐行增加const (A, B = iota + 1, iota + 2 // 1 2C, D                      // 2 3E, F                      // 3 4)// 用来定义数量级const (_  = iotaKB = 1 << (10 * iota) // 1 << (10 * 1)MB = 1 << (10 * iota) // 1 << (10 * 2)GM = 1 << (10 * iota) // 1 << (10 * 3)TB = 1 << (10 * iota) // 1 << (10 * 4))
}

运算符

需要注意的是

  • ++(自增)--(自减) 在 Go 中是单独的语句,并不属于运算符
  • &^ 按位清除;z := x &^ y,y 中位 1,z 位 0,y 中位 0,z 位为 x 位
// 运算符
func function10() {var a inta++fmt.Println(a) // 1// b := a--  错误!i++、i--只能单独使用// ++a       错误!没有 ++i、--i 操作x := 11y := (1 << 0) | (1 << 3) // 保证 z 中的第 0 位和第 3 位为 0z := x &^ yfmt.Printf("x = %b\n", x)fmt.Println("\t&^")fmt.Printf("y = %b\n", y)fmt.Println("————————")fmt.Printf("z = %04b\n", z)/*x = 1011&^y = 1001————————z = 0010*/
}

指针

指针用法和其他语言类似,而且 Go 中使用了垃圾回收机制,不需要手动释放内存。

// 指针
func function15() {str := "123"var strPtr *string = &strfmt.Println(str, *strPtr)          // 123 123fmt.Println(&str, strPtr, &strPtr) // 0xc000026070 0xc000026070 0xc000088020
}
new 和 make 区别

Go 语言中 newmake 是内建的两个函数,主要用来分配内存。

  • new:用于类型的内存分配,返回值是一个指向新分配类型零值的指针

  • make:只用于 slice、map、channel 初始化,返回这三个引用类型本身

// new、make
func function16() {a := new(bool)fmt.Printf("%T %t %v\n", a, *a, a) // *bool false 0xc000192068b := make([]int, 1, 2)fmt.Printf("%T %v %p %p %p\n", b, b, b, &b, &b[0]) // []int [0] 0xc0001920b0 0xc000190030 0xc0001920b0
}

这里重点关注 make 后返回的切片引用类型本身 b,可见 b 和 &b[0] 的地址是一样的,都是指向底层数组的指针。而 &b 则是表示当前这个切片结构体的地址。


字符串

在运行时字符串类型表示如下:

type StringHeader struct {Data uintptr // 指向底层字节数组指针Len  int // 字节数组长度
}

Go 在编程语言层面对值做了限制,常量值是不可变的,字符串类型值是不可变的,其他则为可变值。

Go 中只允许用双引号和反引号定义字符串,使用单引号定义字符类型。字符串是一个只读的 byte 类型切片,组成每个字符串的元素叫字符,字符变量默认 rune 型。

// 字符串
func function07() {s1 := "123"s2 := "字符串"s3 := `第一行
第二行
第三行
`// s1[0] = '4' 						   // 不能修改s1 += "456"                            // 123456fmt.Println(len(s1), len(s2), len(s3)) // 3 9 30
}
byte 和 rune 类型

Go 语言字符有两种类型,byte 代表 ASCII 码的一个字符,rune 代表一个 UTF-8 字符。

  • byte 型,本质上是 uint8
  • rune 型,本质上是 int32

特殊的 rune 类型表示 Unicode 编码的整数,能让基于 Unicode 的文本处理更方便,比如处理中文或其他复合字符。

  1. 内建函数 len() 函数用来获取字符串的 ASCII 字符个数或字节长度。Go 语言的字符串都以 UTF-8 格式保存,每个中文占用 3 个字节

  2. unicode/utf8 包提供的 utf8.RuneCountInString() 函数用来统计 Unicode 字符数量

  3. unsafe 包提供的 unsafe.Sizeof 返回数据类型的大小

  4. for 循环遍历,对应 ASCII 码;for range 遍历,对应 Unicode 码

// byte、rune
func function08() {var a = 'a'var b byte = 'b'fmt.Println(unsafe.Sizeof(a), unsafe.Sizeof(b)) // 4 1s1 := "Golang语言"fmt.Println(len(s1), utf8.RuneCountInString(s1)) // 12 8for i := 0; i < len(s1); i++ {fmt.Printf("%c", s1[i])} // Golang语è¨fmt.Println()for _, s := range s1 {fmt.Printf("%c", s)} // Golang语言
}

读者可能会疑惑,之前代码中 s1 += "456" 这不是修改了字符串本身了吗?

func function09() {// 仅声明字符串var str stringvar stringHeader = (*reflect.StringHeader)(unsafe.Pointer(&str))fmt.Printf("%p %p %d\n", &str, unsafe.Pointer(stringHeader.Data), stringHeader.Len)// 字符串赋值str = "快速入门"fmt.Printf("%p %p %d\n", &str, unsafe.Pointer(stringHeader.Data), stringHeader.Len)// 字符串拼接str += "GO语言"fmt.Printf("%p %p %d\n", &str, unsafe.Pointer(stringHeader.Data), stringHeader.Len)// 字符串转 byte 切片var bytes = []byte(str)fmt.Printf("%p %p %d\n", bytes, unsafe.Pointer(stringHeader.Data), stringHeader.Len)bytes[3] = 1fmt.Println(str)// 0拷贝 byte 切片转换var bytes1 = *(*[]byte)(unsafe.Pointer(&str))fmt.Printf("%p %p %d\n", bytes1, unsafe.Pointer(stringHeader.Data), stringHeader.Len)bytes1[3] = 1fmt.Println(str)
}

0xc000026070 0x0 0
0xc000026070 0x541808 12
0xc000026070 0xc000012108 20
0xc000012120 0xc000012108 20
快速入门GO语言
0xc000012108 0xc000012108 20
快��入门GO语言

unsafe.Pointer 类似于 C 语言中的 void * 指针,能接收任意类型的指针变量转为通用型指针,再可强转为其他指针类型。

分析上述代码:字符串在赋值和拼接后,实际变量的地址没发生变化,但是 stringHeader 的 Data 字节数组改变了地址,证明字符串本身不可被修改,变的是内部的字节数组。上述进行了强转 byte 字节数组,会实际拷贝一份 string 内部的字节数组,要想实现 0 拷贝,则可通过 unsafe.Pointer 转换。


流程控制

for 循环

基本格式:

for 初始语句; 条件表达式; 结束语句 {循环体
}

for - range 循环:

  • 数组、切片、字符串返回索引和值
  • map返回键和值
  • 通道(channel)只返回通道内的值

基本格式:

for k, v := range x {
}

常见的循环写法:

// for
func function11() {i := 1for i < 2 {fmt.Println(i)i++} // 1for j := 8; j < 9; j++ {fmt.Println(j)} // 8for {fmt.Println("loop")break} // loopfor n := 1; n <= 3; n++ {if n%2 == 0 {continue}fmt.Println(n)} // 1 3var num int
flag:num++for num <= 3 {fmt.Println(num)goto flag} // 1 2 3s := []int{11, 12}for k, v := range s {fmt.Println(k, v)} // 0 11; 1 12
}
If else 分支
// if-else
func function12() {score := 70if score < 60 {fmt.Println("不及格")} else if score >= 60 && score <= 80 {fmt.Println("良好")} else {fmt.Println("优秀")} // 良好if err := 1; err != 0 {fmt.Println("没有出错")} // 没有出错
}
switch 分支

switch 不同于 C 语言,break 不写会跳出 case,并且一个分支可以有多个值:

// switch case
func function13() {switch suf := ".a"; suf {case ".html":fmt.Println("页面")case ".doc", ".txt":fmt.Println("文档")case ".js":fmt.Println("脚本文件")default:fmt.Println("其它后缀")} // 其它后缀
}

为了兼容 C 语言的 case 设计,fallthrough 语法可以执行满足条件的 case 的下一个case:

// fallthrough
func function14() {var suf = ".doc"switch suf {case ".html":fmt.Println("页面")case ".doc":fmt.Println("文档")fallthroughcase ".js":fmt.Println("脚本文件")default:fmt.Println("其它后缀")} // 文档 脚本文件
}

相关文章:

【Go 快速入门】基础语法 | 流程控制 | 字符串

文章目录 基础语法值变量常量运算符指针new 和 make 区别 字符串byte 和 rune 类型 流程控制for 循环If else 分支switch 分支 基础语法 项目代码地址&#xff1a;02-basicgrammar 值 基本类型值 Go 最基础的数据类型&#xff0c;比如整型、浮点型、布尔型。 复合类型值 …...

腾讯云轻量应用Ubuntu服务器如何一键部署幻兽帕鲁Palworld私服?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…...

Redis的SDS你了解吗?

初识SDS&#xff1a; Redis的String和其他很多编程语言中的语义相似&#xff0c;它能够表达3种值的类型&#xff1a; 1.字符串 2.整数 3.浮点数 三种类型根据具体场景由Redis完成相互之间的自动转换&#xff0c;并且根据需要选取底层的承载方式&#xff0c;Redis内部&#x…...

C#中常见的软件设计模式及应用场景

文章目录 前言1、单例模式 (Singleton)1.1 详细说明1.2 应用场景示例 2、工厂模式 (Factory Method)2.1 详细说明2.2 应用场景示例 3、观察者模式 (Observer)3.1 详细说明3.2 应用场景示例 4、策略模式 (Strategy)4.1 详细说明4.2 应用场景示例 5、适配器模式 (Adapter)5.1 详细…...

字符串相关函数和文件操作

文章目录 1. C/C 字符串概述1.1 字符串常量1.2 字符数组 2. 字符串函数2.1 拷贝赋值功能相关函数&#xff08;覆盖&#xff09;2.1.1 strcpy2.1.2 strncpy2.1.3 memcpy2.1.4 memmove2.1.5 memset2.1.6 注意小点2.1.7 【函数区别】 2.2 追加功能相关函数2.2.1 strcat2.2.2 strnc…...

【c++学习】数据结构中的栈

c栈 栈代码用线性表实现栈用链表实现栈 栈 栈&#xff1a;先进后出 只对栈顶元素进行操作&#xff0c;包括新元素入栈、栈顶元素出栈和查看栈顶元素&#xff08;只支持对栈顶的增、删、查&#xff09;。 代码 下述代码实现了栈及其接口 包括对栈顶的增、删、查以及查看栈的大…...

新建react项目,react-router-dom配置路由,引入antd

提示&#xff1a;reactrouter6.4版本&#xff0c;与reactrouter5.0的版本用法有区别&#xff0c;互不兼容需注意 文章目录 前言一、创建项目二、新建文件并引入react-router-dom、antd三、配置路由跳转四、效果五、遇到的问题六、参考文档总结 前言 需求&#xff1a;新建react项…...

Transformer and Pretrain Language Models3-6

Pretrain Language Models预训练语言模型 content&#xff1a; language modeling&#xff08;语言模型知识&#xff09; pre-trained langue models(PLMs&#xff09;&#xff08;预训练的模型整体的一个分类&#xff09; fine-tuning approaches GPT and BERT&#xff08;…...

Linux系统中编写bash脚本进行mysql的数据同步

一、为何要用脚本做数据同步 &#xff08;一&#xff09;、问题 我们的视频监控平台云服务器&#xff0c;需要向上级的服务器定期同步一些数据表的数据&#xff0c;前期做了个程序&#xff0c;可以实现同步。但是&#xff0c;现在数据库的结构改了&#xff0c;结果又需要该程序…...

光耦驱动继电器电路图大全

光耦驱动继电器电路图&#xff08;一&#xff09; 注&#xff1a; 1U1-1脚可接12V&#xff0c;也可接5V&#xff0c;1U1导通&#xff0c;1Q1导通&#xff0c;1Q1-30V&#xff0c;线圈两端电压为11.7V. 1U1-1脚不接或接地&#xff0c;1U1不通&#xff0c;1Q1截止&#xff0c;1…...

【AI量化分析】小明在量化中使用交叉验证原理深度分析解读

进行交叉验证好处 提高模型的泛化能力&#xff1a;通过将数据集分成多个部分并使用其中的一部分数据进行模型训练&#xff0c;然后使用另一部分数据对模型进行测试&#xff0c;可以确保模型在未见过的数据上表现良好。这样可以降低模型过拟合或欠拟合的风险&#xff0c;提高模…...

2024最新版Visual Studio Code安装使用指南

2024最新版Visual Studio Code安装使用指南 Installation and Usage Guide for the Latest Visual Studio Code in 2024 By JacksonML Visual Studio Code最新版1.85已经于2023年11月由其官网 https://code.visualstudio.com正式发布&#xff0c;这是微软公司2024年发行的的最…...

接口请求重试八种方法

请求三方接口需要加入重试机制 一、循环重试 在请求接口的代码块中加入循环&#xff0c;如果请求失败则继续请求&#xff0c;直到请求成功或达到最大重试次数。 int retryTimes 3; for(int i 0;i < retryTimes;i){try{//请求接口的代码break;}catch(Exception e){//处理…...

【Linux 基础】常用基础指令(上)

文章目录 一、 创建新用户并设置密码二、ls指令ls指令基本概念ls指令的简写操作 三、pwd指令四、cd指令五、touch指令六、rm指令七、mkdir指令八、rmdir 指令 一、 创建新用户并设置密码 ls /home —— 查看存在多少用户 whoami —— 查看当前用户名 adduser 用户名 —— 创建新…...

【RT-DETR有效改进】EfficientFormerV2移动设备优化的视觉网络(附对比试验效果图)

前言 大家好&#xff0c;我是Snu77&#xff0c;这里是RT-DETR有效涨点专栏。 本专栏的内容为根据ultralytics版本的RT-DETR进行改进&#xff0c;内容持续更新&#xff0c;每周更新文章数量3-10篇。 专栏以ResNet18、ResNet50为基础修改版本&#xff0c;同时修改内容也支持Re…...

《动手学深度学习(PyTorch版)》笔记4.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…...

Linux/Academy

Enumeration nmap 首先扫描目标端口对外开放情况 nmap -p- 10.10.10.215 -T4 发现对外开放了22,80,33060三个端口&#xff0c;端口详细信息如下 结果显示80端口运行着http&#xff0c;且给出了域名academy.htb&#xff0c;现将ip与域名写到/et/hosts中&#xff0c;然后从ht…...

windows .vscode的json文件配置 CMake 构建项目 调试窗口中文设置等

一、CMake 和 mingw64的安装和环境配置 二、tasks.json和launch.json文件配置 tasks.json {"version": "2.0.0","options": {"cwd": "${workspaceFolder}/build"},"tasks": [{"type": "shell&q…...

uniapp canvas做的刮刮乐解决蒙层能自定义图片

最近给湖南中烟做元春活动&#xff0c;一个月要开发4个小活动&#xff0c;这个是其中一个难度一般&#xff0c;最难的是一个类似鲤鱼跃龙门的小游戏&#xff0c;哎&#xff0c;真实为难我这个“拍黄片”的。下面是主要代码。 <canvas :style"{width:widthpx,height:hei…...

利用SPI,结合数据库连接池durid进行数据服务架构灵活设计

接着上一篇文章业务开始围绕原始凭证展开,而展开的基础无疑是围绕着科目展开的。首先我们业务层面以财政部的小企业会计准则的一级科目引入软件中。下面我们来考虑如何将科目切入软件更加灵活,方便业务扩展、维护与升级。 SPI是首先想到的数据服务方式 为什么会想到它呢?首…...

自动驾驶的决策层逻辑

作者 / 阿宝 编辑 / 阿宝 出品 / 阿宝1990 自动驾驶意味着决策责任方的转移 我国2020至2025年将会是向高级自动驾驶跨越的关键5年。自动驾驶等级提高意味着对驾驶员参与度的需求降低&#xff0c;以L3级别为界&#xff0c;低级别自动驾驶环境监测主体和决策责任方仍保留于驾驶…...

排序算法——希尔排序算法详解

希尔排序算法详解 一. 引言1. 背景介绍1.1 数据排序的重要性1.2 希尔排序的由来 2. 排序算法的分类2.1 比较排序和非比较排序2.2 希尔排序的类型 二. 希尔排序基本概念1. 希尔排序的定义1.1 缩小增量排序1.2 插入排序的变种 2. 希尔排序的工作原理2.1 分组2.2 插入排序2.3 逐步…...

Docker 容器内运行 mysqldump 命令来导出 MySQL 数据库,自动化备份

备份容器数据库命令&#xff1a; docker exec 容器名称或ID mysqldump -u用户名 -p密码 数据库名称 > 导出文件.sql请替换以下占位符&#xff1a; 容器名称或ID&#xff1a;您的 MySQL 容器的名称或ID。用户名&#xff1a;您的 MySQL 用户名。密码&#xff1a;您的 MySQL …...

【Java万花筒】数字信号魔法:Java库的魅力解析

从傅立叶到矩阵&#xff1a;数字信号Java库全景剖析 前言 随着数字信号处理在科学、工程和数据分析领域的广泛应用&#xff0c;开发者对高效、灵活的工具的需求日益增长。本文旨在探讨几个与数字信号处理相关的Java库&#xff0c;通过介绍其特点、用途以及与已有库的关系&…...

面试高频知识点:2线程 2.1 线程池 2.1.2 JDK中常见的线程池实现有哪些?

1. Executors类 Executors类是线程池的工厂类&#xff0c;提供了一些静态方法用于创建不同类型的线程池。然而&#xff0c;它的使用并不推荐在生产环境中&#xff0c;因为它存在一些缺点&#xff0c;比如默认使用无界的任务队列&#xff0c;可能导致内存溢出。 2. ThreadPool…...

Azure Private endpoint DNS 记录是如何解析的

Private endpoint 从本质上来说是Azure 服务在Azure 虚拟网络中安插的一张带私有地址的网卡。 举例来说如果Storage account在没有绑定private endpoint之前&#xff0c;查询Storage account的DNS记录会是如下情况&#xff1a; Seq Name …...

windows 安装sql server 华为云文档

先安装net3.5,剩下安装sqlserver步骤看下面文档 安装SQL Server_弹性云服务器 ECS_最佳实践_搭建Microsoft SharePoint Server 2016_华为云 (huaweicloud.com)...

相同主题文章竟同时发表在同一个2区期刊 | 孟德尔随机化周报(1.10-1.16)

欢迎报名2024年郑老师团队课程课程&#xff01; 郑老师科研统计培训&#xff0c;包括临床数据、公共数据分析课程&#xff0c;欢迎报名 孟德尔随机化,Mendilian Randomization&#xff0c;简写为MR&#xff0c;是一种在流行病学领域应用广泛的一种实验设计方法&#xff0c;利用…...

网络安全的使命:守护数字世界的稳定和信任

在数字化时代&#xff0c;网络安全的角色不仅仅是技术系统的守护者&#xff0c;更是数字社会的信任保卫者。网络安全的使命是保护、维护和巩固数字世界的稳定性、可靠性以及人们对互联网的信任。本文将深入探讨网络安全是如何履行这一使命的。 第一部分&#xff1a;信息资产的…...

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的&#xff0c;minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的&#xff0c;操作命令也是一样的&#xff0c;有需要我…...

wordpress不能文件名访问/西安刚刚宣布

多线程&#xff08;16&#xff09; pthread_once1. pthread_once定义2. 接口参数3. 代码例子1. pthread_once定义 在多线程环境中&#xff0c;有些事仅需要执行一次。 使用&#xff08;某个时间在整个程序中仅执行一次&#xff0c;不确定是那个线程&#xff09; 2. 接口参数 …...

中国建设银行网站下载/对网站外部的搜索引擎优化

前言 转载自&#xff1a;https://blog.csdn.net/wangzibai/article/details/115283755 场景 在学习谷粒商城的过程中&#xff0c;我这边使用的springboot 版本和spring cloud版本比较高&#xff0c;所以一些配置不一样。 我这边springboot版本是2.5.0&#xff0c;spring cloud版…...

吉安网站建设/高端快速建站

题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的。工兵连受命来到阵地要进行两期施工。 第一期的任务是挖掘暗道让所有地堡互联互通。现已勘测设计了m条互不相交的暗道挖掘方案&#xff0c;如果这m条暗道都实施挖掘&#xff0c;肯定能达到互联互通的目的。…...

网站被主流搜索引擎收录的网页数量是多少/磁力宅

一日从朋友处得到一网站权限&#xff0c;让我帮忙提权。拿到后看了看&#xff0c;C、D盘有只读权限&#xff0c;C:\Documents and Settings\All Users\Documents 可写。 没有装FTP软件和数据库。wscript.shell没有被禁用&#xff0c; 终端端口被改成45678 。试了试从外网连不上…...

销售网站怎么做的/优化系统软件

select *from emp where months_between(sysdate,hhiredate与当前时间差距超过25年&#xff0c;月份/12表示一年 sysdate为当前日期 months_between(sysdate,hiredate)计算当前日期 - hiredate 的月份 months_between(sysdate,hiredate)/12计算当前日期 - hiredate 的年数 mont…...

政府网站建设及其对策参考文献/百度平台商家

sar工具使用详细介绍 一&#xff1a;命令介绍&#xff1a;参考资料&#xff1a;http://linux.die.net/man/1/sar sar&#xff08;System ActivityReporter系统活动情况报告&#xff09;是目前Linux上最为全面的系统性能分析工具之一&#xff0c;可以从多方面对系统的活动进行报…...