【Go】Golang环境配置与语法基础

news2024/11/23 10:22:17

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍Golang环境配置与示例。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

文章目录

    • :smirk:1. Golang介绍
    • :blush:2. 环境安装与配置
    • :satisfied:3. 应用示例
      • 最简示例:
      • 格式化字符串示例:
      • 变量声明示例:
      • 常量声明示例:
      • 函数调用示例:
      • 数据声明示例:
      • 指针使用示例:
      • 递归函数示例(阶乘)
      • 类型转换示例:
      • 并发(轻量级线程):

😏1. Golang介绍

Go(也被称为 Golang)是一种开源的静态类型编程语言,由 Google 开发并于2009年首次公开发布。Go 语言的设计目标是提供一种简单、高效、可靠的编程语言,适用于构建大型项目的并发和网络应用。

以下是 Go 语言的一些特点和优势:

1.简洁易读:Go 语言采用简洁的语法和结构,注重代码的可读性。它摈弃了一些复杂的特性和冗余的语法,使得代码更易理解和维护。

2.并发支持:Go 语言天生支持并发编程。它引入了 goroutine 和 channel 的概念,使得编写并发程序变得简单和高效。通过 goroutine,可以轻松地创建并发执行的任务,并通过 channel 在不同的 goroutine 之间进行通信和数据同步。

3.高性能:Go 语言通过使用垃圾回收器、即时编译技术和轻量级线程(goroutine)等特性,实现了出色的运行时性能。它在处理并发和网络任务时非常高效,适用于构建高性能的分布式系统。

4.内置工具和库:Go 语言附带了丰富的标准库,内置了许多常用的功能和工具。例如,网络编程、加密解密、文件操作、测试框架等。这些库使得开发者可以更轻松地构建各种类型的应用程序。

5.跨平台支持:Go 语言的编译器和运行时支持跨多个平台,包括 Windows、macOS、Linux 等。这使得开发者可以方便地在不同的操作系统上开发和部署应用程序。

6.静态类型检查:Go 语言是一种静态类型语言,它在编译阶段进行强类型检查,可以帮助开发者在编码过程中捕获潜在的错误。这有助于提高代码质量和可靠性。

7.社区支持:Go 语言拥有庞大而活跃的开发者社区,社区成员分享着大量的代码库、文档和教程。开发者可以从社区中获取支持和帮助,加快开发进度。

😊2. 环境安装与配置

# Ubuntu
# apt安装
sudo apt install golang-go
# 版本验证
go version
# 编译运行(2种方法)
go run hello.go
go build hello.go && ./hello

😆3. 应用示例

最简示例:

// hello.go
package main // 包声明

import "fmt" // 引入包

/* 入口函数 */
func main() { // 需要注意的是 { 不能单独放在一行
	/* 第一个go语句 */
	fmt.Println("Hello, World!") // 一行写一个go语句,不需要;
	fmt.Println("Hello, Go!")
	fmt.Println("Google" + " Go!")
	/* 注释与C++形式一样 单行注释// 多行注释/* */
}

格式化字符串示例:

package main

import (
	"fmt"
)

func main() {
	// %d 表示整型数字,%s 表示字符串
	var favnumber=6
	var favfruit="apple"
	var fav="I love number = %d and love fruit is = %s"
	/* 格式化字符串 Sprintf Printf */
	// var favorite=fmt.Sprintf(fav,favnumber,favfruit)
	// fmt.Println(favorite)
	fmt.Printf(fav,favnumber,favfruit)
}

变量声明示例:

package main
import "fmt"
func main() {
    var a string = "Hello" // 声明变量并初始化
    fmt.Println(a)

    var b, c int = 1, 2
	var d bool // 未初始化默认零值
    fmt.Println(b, c, d)

	result := b + c // 这种不带声明格式的只能在函数体中出现(简短声明)
	fmt.Println(result)
}

常量声明示例:

package main

import "fmt"

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

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

函数调用示例:

package main

import "fmt"

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

   /* 调用函数并返回最大值 */
   ret = max(a, b)

   fmt.Printf("最大值是 : %d\n", ret )

   c, d := swap("Google", "Go")
   fmt.Println(c, d)
}

/* 返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 定义局部变量 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result
}

/* 交换两个string */
func swap(x, y string) (string, string) {
	return y, x
}

数据声明示例:

package main

import "fmt"

func main() {
   var i,j,k int
   /* 声明数组的同时快速初始化数组 */
   balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
   /* 输出数组元素 */
   for i = 0; i < 5; i++ {
      fmt.Printf("balance[%d] = %f\n", i, balance[i] )
   }
   
   /* 数组长度不确定 */
   balance2 := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
   /* 输出每个数组元素的值 */
   for j = 0; j < 5; j++ {
      fmt.Printf("balance2[%d] = %f\n", j, balance2[j] )
   }

   /* 将索引为 1 和 3 的元素初始化 */
   balance3 := [5]float32{1:2.0, 3:7.0}  
   for k = 0; k < 5; k++ {
      fmt.Printf("balance3[%d] = %f\n", k, balance3[k] )
   }
}

