golang快速上手基础语法

变量

第一种,指定变量类型,声明后若不赋值,使用默认值0

package mainimport "fmt"func main() {var a int //第一种,指定变量类型,声明后若不赋值,使用默认值0。fmt.Printf(" a= %d\n", a)
}

打印

第二种,根据值自行判定变量类型

package mainimport "fmt"func main() {var a = 33 //第二种,根据值自行判定变量类型fmt.Printf("a= %d\n", a)
}

打印

第三种,直接定义 变量需首次定义之前不可以为已用过的变量 

package mainimport "fmt"func main() {
c := 3 //第三种,直接定义 变量需首次定义之前不可以为已用过的变量 fmt.Printf(" a= %d\n", c)
}

打印

const

常量

package mainimport "fmt"func main() {const LENGTH int = 3const WIDTH int = 10var area intconst a, b, c = 1, false, "str" //多重赋值area = LENGTH * WIDTHfmt.Printf("面积为 : %d\n", area)println(a, b, c)}

这里和Java的常量定义是相同的

打印

多重定义枚举

const (Unknown = 0Female = 1Male = 2
)

iota

它简化了常量用于增长数字的定义,给以上相同的值以准确的分类。

package mainimport "fmt"const (One   int = 1 + iota // 1+0Two                  // 1+1Three                // 1+2Four                 // 1+3Five                 // 1+4Six                  // 1+5)func main() {fmt.Println(One)fmt.Println(Two)fmt.Println(Three)fmt.Println(Four)fmt.Println(Five)fmt.Println(Six)}

打印

用于常量定义中,常量组中仅仅有一个标示符在一行的时候,它将使用增长的iota取得前面的表达式并且再运用它

if

if语句和Java里的if相同

for循环

package mainimport "fmt"func main() {//常规for循环类似于Java 对比少了for(i := 0; i < 10; i++)少了括号for i := 0; i < 10; i++ {fmt.Println(i)}
}

打印

类似于Java里while的for循环

如下for循环实现当value=10的时候退出for循环 

package mainimport "fmt"func main() {value := 0for {value += 1fmt.Println(value)if value == 10 {break}}
}

打印

import和init

import导包和Java的import 差不多

目录结构

fun1

package fun1 //这里的包名最好和目录名保持相同import ("fmt"
)func init() {fmt.Println("fun1")
}
func TestFun1() {fmt.Println("testFun1")
}

fun2

package fun2 //这里的包名最好和目录名保持相同import "fmt"func init() {fmt.Println("fun2")
}
func TestFun2() {fmt.Println("testFun2")
}

主函数

package mainimport ("fmt""githup.com/kanyu/moudles_test/basic/fun1""githup.com/kanyu/moudles_test/basic/fun2"
)func main() {fun1.TestFun1()fun2.TestFun2()fmt.Println("main")
}

打印

详细执行流程

1,主函数导入依赖

2,依赖函数再次判断有无依赖,有依赖再重复导入无依赖执行函数的init函数

3,执行其它的函数

指针

go语言中和C语言相同 用*来表达变量的地址 用&来取指针指向的数值

函数值传递与指针传递

值传递,即在函数传参的过程中,原来的参数不会被调用函数的行为所改变值

在传递参数的时候会把值复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 go默认值传递

package mainimport "fmt"func swap(x, y string) (string, string) {return y, x
}func main() {stra := "字符串a"strb := "字符串b"fmt.Println("交换之前打印")fmt.Println(stra, strb)a, b := swap(stra, strb)fmt.Println("交换之后打印")fmt.Println(a, b)
}

打印

指针传递

