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

news2025/1/9 13:47:46

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.coloradmin.cn/o/2273816.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

细说STM32F407单片机以轮询方式读写外部SRAM的方法

目录 一、实例的功能 二、工程配置 1、KEYLED 2、时钟、DEBUG、USART6、NVIC、GPIO、CodeGenerator 3、FSMC (1) 模式设置 (2) Bank 1子区3参数设置 1) NOR/PSRAM control组,子区控制参数 2) NOR/PSRAM timi…

下载ffmpeg执行文件

打开网址:Download FFmpeg 按下面步骤操作 解压文件就可以看到ffmpeg的执行文件了,需要通过命令行进行使用: ffmpeg命令行使用参考: ffmpeg 常用命令-CSDN博客

嵌入式系统 (2.嵌入式硬件系统基础)

2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…

【合作原创】使用Termux搭建可以使用的生产力环境(九)

前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(八)-CSDN博客中我们讲到了如何安装IDEA社区版,并在Termux中安装VNC服务器,在proot-distro的Debian中启动xfce桌面,并通过这个方式解决了IDEA社区版中无…

计算机网络--UDP和TCP课后习题

【5-05】 试举例说明有些应用程序愿意采用不可靠的UDP, 而不愿意采用可靠的TCP。 解答: 这可能有以下几种情况。 首先,在互联网上传输实时数据的分组时,有可能会出现差错甚至丢失。如果利用 TCP 协议对这些出错或丢失的分组进行重传&…

STM32学习(十)

I2C模块内部结构 I2C(Inter-Integrated Circuit)模块是一种由Philips公司开发的二线式串行总线协议,用于短距离通信,允许多个设备共享相同的总线‌。 ‌硬件连接简单‌:I2C通信仅需要两条总线,即SCL&…

Flutter:吸顶效果

在分页中,实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…

数据结构基础之《(13)—前缀树》

一、前缀树 1、前缀树(Trie),又称字典树或单词查找树,是一种用于存储字符串集合的数据结构。 2、前缀树的操作 (1)单个字符串中,字符从前到后的加到一棵多叉树上 (2)字…

道品科技智慧农业与云平台:未来农业的变革之路

随着全球人口的不断增长,农业面临着前所未有的挑战。如何在有限的土地和资源上提高农业生产效率,成为了各国政府和农业从业者亟待解决的问题。智慧农业的兴起,结合云平台的应用,为农业的可持续发展提供了新的解决方案。 ## 一、智…

【Linux基础指令】第一期

一、Linux的介绍 Linux是一个开源的操作系统,性能、稳定性、安全性方面上都是很优秀的,所以它一直是企业后端系统的首选。所以其图形化界面并不是Linux的必需品,所以我们避免不了要使用命令行的形式来使用Linux,也就离不开…

​​​​​​芯盾时代以数据为核心的车联网业务安全解决方案

芯盾时代车联网业务安全建设聚焦智能网联业务运行过程产生的多维度、多模态、多视角数据以及因业务需求产生的过程数据和业务衍生数据,以网络安全等级保护为基础,坚持网络安全管理体系和技术体系并重的原则,加强网络安全体系化、实战化、常态…

剖析 Claim-Check 模式:以小传大,赋能分布式系统与微服务

1. 前言 1.1 写作背景与目的 在当今分布式系统与微服务架构盛行的时代,服务间的消息传递与数据交换越来越频繁。传统的消息传输在面对海量数据时,往往会遇到以下痛点: 消息体过大:直接通过消息队列或服务间接口发送大体量数据&…

VS2022引入sqlite数据库交互

法一:用官网编译好的动态库(推荐) 下载所需文件 sqlite官网地址:https://www.sqlite.org/howtocompile.html 下载以下的2个压缩包 第一个压缩包 sqlite-amalgamation-xxxx.zip,xxxx是版本号,保持一致即可,这里面有sqite3.h 第…

计算机的错误计算(二百零五)

摘要 基于一位读者的问题,提出题目:能用数值计算证明 吗?请选用不同的点(即差别大的数)与不同的精度。实验表明,大模型理解了题意。但是,其推理能力值得商榷。 例1. 就摘要中问题&#xff0…

设计形成从业务特点到设计模式的关联

规范和指引在应用架构、数据架构等各架构方向上形成规范性约束指导。同一个决策要点、架构单元在统一的架构原则指导下,会因业务特点差异有不同的实现,经过总结形成了最佳实践。在开展新应用的设计时,根据决策要点以及相关的业务特点&#xf…

深度学习blog-深刻理解线性变换和矩阵

深度学习中避免不了矩阵运算,或者张量(其实是矩阵数组)运算。卷积是矩阵加、乘法,注意力也是一样。本质都一样,所谓注意力,卷积、滤波,是对不必了解数学的人说的,底层都是矩阵运算&a…

C/C++程序性能测试方法综述

摘要 性能测试是软件开发中不可或缺的一部分,特别是在对性能要求较高的C/C程序中。本文将详细介绍多种C/C程序性能测试方法,包括时间复杂度分析、事后统计方法、事前分析估算方法、使用性能测试工具(如Google Benchmark、gprof、Valgrind等&…

jmeter 中 BeanShell 预处理程序、JSR223后置处理程序使用示例

1. 各个组件如何新建的? 2. "http请求" 组件内容样例: "消息体数据" 源码: {"task_tag": "face_detect","image_type": "base64","extra_args": [{"model"…

电脑32位和64位之区别(Difference between 32-Bit and 64 Bit Computers)

电脑32位和64位之区别 很多小伙伴还不知道电脑32位和64位是什么意思,今天小编就来普及一下。 32位和64位是指电脑处理器(CPU)和操作系统的架构,决定了电脑如何处理数据、存储信息、运行程序等。 32位和64位是指电脑系统中每个处…

vue -关于浏览器localstorge数据定期清除的实现

1.实现背景 用户登录时的信息存在了localstorge中,但它会一直存在。一般来说,我们希望这个数据能够定期被清除掉,以下一个定时清除的实现。 2.实现原理 在用户登录时,将用户信息存入localstorge的同时,将当前时间作…