指针使用示例:

package main

import "fmt"

func main() {
   var a int= 20 // 声明实际变量
   var ip *int   // 声明指针变量

   ip = &a  // 指针变量的存储地址

   fmt.Printf("a 变量的地址是: %x\n", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x\n", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d\n", *ip )

   /* 空指针 */
   var ptr *int
   fmt.Printf("ptr 的值为 : %x\n", ptr)
}

递归函数示例(阶乘)

package main

import "fmt"

func Factorial(n uint64)(result uint64) {
    if (n > 0) {
        result = n * Factorial(n-1)
        return result
    }
    return 1
}

func main() {  
    var i int = 6
    fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}

类型转换示例:

package main

import (
	"fmt"
	"strconv"
)

func main() {
	/* 数值类型转换 */
	var sum int = 17
	var count int = 5
	var mean float32
   
	mean = float32(sum)/float32(count)
	fmt.Printf("mean 的值为: %f\n",mean)

	/* 字符串类型转换 */
	num := 123
    str := strconv.Itoa(num)
    fmt.Printf("整数 %d  转换为字符串为:'%s'\n", num, str)

	str1 := "3.14"
    num1, err := strconv.ParseFloat(str1, 64)
    if err != nil {
        fmt.Println("转换错误:", err)
    } else {
        fmt.Printf("字符串 '%s' 转为浮点型为:%f\n", str1, num1)
    }

	num2 := 3.14
    str2 := strconv.FormatFloat(num2, 'f', 2, 64)
    fmt.Printf("浮点数 %f 转为字符串为:'%s'\n", num2, str2)
}

并发(轻量级线程):

package main

import (
	"fmt"
	"time"
)

func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

func main() {
	go say("world") // goroutine轻量级线程,不需要显式地创建和管理线程
	say("hello")
}

请添加图片描述

以上。

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

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

相关文章

【Pycharm/Anaconda配置环境记录】

文章目录 1、Pytorch配置2、mmcv配置 1、Pytorch配置 查看虚拟环境创建虚拟环境 conda env list&#xff1a;查看虚拟环境 conda create --name env_name python3.7&#xff1a;创建虚拟环境 conda activate env_name&#xff1a;激活/进入该虚拟环境 查看自己的CUDA版本以及P…

element-plus-自定义Dialog样式

实现如下 <template><h3>dialog3 test 全局</h3><el-button type"primary" size"default" click"show">全局弹窗</el-button><div class""><!-- 弹窗 --><el-dialog v-model"visi…

使用 Matter-SDK 快速搭建 Matter 环境 (Linux)

Matter 作为一个统一的智能家居互联协议&#xff0c;凭借其高兼容性的特点&#xff0c;正逐渐打破各个智能家居之间的壁垒。乐鑫作为在 Matter 项目发布之初的早期成员&#xff0c;提供了一套开源、完整、易用的 Matter-SDK。 乐鑫的 Matter-SDK 是建立在开源 Matter-SDK 之上…

MySQL - order by排序查询 (查询操作 四)

功能介绍&#xff1a;order by&#xff1a;对查询结果进行排序&#xff0c;执行顺序在查询完结果执行&#xff08;比如where后&#xff09; 排序方式&#xff1a;ASC&#xff1a;升序&#xff08;默认&#xff0c;不用指定&#xff09; DESC&#xff1a;降序 语法&#x…

Android跨进程通信:Binder机制原理

目录 1. Binder到底是什么&#xff1f; 2. 知识储备 2.1 进程空间划分 2.2 进程隔离 & 跨进程通信&#xff08; IPC &#xff09; 2.3 内存映射 2.3.1 作用 2.3.2 实现过程 2.3.3 特点 2.3.4 应用场景 2.3.5 实例讲解 ① 文件读 / 写操作 ② 跨进程通信 3. Bi…

【Java 基础篇】Java 图书管理系统详解

介绍 图书管理系统是一种用于管理图书信息、借阅记录、用户信息等的软件系统。它可以帮助图书馆、书店或个人管理和组织图书资源&#xff0c;提供了方便的借阅和查询功能。在这篇博客中&#xff0c;我们将详细介绍如何使用Java编程语言创建一个简单的图书管理系统。 功能需求…

SpringMVC 学习(一)Servlet

1. Hello Servlet (1) 创建父工程 删除src文件夹 引入一些基本的依赖 <!--依赖--> <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test<…

大模型lora微调-chatglm2

通义千问大模型微调源码&#xff08;chatglm2 微调失败&#xff0c;训练通义千问成功&#xff09;&#xff1a;GitHub - hiyouga/LLaMA-Efficient-Tuning: Easy-to-use LLM fine-tuning framework (LLaMA-2, BLOOM, Falcon, Baichuan, Qwen, ChatGLM2)Easy-to-use LLM fine-tun…

STM32存储左右互搏 I2C总线读写FRAM MB85RC1M

