golang快速上手基础语法

news2025/3/18 3:43:55

变量

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

package main

import "fmt"

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

打印

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

package main

import "fmt"

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

打印

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

package main

import "fmt"

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

打印

const

常量

package main

import "fmt"


func main() {
	const LENGTH int = 3
	const WIDTH int = 10
	var area int
	const a, b, c = 1, false, "str" //多重赋值

	area = LENGTH * WIDTH
	fmt.Printf("面积为 : %d\n", area)
	println(a, b, c)

}

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

打印

多重定义枚举

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

iota

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

package main

import "fmt"

const (
	One   int = 1 + iota // 1+0
	Two                  // 1+1
	Three                // 1+2
	Four                 // 1+3
	Five                 // 1+4
	Six                  // 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 main

import "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 main

import "fmt"

func main() {
	value := 0
	for {
		value += 1
		fmt.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 main

import (
	"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 main

import "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 main


import "fmt"


func main() {
   /* 定义局部变量 */
   var a int = 100
   var b int= 200

   fmt.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 int
   temp = *x    /* 保存 x 地址上的值 */
   *x = *y      /* 将 y 值赋给 x */
   *y = temp    /* 将 temp 值赋给 y */
}

打印

defer

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

package main

import "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.coloradmin.cn/o/2316953.html

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

相关文章

【MySQL】多表操作 —— 外键约束

目录 多表关系一对一关系一对多/多对一关系多对多关系 外键约束基本概念一对多/多对一创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多对多创建外键约束外键约束下的数据操作数据插入数据删除 删除外键约束 多表关系 MySQL 多表之间的关系可以概括为&#…

从被动响应到主动预见:智能可观测性技术的变革与实践

思维导图 一、引言 🌃 想象一下,在一个深夜 🌙,你的关键业务系统突然出现故障 🚨。传统情况下,你可能会收到大量不相关的告警 📱💬💬💬,然后花费数小时甚至数天时间 ⏳,在错综复杂的系统架构中寻找根本原因 🔍。而在智能可观测性的世界里,故障发生前系统…

【GPT入门】第22课 langchain LCEL介绍

【GPT入门】第22课 langchain LCEL介绍 1. LCEL介绍与特点2. 原生API与LCEL的对比2. 简单demo 1. LCEL介绍与特点 LCEL 即 LangChain Expression Language&#xff0c;是 LangChain 推出的一种声明式语言&#xff0c;用于简化和优化在 LangChain 框架内构建复杂链和应用的过程…

7、基于osg引擎实现读取vtk数据通过着色器实现简单体渲染(1)

基于光线投射原理实现的体渲染 一、什么是体绘制&#xff1f;二、为什么不直接用3D模型渲染三、原理及部分代码解析1、什么是光线&#xff1f;2、什么是光线投射&#xff1f;3、为什么需要光线投射3D纹理&#xff1f;4、为什么必须是3D纹理&#xff1f;5、为什么还需要1D纹理&a…

在 Windows 上使用 choco 安装 mkcert 并配置 Vue 运行HTTPS

解决在Windows上使用Vue本地运行HTTPS的问题,vue-cli或vite都可以使用 步骤 1&#xff1a;确认 Chocolatey 是否已安装 1. 检查 choco 命令是否可用 打开 PowerShell&#xff08;管理员权限&#xff09;&#xff0c;输入&#xff1a; choco -v如果显示版本号&#xff08;如…

spring声明式事务原理01-调用第1层@Transactional方法(事务访问入口)

文章目录 【README】【步骤1】UserAppService调用userSupport.saveNewUser()【步骤2】获取到TransactionInterceptor【步骤3】chain不为空&#xff0c;接着执行CglibMethodInvocation#proceed方法【补充】AopContext作用 【步骤4】CglibMethodInvocation#proceed方法【步骤5】调…

Qt-D指针与Q指针的设计哲学

文章目录 前言PIMLP与二进制兼容性D指针Q指针优化d指针继承Q_D和Q_Q 前言 在探索Qt源码的过程中会看到类的成员有一个d指针&#xff0c;d指针类型是一个private的类&#xff0c;这种设计模式称为PIMPL&#xff08;pointer to implementation&#xff09;&#xff0c;本文根据Q…

数据结构——单链表list

前言&#xff1a;大家好&#x1f60d;&#xff0c;本文主要介绍数据结构——单链表 目录 一、单链表 二、使用步骤 1.结构体定义 2.初始化 3.插入 3.1 头插 3.2 尾插 3.3 按位置插 四.删除 4.1头删 4.2 尾删 4.3 按位置删 4.4按值删 五 统计有效值个数 六 销毁…

基于PHP的网店进销存管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 相比于以前的传统进销存管理方式&#xff0c;智能化的管理方式可以大幅降低进销存管理的运营人员成本&#xff0c;实现了进销存管理的标准化、制度化、程序化的管理&#xff0c;有效地防止了商品信息及仓库信息的随意管理&#xff0c;提高了信息的处理速度和精确度&#…

Vue3 Pinia $subscribe localStorage的用法 Store的组合式写法

Vue3 Pinia $subscribe 可以用来监视Stroe数据的变化 localStorage的用法 localStorage中只能存字符串&#xff0c;所有对象要选转成json字符串 定义store时&#xff0c;从localStorage中读取数据talkList可能是字符串也可能是空数组 Store的组合式写法 直接使用reactiv…

【PHP】获取PHP-FPM的状态信息

文章目录 一、前言二、环境三、过程1&#xff09;修改PHP-FPM配置文件2&#xff09;修改Nginx配置文件3&#xff09;访问页面4&#xff09;修改状态页面端口 一、前言 PHP-FPM内置有一个状态页面&#xff0c;通过这个页面可以获取到FPM的一些状态信息&#xff08;见下图&#…

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…

Java 大视界 -- 基于 Java 的大数据实时流处理中的窗口操作与时间语义详解(135)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

数据库的基本知识

目录 一、创建数据库和数据表1.1 创建数据库相关代码1.2 创建数据表1.3 约束条件1.3.1 主键约束1.3.2 非空约束1.3.3 唯一性约束1.3.4 默认约束1.3.5 自增字段 1.4 手工建表 二、数据查询功能2.1 sql 查询的7个关键词2.1.1 select2.1.2 from2.1.3 where2.1.4 group by2.1.5 hav…

失败的面试经历(ʘ̥∧ʘ̥)

一.面向对象的三大特性 1.封装&#xff1a;将对象内部的属性私有化&#xff0c;外部对象不能够直接访问&#xff0c;但是可以提供一些可以使外部对象操作内部属性的方法。 2.继承&#xff1a;类与类之间会有一些相似之处&#xff0c;但也会有一些异处&#xff0c;使得他们与众…

Android 7 及以上夜神模拟器,Fiddler 抓 https 包

文章目录 问题描述解决方案环境准备操作步骤1、导出 Fiddler 证书并修改成 .pem 和 .0 文件2、修改夜神模拟器配置3、打开夜神模拟器设备的 USB 调试选项4、将0725b47c.0证书放入夜神模拟器系统证书目录5、夜神模拟器 cmd 环境配置6、给 0725b47c.0 证书赋予权限7、打开 fiddle…

全国医院数据可视化分析系统

【大数据】全国医院数据可视化分析系统 &#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 &#x1f3e5; 项目名&#xff1a;医疗导航神器&#xff01;——《基于大数据的微医挂号网医院数据可视…

音视频入门基础:RTCP专题(1)——RTCP官方文档下载

一、引言 实时传输控制协议&#xff08;Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP&#xff09;是实时传输协议&#xff08;RTP&#xff09;的一个姐妹协议。RTCP由《RFC 3550》定义&#xff08;取代废弃的《RFC 1889》&#xff09;。RTP使用一个…

蓝桥杯专项复习——结构体、输入输出

目录 结构体&#xff1a;排序 输入输出 结构体&#xff1a;排序 [NOIP2007]奖学金 #include<iostream> #include<cstring> #include<algorithm>using namespace std;const int N310; int n;struct Student {int chinese,math,eng,sum;int idx; }Stu[N];//定…

工作记录 2017-01-06

工作记录 2017-01-06 序号 工作 相关人员 1 协助BPO进行Billing的工作。 修改CSV、EDI837的导入。 修改邮件上的问题。 更新RD服务器。 郝 修改的问题&#xff1a; 1、 In “Full Job Summary” (patient info.), sometime, the Visit->Facility is missed, then …