Yaklang 中的类型和变量

这篇具有很好参考价值的文章主要介绍了Yaklang 中的类型和变量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Yaklang 的类型其实非常简单,我们仅需要记住如下类型即可

  1. string 字符串类型,用以快速构建一个字符串
  2. int 整数类型:在 64 位机中,int 和 int64 是一样的
  3. float 浮点类型,用来定义和表示浮点数
  4. byte 本质上等同于 uint8
  5. undefined / nil 为定义的值,我们可以理解为空值
  6. bool 只有 true 或 false
  7. map,基本等同于 Python 中的 Dict
  8. slice,基本等同于 Python 中的 List
  9. channel,基本等同于 Golang 中的 Channel
  10. var,任意类型,等同于 Golang 中的 interface{}

我们以一个表格快速来对比大家熟悉的语言的类型,以方便大家快速理解

对比类型 Yaklang Python Golang
字符串 string string string
二进制字符串 []byte b-string []byte
整数 int int int8, int16, int32, int64
uint8, uint16, uint32, uint64
int
浮点 float float float32, float64(double)
空值 undefined / nil 不支持 nil
布尔值 bool bool bool
键值组(map / dict) map dict map
数组 / 切片 / 列表 slice list slice / array
结构体 / 类 / 接口 不支持 class struct / interface 体系
数据通道 channel 不支持 channel
任意类型 var object interface{}

变量的声明,定义与使用

在yaklang中定义/声明一个变量十分简单:

var a            // 声明变量a
var b, c         // 声明变量b,c
var d, e = 1, 2  // 声明变量d,e并分别赋值为1,2

同时,我们可以直接对一个变量进行赋值,省略定义/声明的步骤:

a, b = 1, 2 // 此时a=1, b=2

下面是每一种数据类型的示例:

字符串

// 这是yaklang的字符串类型
a:="这是一个字符串";//一个
// 使用dump函数进行输出
dump(a);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

二进制字符串

// 这是yaklang的二进制字符串类型
binaryString := "0b101101";
// 使用dump函数进行输出
dump(binaryString);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

整数

注意yaklang中的整数型和golang是一样的。在Go语言中,int64 是一种数据类型,它是一个64位的有符号整型。这意味着它可以存储的整数值的范围是从 -9223372036854775808 到 9223372036854775807(即从 -2^63 到 2^63 - 1)

// c:=213333333333345465467686908680857435243567821345678345678223456789123456789123456789 超过了最大值范围
/**
在Go语言中,int64 是一种数据类型,它是一个64位的有符号整型。这意味着它可以存储的整数值的范围是从 -9223372036854775808 到 9223372036854775807(即从 -2^63 到 2^63 - 1)
 */
c=9223372036854775805
dump(c);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang
如果超出int64的范围则会报错

d=9223372036854775809;
dump(d);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang
Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

浮点

浮点型即为小数型

d=1.23465;
dump(d);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

空值

什么是空值?字面意思就是没有具体的值。在 Go 语言中,nil 是一个预定义的标识符,用于表示指针、通道、函数、接口、映射或切片类型的零值。nil 并不同于其他语言中的 null 或 None,因为它具体只能用于上述几种类型。基本类型(如 int、float、bool 和 string)以及结构体类型都有自己的零值,例如 0、0.0、false 和 “”,但它们的零值不是 nil。但是Yaklang有一点不太一样,yak不存在“零值”,看下面的代码就知道了
这是golang中的基础数据类型的定义

package main

import "reflect"

func main() {
	var a int
	reflect.ValueOf(a)
}

可以运行得到“零值”,但是yak则不能这样定义
Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang
此外在Yaklang中空值有两种:

  • undefined
  • nil

在yaklang中,空值表示为 undefinednil。这两种表示方式都是用来表示一个变量没有被赋值或者一个对象没有某个属性。
首先,我们来看一下undefinednil的区别:

  • undefined:表示变量没有被赋值或者对象没有某个属性,它是一个非法的值,不能用于任何有效的操作。
  • nil:表示变量被赋值为空值,通常用于表示一个对象没有某个属性或者一个数组没有某个元素。
var a;
dump(a)

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

布尔值

a:=true;
dump(a)

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

键值组(map / dict)

这个数据类型是常见的一种类型,形式为键名:键名对应的值。
在 Yaklang 中,可以使用 map 关键字来定义一个 Map 类型的变量。Map 是一种键值对的数据结构,其中每个键都映射到一个值。yaklang同样有两种map的定义方式:

使用make函数定义:
# 定义一个 Map 类型的变量
m := make(map[string]int);
dump(m);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

使用字面量定义:
# 定义一个 Map 类型的变量
m := map[string]int{"apple": 5, "lettuce": 7};
dump(m);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