STM32存储左右互搏 I2C总线读写FRAM MB85RC1M 在较低容量存储领域&#xff0c;除了EEPROM的使用&#xff0c;还有铁电存储器FRAM的使用&#xff0c;相对于EEPROM, 同样是非易失性存储单元&#xff0c;FRAM支持更高的访问速度&#xff0c; 其主要优点为没有EEPROM持续写操作跨页…

day06_循环

今日内容 零、 复习昨日 一、循环 二、流程控制关键词 零、 复习昨日 8个基本数据类型 变量的使用步骤 1)声明2)赋值3)使用 声明,数据类型 变量名 不一定非得是基本类型 int a; String s; Scanner scanner;赋值,只要符合类型(能默认转换)就能赋值 int a 1; double d 1; Scann…

uni-app问题记录

一、启动问题记录 1. 报错1 解决办法: 开启微信开发者工具服务端口 2. 报错2:调用getLocation获取位置信息时报错以下内容 {errMsg: “getLocation:fail the api need to be declared in the requiredPrivateInfos field in app.json/ext.json”} 解决办法: manifest.json文…

到广阔的边缘市场去,浪潮信息首次发布全栈边缘计算软硬件新品

出品 | CSDN 云计算 智慧时代&#xff0c;一切皆计算&#xff0c;早已不再是一句口号。据国际研究机构 IDC 数据显示&#xff0c;2023 年超过 50%的企业新增 IT 基础设施会部署在边缘&#xff0c;而 Gartner 研究显示&#xff0c;到 2025 年&#xff0c;超过 75%的数据生成和数…

【ROS入门】使用 ROS 服务(Service)机制实现同步请求与答复

文章结构 任务要求话题模型实现步骤自定义srv定义srv文件编辑配置文件编译 自定义srv调用vscode配置编写服务端实现编写客户端实现 执行启动roscore编译启动客户端和服务端编译启动roscore启动节点 任务要求 编写代码实现 ROS 中的服务请求与答复: 创建服务端&#xff0c;注册…

vue中使用富文本编辑器,@tinymce/tinymce-vue

富文本就是在后台管理系统中常见的录入带格式的内容&#xff0c;如&#xff1a;表格&#xff0c;字体加粗&#xff0c;斜体&#xff0c;文字颜色等等&#xff0c;就像一个word一样。类似于这样的效果&#xff1a; 我们使用通用在线编辑器tinymce。支持vue和react。 1. 安装 np…

opencv形态学-腐蚀

opencv形态学-腐蚀 腐蚀就是取每一个位置结构元领域内最小值作为该位置的输出灰度值&#xff1b; 结构元有很多&#xff0c;一般采用矩形&#xff0c;圆 解析 下图左测是原始图片的灰阶&#xff0c;右边是经过3X3矩形腐蚀后的结果&#xff0c;我们拿19,44,99进行分析&#…

Flink CDC MySQL同步MySQL错误记录

1、启动 Flink SQL [appuserwhtpjfscpt01 flink-1.17.1]$ bin/sql-client.sh2、新建源表 问题1&#xff1a;Encountered “(” 处理方法&#xff1a;去掉int(11)&#xff0c;改为int Flink SQL> CREATE TABLE t_user ( > uid int(11) NOT NULL AUTO_INCREMENT COMME…

关于DDR协议的一些操作的理解4

address 1.DDR中的地址&#xff0c;下表中的*4/ *8/ *16表示的是颗粒位宽。不同位宽的颗粒的行列地址的分步是不一样的。图中的page size表示的就是一行所存储的内容&#xff0c;以64MB*16格式为例&#xff0c;一行一共有10列&#xff0c;每一列存储16bit&#xff0c;也就是2B…

每日一题 146. LRU 缓存

难度&#xff1a;中等 由于周日没做&#xff0c;今天又是困难题&#xff0c;所以假装今天是周日 思路&#xff1a; 在字典结构的基础之上完成三个要求显然题目要求构建一个有序字典&#xff08;当然不使用OrderedDict&#xff09;&#xff0c;由于 key 是唯一的&#xff0c;…

TLS/SSL(六) 非对称密码应用 PKI 证书体系

一 PKI 证书体系 概念&#xff1a; PKI、CA、数字证书、证书链、数字签名之前讲解的公钥不同于https站点所获取的证书,公钥只是数字证书的一部分信息说明&#xff1a; 以下内容仅作为个人笔记 华为云证书管理服务 CCM ① 基础 PKI目前有一系列标准规范定义,主要包括: ② …

lv5 嵌入式开发-6 线程的取消和互斥

目录 1 线程通信 – 互斥 2 互斥锁初始化 – pthread_mutex_init 3 互斥锁销毁 pthread_mutex_destroy 4 申请锁 – pthread_mutex_lock 5 释放锁 – pthread_mutex_unlock 6 读写锁 7 死锁的避免 8 条件变量&#xff08;信号量&#xff09; 9 线程池概念和实现 9.1 …