//引用传递
package mainimport "fmt"func main() {/* 定义局部变量 */var a int = 100var b int= 200fmt.Printf("交换前 a 的值为 : %d\n", a )fmt.Printf("交换前 a 的地址值为 : %d\n", &a )fmt.Printf("交换前 b 的值为 : %d\n", b )fmt.Printf("交换前 b 的地址值为 : %d\n", &b )/* 调用 swap() 函数* &a 指向 a 指针,a 变量的地址* &b 指向 b 指针,b 变量的地址*/swap(&a, &b)//调用时候传入地址值fmt.Printf("交换后,a 的值 : %d\n", a )fmt.Printf("交换后 a 的地址值为 : %d\n", &a )fmt.Printf("交换后,b 的值 : %d\n", b )fmt.Printf("交换后 b 的地址值为 : %d\n", &b )}func swap(x *int, y *int) {//指针参数变量 这里的交换指的把对应指针指向的值给交换了 所以a和b的地址未变化var temp inttemp = *x    /* 保存 x 地址上的值 */*x = *y      /* 将 y 值赋给 x */*y = temp    /* 将 temp 值赋给 y */
}

打印

defer

延迟函数,defer在rerurn之后再执行延迟函数 用于如打开/关闭文件、获取/释放锁、连接/断开连接等,确保资源被适当地释放,即使在发生错误或提前返回的情况下也能保证执行

package mainimport "fmt"func deferFunc() int {fmt.Println("defer func called")return 0
}func returnFunc() int {fmt.Println("return func called")return 0
}func returnAndDefer() int {defer deferFunc()return returnFunc()
}func main() {returnAndDefer()
}

打印

参考

8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897937.shtml

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

相关文章

Java中的访问修饰符有哪些

在 Java 中&#xff0c;访问修饰符&#xff08;Access Modifiers&#xff09;用于控制类、方法、变量和构造器的访问权限。Java 提供了四种访问修饰符&#xff0c;分别是&#xff1a; publicprotecteddefault&#xff08;包私有&#xff0c;没有显式修饰符&#xff09;private…

【公务员考试】高效备考指南

高效备考指南&#xff1a;从计划制定到心态调整的全面攻略 公务员考试竞争激烈&#xff0c;备考过程既需要科学规划&#xff0c;也需要持之以恒的努力。结合多位高分考生的经验与专业机构的指导&#xff0c;本文整理了一套系统化的备考策略&#xff0c;涵盖目标设定、学习方法…

工程实践:如何使用SU17无人机来实现室内巡检任务

阿木实验室最近发布了科研开发者版本的无人机SU17&#xff0c;该无人机上集成了四目视觉&#xff0c;三维激光雷达&#xff0c;云台吊舱&#xff0c;高算力的机载计算机&#xff0c;是一个非常合适的平台用于室内外巡检场景。同时阿木实验室维护了多个和无人机相关的开源项目。…

强大的CSS变量

在 CSS 中&#xff0c;变量&#xff08;Custom Properties&#xff09; 允许你定义可重用的值&#xff0c;方便在整个样式表中使用和修改。CSS 变量的基本语法如下&#xff1a; 1. 定义 CSS 变量 CSS 变量通常在 :root 伪类中定义&#xff0c;以便它们可用于整个文档&#xf…

蓝桥杯嵌入式赛道复习笔记1(led点亮)

前言 基础的文件创建&#xff0c;参赛资源代码的导入&#xff0c;我就不说了&#xff0c;直接说CubeMX的配置以及代码逻辑思路的书写&#xff0c;在此我也预祝大家人人拿国奖 理论讲解 原理图简介 1.由于存在PC8引脚到PC15引脚存在冲突&#xff0c;那么官方硬件给的解决方案…

Linux进程1.0--task_struct

1.硬件&#xff1a;冯诺依曼体系结构&#xff1a; 单个分析&#xff1a;、 数据流向&#xff1a;数据必须先进入输入设备&#xff0c;再到存储器&#xff0c;然后由存储器给控制器&#xff0c;控制器收到以后进行相应的处理后&#xff0c;再传回存储器&#xff0c;存储器最终传…

本地部署Jina AI Reader:用Docker打造你的智能解析引擎

本地部署Jina AI Reader&#xff1a;用Docker打造你的智能解析引擎 &#x1f31f; 引言&#xff1a;为什么需要本地部署&#xff1f;&#x1f4cc; 场景应用图谱&#x1f527; 部署指南&#xff08;Linux环境&#xff09;1. 环境准备2. Docker部署3. 验证服务状态 &#x1f680…

