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.rhkb.cn/news/504008.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS开发如何从入门进阶到高级

针对iOS开发的学习,不同阶段应采取不同的学习方式,以实现高效提升.本文将iOS开发的学习分为入门、实战、进阶三个阶段,下面分别详细介绍. 一、学习社区 iOS开源中国社区 这个社区专注于iOS开发的开源项目分享与协作,汇集了大量开…

洛谷P1617————数字转英文

题目如下 思路:将1~9的英文和20~90的英文用字符串数组存储,把下标看作对应的数字进行输出,遇到0或连续多个0就输出“and”,定义l用来看枚举到哪一位了,如果是单独输入一个“0”,则直接输出zero然后结束。否…

Kubernetes集群架构

Kubernetes集群架构 Kubernetes 集群架构控制平面组件kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-manager 节点组件kubeletkebe-proxy(可选)容器运行时 插件DNSWeb UI(Dashboard)容器资源监控集群…

esp32开发笔记之一:esp32开发环境搭建vscode+ubuntu

最近想用esp32做一个物联网项目,踩坑N个终于有点心得,写下来避免和我一样的小白踩无谓的坑。 写在前面: 第一,大家一定要用linux系统作为编译工具,速度上是windows无法比的,不要因为不熟悉linux而选择win…

探索大型语言模型新架构:从 MoE 到 MoA

探索大型语言模型新架构:从 MoE 到 MoA 当前,商业科技公司纷纷投身于一场激烈的竞赛,不断扩大语言模型的规模,并为其注入海量的高质量数据,试图逐步提升模型的准确性。然而,这种看似顺理成章的发展路径逐渐…

数据结构:LinkedList与链表—面试题(三)

目录 1、移除链表元素 2、反转链表 3、链表的中间结点 4、返回倒数第k个结点 5、合并两个有序链表 1、移除链表元素 习题链接https://leetcode.cn/problems/remove-linked-list-elements/description/ 描述:给你一个链表的头节点 head 和一个整数 val &#xff…

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…

LAMP搭建

LAMP搭建 引子:本篇文章为LAMP的搭建流程,其中L(Ubuntu)、A(Apache)、M(Mysql)、P(PHP)。 一、L → Ubuntu Step 1:在Vmware Workstation中使…

基于高斯混合模型的数据分析及其延伸应用(具体代码分析)

一、代码分析 (一)清除工作区和命令行窗口 clear; clc;clear;:该命令用于清除 MATLAB 工作区中的所有变量,确保代码运行环境的清洁,避免之前遗留的变量对当前代码运行产生干扰。例如,如果之前运行的代码中…

成为LabVIEW自由开发者

成为LabVIEW自由开发者的体验可以非常丰富且具有挑战性,同时也充满了自我成长和多样化项目的机会。 ​ 1. 高度的灵活性与自由度 工作时间与地点:作为自由开发者,你可以自由选择工作时间和地点。你可以在家工作,也可以选择在咖啡…

33.3K 的Freqtrade:开启加密货币自动化交易之旅

“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手,能够连接到众多主流加密货币交易所,如 Binance、Bitmart、Bybit 等(支…

maven之插件调试

当使用maven进行项目管理的时候,可能会碰到一些疑难问题。网上资料很少,可能会想着直接调试定位问题。这里以maven-compiler-plugin为例: (1)准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…

如何配置Cursor的显示主题模式

cursor打开代码后,默认主题显示的主要代码颜色是白色,注解是黑色的,很不习惯,摸索一下,如何配置成与VSOCDE一样的主题,方案如下。 选择菜单 "File"--"Preferences 选择“ Theme" ---&…

Windows 系统中的任务管理器是什么,打开快捷键是什么?

任务管理器是 Windows 操作系统中一个强大的工具,它允许用户监控系统的性能、启动和停止进程、管理服务、以及查看网络活动等。掌握任务管理器的快捷键可以帮助你更高效地进行这些操作。本文中简鹿办公将教你如何利用任务管理器中的快捷键来提升你的工作效率。 一、…

论文导读 | 数据库中的连接操作

1. 连接操作的背景与问题定义 在关系型数据库中,我们通常面对以下问题: 给定一个数据库实例 I \mathcal{I} I,包含若干关系(表) R { R 1 , R 2 , ⋯ , R n } \mathcal{R}\{R_1, R_2, \cdots, R_n\} R{R1​,R2​,⋯…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上,实例是别的同事搭建的。最近又又又想了解一下,而且已经盘了一些了,所以写写记录一下。因为这个事儿没太多的进度压力,索性写到哪儿算哪儿,只要是新了解到的…

【搜索】【推荐】大 PK

引言 在当今信息爆炸的时代,如何从海量数据中精准地为用户推荐最相关的内容成为了科技领域的关键挑战。搜推技术作为推荐系统的核心组件,扮演着至关重要的角色。本文将深入探讨这两种技术背后的方法论,剖析它们各自面临的难点,并…

多模态大模型初探索:通过ollama部署多模态大模型

文章目录 前言模型下载 前言 今天和同事聊天,聊到多模态大模型,感觉可以作为2025年的一个新的探索方向。希望和大家一起学习,一起进步。 今天也是尝试了我能想到的最基本最快速地本地部署多模态大模型的方式,那便是使用ollama。…

maven如何从外部导包

1.找到你项目的文件位置,将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮

流媒体内网穿透/组网/网络映射EasyNTS上云网关启动失败如何解决?

在当今的网络视频监控和远程通信领域,设备的远程访问和数据共享需求日益增长。通过EasyNTS平台,用户无需开放内网端口,即可实现内网应用的外网访问,极大地简化了网络配置和维护工作。 EasyNTS上云网关的主要作用是解决异地视频共…