访问和赋值

要向map中添加新的键值对,可以使用以下语法:

m["key"] = value

例子如下:

# 定义一个 Map 类型的变量
m := make(map[string]int);
dump(m);
m["test"]=123;
dump(m);

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang
要从map中读取值:

value := m["key"]

例子如下:

# 定义一个 Map 类型的变量
m := map[string]int{"apple": 5, "lettuce": 7}
dump(m["apple"])		//quchu apple的值

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang
如果请求的键不存在于map中,Go会返回值类型的零值,而Yaklang则会返回空值

# 定义一个 Map 类型的变量
m := map[string]int{"apple": 5, "lettuce": 7}
dump(m["admin"])		//取出不存在的admin的值

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

删除map里的某一项

要从map中删除键值对,使用delete内置函数:

delete(m, "key(键名)")

例子如下:

# 定义一个 Map 类型的变量
m := map[string]int{"apple": 5, "lettuce": 7}
delete(m, "apple")
dump(m)

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

遍历map

可以使用for循环和range关键字遍历map中的所有键值对:

# 定义一个 Map 类型的变量
m := map[string]int{"apple": 5, "lettuce": 7}
for key,value := range m {
    println("键名:",key,"键值:",value);
}

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

数组 / 切片 / 列表

在Go语言中,数组和切片是基础且不同的类型,它们都用于存储元素的序列。Go语言没有内置的列表数据类型,但切片提供类似于动态数组的功能。

切片中的length是该切片中当前已存储的元素个数,切片的容量是该切片指向的数组的元素个数。往一个满了的切片(切片长度=切片容量)中添加新元素会触发创建一个新的数组,并且新数组的容量是原来的2倍,该新数组会将原数组中的元素都拷贝过来,同时将slice中的指针更新到指向新数组

切片(Slice)是对数组一个连续片段的引用,因此它是可变长度的。

使用make创建新切片

使用make创建切片,并指定长度和可选的容量:

s := make([]int, 5)    // 长度为5,容量也为5
s := make([]int, 5, 10) // 长度为5,容量为10

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang
Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

PS:容量决定切片上限,长度则是实际上的元素个数。即容量必须大于或等于长度

# 定义一个切片
s := make([]int, 5, 3)
dump(s)

上面这种就是错误的
Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

从数组或切片创建新切片
# 定义一个切片
// s := make([]int, 5, 10)
s := [1,2,3,5,654,67,76,7,68,4]
a := s[1:5]
dump(a)		 // 创建一个新切片,包含从索引1到索引5的元素,长度是4,容量是10

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

访问切片元素

和数组一样,可以通过索引访问切片的元素:

# 定义一个切片
s := make([]int, 5, 10)
dump(s[0])		// 获取第一个元素的值

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

修改切片元素
s[0] = 100 // 设置第一个元素的值为100

例子:

golang与Yaklang之间切片区别

在golang中由于切片是引用类型,修改其元素会影响底层数组和其他引用同一数组的切片,但是在Yaklang中修改切片原数组不受影响

golang中切片的修改
package main

import (
	"fmt"
)

func main() {
	arr := [5]int{1, 2, 3, 4, 5} //原始数组
	s := arr[1:4]                //数组产生的切片
	b := arr[1:4]                //引用同一数组的切片
	//fmt.Println(s)
	//fmt.Println(b)
	//fmt.Println(arr)

	s[0] = 10000
	s[1] = 10000
	fmt.Println("改后", s)
	fmt.Println("改后", b)
	fmt.Println("改后", arr)
}

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

Yaklang的切片修改
# 定义一个切片
// s := make([]int, 5, 10)
s := [1,2,3,5,654,67,76,7,68,4]
a := s[0:5]
b := s[0:5] 
println("原始切片:",a)
println("原始切片:",b)
println("原始数组:",s)
a[0]=10000
a[1]=10000
println("修改后的切片:",a)
println("修改后的切片:",b)
println("修改切片后的数组:",s)

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

添加元素

可以使用append函数向切片添加元素。如果添加的元素超出切片容量,Go会自动创建一个新的底层数组,并将元素复制过去:

s = append(s, 6)

例子:

# 定义一个切片
// s := make([]int, 5, 10)
s := [1,2,3,5,654,67,76,7,68,4]
a := s[0:5]
b := s[0:5] 
println("原始切片:",a)
println("原始切片:",b)
println("原始数组:",s)
a=append(a,"添加的元素")
println("修改后的切片:",a)
println("修改后的切片:",b)
println("修改切片后的数组:",s)

Yaklang 中的类型和变量,yakit的使用,网络安全基础,web安全,开发语言,安全,网络安全,golang

遍历切片