贪心算法简介(greed)

前言&#xff1a; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每个决策阶段都选择当前最优解的算法策略&#xff0c;通过局部最优的累积来寻求全局最优解。其本质是"短视"策略&#xff0c;不回溯已做选择。 什么是贪心、如何来理解贪心(个人对贪心的…

代码随想录day17 二叉树part05

654.最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums …

宇树人形机器人开源模型

1. 下载源码 https://github.com/unitreerobotics/unitree_ros.git2. 启动Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 这个错误通常出现在虚拟机环境中运行需要OpenGL支持的应用…

通过特征值和特征向量实现的图像压缩和特征提取

前文&#xff0c;我们在学习人工智能的线性代数基础的时候&#xff0c;就了解到&#xff0c;矩阵在人工智能中被广泛使用&#xff0c;接下来我们就从大家非常常见的图像开始&#xff0c;深度理解矩阵在人工智能中的应用。有关线性代数基础的文章可以看的我CSDN:人工智能中的线性…

蓝桥杯2023年第十四届省赛真题-整数删除 暴力-->链表+小根堆

题目来自DOTCPP&#xff1a; 思路&#xff1a; ①每次找到数列中的最小值下标&#xff0c;然后用状态数组st标记它&#xff0c;相当与删除它&#xff0c;之后就不会访问它。 ②对最小值下标左边和右边判断一下&#xff0c;看有没有数字&#xff0c;如果有就把最小值加到两边第…

springboot438-基于SpringBoot的数字化教学资源管理系统(源码+数据库+纯前后端分离+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

蓝桥杯刷题——第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

一、0握手问题 - 蓝桥云课 算法代码&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;题意很清晰&#xff0c;累加即可。 二、0小球反弹 - 蓝…

跨境卫士跟vps哪个更好用?跨境卫士为卖家提供固定IP环境

跨境卫士是通过为卖家提供固定的环境 i p来隔离本地电脑环境&#xff0c;为卖家创造一个真实独立的物理环境&#xff0c;让买家再任意电脑&#xff0c;任意网络下都能够安全的管理账号。跨境卫士和紫鸟原理一样&#xff0c;是通过为卖家提供固定的环境 i p来隔离本地电脑环境&a…

coding ability 展开第四幕(滑动指针——巩固篇)超详细!!!!

文章目录 前言水果成篮思路 找到字符串中所有字母异位词思路 串联所有单词的子串思路 最小覆盖子串思路 总结 前言 本专栏上一篇博客&#xff0c;带着大家从认识滑动窗口到慢慢熟悉 相信大家对滑动窗口已经有了大概的认识 其实主要就是抓住——一段连续的区间 今天来学习一些滑…

图解AUTOSAR_CP_BSW_General

AUTOSAR BSW通用规范详解 AUTOSAR基础软件模块通用规范与架构解析 目录 1. 概述 1.1. AUTOSAR BSW通用规范简介1.2. 文档目的与范围2. BSW模块文件结构 2.1. 标准文件组织2.2. 命名规范3. BSW模块接口 3.1. 接口类型3.2. 模块API3.3. 配置参数4. BSW通用架构 4.1. 分层架构4.2.…

如何在Futter开发中做性能优化?

目录 1. 避免不必要的Widget重建 问题&#xff1a;频繁调用setState()导致整个Widget树重建。 优化策略&#xff1a; 2. 高效处理长列表 问题&#xff1a;ListView一次性加载所有子项导致内存暴涨。 优化策略&#xff1a; 3. 图片加载优化 问题&#xff1a;加载高分辨率…

组件通信框架ARouter原理剖析

组件通信框架ARouter原理剖析 一、前言 随着Android应用规模的不断扩大&#xff0c;模块化和组件化开发变得越来越重要。ARouter作为一个用于帮助Android应用进行组件化改造的框架&#xff0c;提供了一套完整的路由解决方案。本文将深入分析ARouter的核心原理和实现机制。 二…

Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析

学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…