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

go语言学习 笔记 1(变量,语法,数据类型)

1,包管理

一个文件夹可以称为一个包

在一个包里面可以创建多个文件

包中可以创建包

同一个包内的同一级的包的名字要相同

如:包a中的包b.包b中的包得是同一个package,a中和包b同级的包名字也得是一个名字

必须要有一个main包,入口,就像是c必须有一个main函数

如果没有main,就只能生成一个包的文件,不生成可执行文件

同一个包中同一级的不用去相互包含就可以调用对应文件,但是如果是想要调用当前包下一级的包,就需要import 引入

在文件中的函数的名字首字母大写则可以通过引入后给外部使用,如果是小写就不能让外部使用

2,输出

使用fmt包来输出

fmt.Print/fmt.Println

如果是print和println,本质是从stderr中获取内容(不推荐)

格式化输出(和c的print差不读)

%s用来替换文本,%d用来替换整型.%f用来替换小数,%.2f表示精确到小数点后2位

Fmt.Sprintf() 是根据格式化参数来返回字符串的

比如:

var a=2025-01-08

var b=”data:”

var c=”%s is %s”

var d=fmt.Sprintf(c,b,a)

fmt.println(d)

会输出data is 2025-01-08

3,标识符

不可以以内置的类型名等来作标识符,不可以数字开头,不可以有运算符

4,数据类型

布尔型

var a bool =true

数字类型

有float32,float64,int16,int,uint等等

var a int =3

字符串类型

var s string ="3131s"

其他的派生类型:

指针类型:指针是一个变量,其值为另一个变量的内存地址。

var n=10

var np*int =&n

数组类型:数组是一个固定长度的、具有相同类型元素的序列。数组的长度在声明时就确定,并且在其生命周期内不能改变。

var nums[5 ] int

结构化类型:结构体是一种用户自定义的数据类型,它可以将不同类型的数据组合在一起,形成一个新的复合类型。

channel类型:通道用于在 Go 协程(goroutine)之间进行通信和同步,是 Go 语言实现并发编程的重要机制.通道提供了一种在不同协程之间安全传递数据的方式。

函数类型:在 Go 语言中,函数是一等公民,这意味着函数可以像其他类型的变量一样被赋值、传递和作为返回值。

func add(a, b int) int {
    return a + b
}

切片类型:切片是对数组的一个动态视图,它提供了一种灵活、高效的方式来操作数组的一部分。与数组不同,切片的长度是可变的。

var sl [] int 

strs =[] string {"red","green"}

接口类型:接口是一种抽象类型,它定义了一组方法的签名,但不包含方法的实现。

下面的例子就定义了一个animal的接口,里面包含了一个speak的方法,之后实现了speak方法

type Animal interface {
    Speak() string
}

type Dog struct {
    name string
}

func (d Dog) Speak() string {  //这里的d是接收器变量
    return "Woof!"
}

type Cat struct {
    name string
}

func (c Cat) Speak() string {
    return "Meow!"
}

func makeSound(a Animal) {
    fmt.Println(a.Speak())
}

Map类型:映射是一种无序的键值对集合,通过键可以快速地查找对应的值。映射的键必须是支持 ==比较运算符的类型

5,变量

变量的声明:一般是使用var来声明

1,指定变量的类型,可以没有初始化,没有初始化时,会使用系统默认的零值

var s v_type
s = value

数值类型 :0

布尔类型::false

字符串为""

以下几种类型为 nil

var a *int//指针
var a []int//切片
var a map[string] int  //map
var a chan int         //通道
var a func(string) int //函数
var a error            //接口

2,不给类型,需要根据值自行判断,这个时候就必须初始化

var flag=true

3,使用":="来初始化//不可以给全局变量赋值

n :=1

s:="abc"

可以多个变量一同声明

var s1,s2,s3 = "www","wwwww","wwwwwww"

s4,s5,s6="aa","bb",3              //不用声明类型,可自行判断

全局变量声明

var (

    a int

    b bool

    s string

    ........

)

值类型和引用类型

通常我们使用的数据类似int,string 都是值类型,是从内存中拷贝一份来用的,当我们进行赋值时,本质只是复制了一个拷贝

var num1=100

var num2=num1

num2=10

fmt.Println(num2)//输出10

fmt.Println(num1)//输出100

var num3=&num1

*num3=1

fmt.Println(*num3)//输出1

fmt.Println(num1)//输出1

常量

在程序运行时,不会被修改的量。

const 标识符 类型 = 值

const length = 40

常量枚举,枚举中可以使用内置函数

const (
    a = "aaa"
    b = len(a)//3
    c = unsafe.Sizeof(a)//16
)

重要:字符串类型在 go 里是个结构体, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节。

一些注意:

1,如果你定义了一个变量,但是没有使用,(赋值不是使用)会报错

2,可以使用a,b=b,a来交换两个变量

3,_可以表示丢弃值 : _,b=1,2 这里只有b=2,1被丢弃了

4,如果一个函数返回多个值,可以使用并行的方式来获得

a,b=funct()

 


http://www.kler.cn/a/473429.html

相关文章:

  • 【马来西亚理工大学主办,ACM出版】2025年大数据、通信技术与计算机应用国际学术会议(BDCTA 2025)
  • 协方差矩阵
  • maven的简单介绍
  • 详细讲一下什么是闭包,为什么会产生闭包,闭包会导致什么,闭包可以帮助我们在开发中干什么
  • Java-编写的一个生产者-消费者模式
  • 虹软人脸识别
  • 【.NET】Kafka消息队列介绍,使用Confluent.Kafka集成Kafka消息队列
  • 如何使用脚手架工具开始,快速搭建一个 Express 项目的基础架构
  • Online Judge PTA 最大公约数与最小公倍数
  • 网络安全 基础入门-概念名词
  • 文件读写到SQLite数据库的方法
  • C++编程等级认证学习计划day2-1
  • 万界星空科技质量管理QMS系统具体功能介绍
  • AT6668-6N-22:BDS定位SOC芯片,常用在车载系统
  • TensorRT-LLM中的MoE并行推理
  • 【linux系统之redis6】redisTemplate的使用方法
  • 如何轻松反转C# List<T>中的元素顺序
  • “多维像素”多模态雷视融合技术构建自动驾驶超级感知能力|上海昱感微电子创始人蒋宏GADS演讲预告
  • Kafka优势剖析-消费者组、并行消费
  • JavaFX基础之环境配置,架构,FXML
  • GoChina备案管家
  • 深入Android架构(从线程到AIDL)_17 SurfaceView的UI多线程01
  • 数据库中的并发控制
  • 如何将某两个提交去掉父提交的合并
  • YOLOv10改进,YOLOv10改进主干网络为StarNet,CVPR2024,助力模型涨点
  • undolog,redolog,binlog分别是做什么的?