可以使用for循环或者for配合range关键词来遍历切片:文章来源地址https://www.toymoban.com/news/detail-808910.html

// 使用for循环
for i := 0; i < len(s); i++ {
    fmt.Println(s[i])
}

// 使用for和range
for index, value := range s {
    fmt.Println(index, value)
}

到了这里,关于Yaklang 中的类型和变量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 常见的10种网络安全攻击类型

    1. DoS 和 DDoS 攻击 DoS 是 Denial of Service 的简称,即拒绝服务。单一的 DoS 攻击一般是采用一对一方式的,通过制造并发送大流量无用数据,造成通往被攻击主机的网络拥塞,耗尽其服务资源,致使被攻击主机无法正常和外界通信。 DDos 全称 Distributed Denial of Service,分布式拒绝服

    2024年02月01日
    浏览(49)
  • 网络安全攻击方式有几种?常见类型介绍!

    渗透测试是为了证明网络防御按照预期计划正常运行而提供的一种机制。作为网络安全防范的一种新技术,渗透测试对于网络安全组织具有实际应用价值,那么你知道渗透测试的攻击方法有哪些吗?以下为大家详细介绍一下,希望对你们有所帮助。 目前国内外使用比较普遍的

    2024年02月11日
    浏览(42)
  • 网络&信息安全:11个常见漏洞类型汇总

    SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。 在设计程序,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击,可能导致数据被

    2024年03月12日
    浏览(51)
  • 前端常问的几种网络安全攻击类型

    就是攻击者想尽一切办法将可以执行的代码注入到网页中。 存储型(server端): 场景:见于带有用户保存数据的网站功能,如论坛发帖、商品评论、用户私信等。 攻击步骤: i)攻击者将恶意代码提交到目标网站的数据库中 ii)用户打开目标网站时,服务端将恶意代码从数

    2024年02月06日
    浏览(46)
  • 简单讲述网络安全的概念、类型和重要性

    什么是网络安全? 网络安全是指用于防止网络攻击或减轻其影响的任何技术、措施或做法。网络安全旨在保护个人和组织的系统、应用程序、计算设备、敏感数据和金融资产,使其免受简单而不堪其绕的计算机病毒、复杂而代价高昂的勒索软件攻击,以及介于两者之间的各种

    2024年02月02日
    浏览(48)
  • Verilog语言中的线型wire变量与寄存器类型reg变量讲解

    (1)创建wire线型 (2)在always块中要赋值的不能是wire类型,只能是reg类型 (3)输入类型不能是reg类型 (4)输出reg类型,但没有触发条件时,软件会自动将触发器综合掉

    2024年02月16日
    浏览(47)
  • 计算机网络】网络安全 : 计算机网络安全威胁 ( 四种网络攻击类型 | 主动攻击与被动攻击 | 分布式拒绝服务攻击 DDos | 恶意程序 | 计算机网络安全目标)

    一、网络安全内容 网络安全内容 : 网络安全概述 对称加密 和 非对称加密 体质 数字签名 因特网安全协议 链路加密 与 端到端加密 防火墙 二、四种网络攻击 四种网络攻击 : ① 截获 : 窃听 其它的 通信内容 , 不影响网络通信 ; ② 中断 : 中断 他人 的网络通信 ; ③ 篡改 : 篡改

    2024年02月12日
    浏览(53)
  • 教你快速上手C语言中的数据类型和变量

      哈喽,各位铁汁们好啊!✨今天来给大家带来的是初识 C语言 里面的 数据类型 和 变量 。   今天主要带大家简单认识-一下C语言,俗话说 没吃过猪肉,也见过猪跑。 了解下每个数据类型是干嘛的。可以读懂C语言的简单程序,其他的博主就不多介绍了。   后面会为

    2024年02月12日
    浏览(41)
  • 【云计算网络安全】DDoS 攻击类型:什么是 ACK 洪水 DDoS 攻击

    TCP ACK 洪水攻击旨在通过发送大量 TCP ACK 数据包,使服务器过载。与其他 DDoS 攻击一样,ACK 洪水的目标是利用垃圾数据来减慢攻击目标的响应速度或导致其崩溃,进而使其无法提供正常服务给合法用户。目标服务器被迫处理每个接收到的 ACK 数据包,从而消耗大量计算资源,

    2024年02月08日
    浏览(38)
  • 面试题-TS(二):如何定义 TypeScript 中的变量和函数类型?

    面试题-TS(二):如何定义 TypeScript 中的变量和函数类型? 一、 变量类型的定义 在TypeScript中,我们可以使用冒号(:)来指定变量的类型。以下是一些常见的变量类型: 布尔类型(boolean):表示true或false的值。 数字类型(number):表示数字值。 字符串类型(string):表示文本值

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包