GoLang之”奇怪用法“实践总结

2023-11-13

2013-11-23 wcdj

0 摘要


本文通过对A Tour of Go的实践,总结Go语言的基础用法。

 

1 Go语言”奇怪用法“有哪些?


1,go的变量声明顺序是:”先写变量名,再写类型名“,此与C/C++的语法孰优孰劣,可见下文解释:
http://blog.golang.org/gos-declaration-syntax

2,go是通过package来组织的(与python类似),只有package名为main的包可以包含main函数,一个可执行程序有且仅有一个main包,通过import关键字来导入其他非main包。

3,可见性规则。go语言中,使用大小写来决定该常量、变量、类型、接口、结构或函数是否可以被外部包含调用。根据约定,函数名首字母小写即为private,函数名首字母大写即为public。

4,go内置关键字(25个均为小写)。

5,函数不用先声明,即可使用。

6,在函数内部可以通过 := 隐士定义变量。(函数外必须显示使用var定义变量)

7,go程序使用UTF-8编码的纯Unicode文本编写。

8,使用big.Int的陷阱:
http://stackoverflow.com/questions/11270547/go-big-int-factorial-with-recursion

9,从技术层面讲,go语言的语句是以分号分隔的,但这些是由编译器自动添加的,不用手动输入,除非需要在同一行中写入多个语句。没有分号及只需少量的逗号和圆括号,使得go语言的程序更容易阅读。

10,go语言只有一个循环结构——for循环。

11,go里的自增运算符只有——“后++”

12,go语言中的slice用法类似python中数组,关于slice的详细用法可见:http://blog.golang.org/go-slices-usage-and-internals

13,函数也是一个值,使用匿名函数返回一个值。

14,函数闭包的使用,闭包是一个匿名函数值,会引用到其外部的变量。



2 代码实践


/* gerryyang
 * 2013-11-23
 */

package main

import (
    "fmt"
    "math"
    "math/big"
    "math/cmplx"
    "math/rand"
    "net/http"
    "os"
    "runtime"
    "time"
)

// Outside a function, every construct begins with a keyword (var, func, and so on) and the := construct is not available
// The var statement declares a list of variables; as in function argument lists, the type is last
var x, y, z int
var c, python, java bool

// A var declaration can include initializers, one per variable
var x1, y1, z1 int = 1, 2, 3

// If an initializer is present, the type can be omitted; the variable will take the type of the initializer
var c1, python1, java1 = true, false, "no!"

// basic types
// bool
// string
// int int8 int16 int32 int64
// uint uint8 uint16 uint32 uint64 uintptr
// byte (alias for uint8)
// rune (alias for int32, represents a Unicode code point)
// float32 float64
// complex64 complex128
var (
    ToBe    bool       = false
    MaxInt  uint64     = 1<<64 - 1
    complex complex128 = cmplx.Sqrt(-5 + 12i)
)

// Constants are declared like variables, but with the const keyword
const Pi = 3.14

// Constants can be character, string, boolean, or numeric values
const World = "世界"

// Numeric Constants
const (
    Big   = 1 << 100
    Small = Big >> 99 // 2
)

type Vertex struct {
    X int
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GoLang之”奇怪用法“实践总结 的相关文章

  • go struct{} 空结构体的特点和作用

    空结构体的特点和作用 参考代码 package main import fmt unsafe func main empStruct 空结构体的实例和作用 func empStruct 空结构体的特点 1 不占用内存 2 地址不变 var
  • Golang教程:(十六)结构体

    原文 https golangbot com structs 欢迎来到Golang系列教程的第十六篇 什么是结构体 结构体 struct 是用户自定义的类型 它代表若干字段的集合 有些时候将多个数据看做一个整体要比单独使用这些数据更有意义
  • 服务计算hw7

    任务目标 设计一个 web 小应用 展示静态文件服务 js 请求支持 模板输出 表单处理 Filter 中间件设计等方面的能力 不需要数据库支持 基本要求 支持静态文件服务 支持简单 js 访问 提交表单 并输出一个表格 对 unknown
  • Go开发命令行程序指南

    近期在Twitter上看到一个名为 Command Line Interface Guidelines 的站点 1 这个站点汇聚了帮助大家编写出更好命令行程序的哲学与指南 这份指南基于传统的Unix编程原则 2 又结合现代的情况进行了 与时
  • golang基础教程

    目录 golang基础教程 一 环境搭建 golang基础教程 二 开发规范及API golang基础教程 三 变量与数据类型概述 golang基础教程 四 基本数据类型 golang基础教程 五 基本数据类型的转换 golang基础教程
  • golang:环境变量GOPROXY和GO111MODULE设置

    我们安装完golang后 我们在windows的cmd命令下就可以直接查看和使用go命令和环境变量了 同样的在linux下可以在控制台使用 如下图所示 C Users lijie1 gt go env set GO111MODULE set
  • beego+goAdmin+mysql+docker+natapp作为微信小程序地服务器“伪部署”

    写在前面的话 1 为什么我要叫伪部署 答 因为我把它们放在服务器运行 都是开发模式 生产模式实在不会弄 所以就这样了 2 系统环境 答 腾讯云服务器 系统为 ubuntu 版本不记得 应该是比较高的 3 前提假设 答 假设你的服务器已经安装
  • 【golang】error parsing regexp: invalid or unsupported Perl syntax (正则表达式校验密码)

    要在 Go 中编写密码校验规则 确保密码不少于8位且包含数字和字母 你可以使用正则表达式和 Go 的 regexp 包来实现 以下是一个示例代码 错误示范 package main import fmt regexp func valida
  • go 进阶 gin实战相关: 五. gin_scaffold 企业脚手架

    目录 一 gin scaffold 企业级脚手架 二 gin scaffold 脚手架安装及使用演示 文件分层解释 开始使用 1 配置开启go mod 功能 2 下载 安装 gin scaffold 3 整合 golang common 4
  • Go Web编程实战(10)----模板引擎库text/template包的使用

    目录 前言 模板引擎 定义模板文件 解析模板文件 渲染模板 实战使用模板 创建 tmpl文件 创建文件用于解析与渲染模板 前言 在Go语言中 模板引擎库text template包主要用于处理任意格式的文本内容 同时还提供了html tem
  • go-zero开发入门-API网关鉴权开发示例

    本文是 go zero开发入门 API网关开发示例 一文的延伸 继续之前请先阅读此文 在项目根目录下创建子目录 middleware 在此目录下创建文件 auth go 内容如下 鉴权中间件 package middleware impor
  • “go mod tidy”之错误“not a valid zip file”

    执行 go mod tidy 时 遇到如下错误 rpc imports github com zeromicro go zero zrpc imports github com zeromicro go zero zrpc resolver
  • GoLong的学习之路,进阶,微服务之序列化协议,Protocol Buffers V3

    这章是接上一章 使用 RPC包 序列化中没有详细去讲 因为这一块需要看的和学习的地方很多 并且这一块是RPC中可以说是最重要的一块 也是性能的重要影响因子 今天这篇主要会讲其使用方式 文章目录 Protocol Buffers V3 背景以
  • GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

    本来有今天是继续接着上一章写微服务的 但是这几天有朋友说 再写Web框架的时候 遇到一个问题 就是很多的中间件 redis 微信 mysql mq 的配置信息写的太杂了 很不好管理 希望我能写一篇有管理配置文件的 所以这篇就放到今天写吧 微
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors
  • go开发--操作mysql数据库

    在 Go 中访问 MySQL 数据库并进行读写操作通常需要使用第三方的 MySQL 驱动 Go 中常用的 MySQL 驱动有 github com go sql driver mysql 和 github com go xorm xorm
  • Golang拼接字符串性能对比

    g o l a n g golang g o l an g
  • 这套Go语言开发框架组合真的非常高效

    我尝试过很多框架 从Django Flask和Laravel到NextJS和SvelteKit 到目前为止 这是我唯一可以使用的不会让我感到疯狂或者放弃项目的堆栈 框架 我喜欢所有这些框架 但我只是不太适应它们的设计方式 实际上 我是一个弱
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

    背景 为了能识别出代码中抛出错误码的地址和具体的错误码值 再根据错误码文件获取到错误码的具体值和注释 方便后续的排错 这里使用AST进行语法分析获取到代码中的目标对象 一 编译过程 在开始解析代码之前先补充了解一下编译过程 编译过程是将高级

随机推荐

  • 【翻译】BItcoin数据结构——UTXO definition-Investopedia

    原文 https www investopedia com terms u utxo asp UTXO意味着什么 UTXO代表比特币交易的未花费的输出 每个比特币交易都以用于平衡分类账的硬币开始 UTXO会不断处理 并负责开始和结束每笔交易
  • word(doc,docx)转换为HTML

    maven
  • qt中的listwidget默认选中某行

    参考博客 Qt程序怎么实现选中ListWidget中的某一行为默认选中 我不是萧海哇 的博客 CSDN博客 qlistwidget选中某行 QListWidgetItem item ListWidget gt item 1 item gt
  • CountDownLatch CyclicBarrier 原理 总结

    参考链接 http ifeve com talk concurrency countdownlatch http www importnew com 15731 html https www cnblogs com nullzx p 527
  • SiTime硅晶振解决方案—ADAS域控制器

    概述 ADAS域控制器 ADAS Domain Controller ADC 是驾驶域的核心计算中枢 是汽车走向域控化 智能化的背景下 市场规模增长最快的零部件 域控制器向上通过智能化接口获得传感器 诊断数据与状态数据 向下通过执行器接口传
  • 讲述IT人的程序人生,IT人心声,职业生涯,职场规划,程序员爱情优美文章155篇

    讲述IT人的程序人生 IT人心声 职业生涯 职场规划 程序员爱情优美文章155篇 来自 http www ithao123 com itlife 1 程序人生 程序 烟 我的人生2 程序人生 做技术 切不可沉湎于技术3 程序员 不得不习惯一
  • 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点

    转自 http www 360doc com content 13 0905 20 1944636 312482651 shtml public class XmlHelper public XmlHelper public enum Xm
  • 如何在 VS Code 中安装和使用 Amazon CodeWhisperer

    大家好 今天我将向大家介绍如何在 Visual Studio Code 简称 VS Code 中安装和使用 Amazon CodeWhisperer 这是一个强大的 AI 辅助代码生成工具 CodeWhisperer 可以帮助你自动生成你需
  • 114DNS Public DNS+ 阿里DNS 百度DNS 360 DNS派 Google DNS

    为什么80 的码农都做不了架构师 gt gt gt 114DNS 腾讯dnspod DNS 阿里DNS 百度DNS 360DNS Google DNS公 共DNS评测体验报告从ping及dig返回时间对比测试 国内DNS普遍很快 而阿里DN
  • 在react中使用redux并实现计数器案例

    React Redux 在recat中不使用redux 时遇到的问题 在react中组件通信的数据是单向的 顶层组件可以通过props属性向下层组件传递数据 而下层组件不能向上层组件传递数据 要实现下层组件修改数据 需要上层组传递修改数据的
  • Matplotlib 散点图 绘制详解

    目录 基础 点的大小 点的颜色 透明度 颜色条 多组散点 1 散点图 基础 代码 import matplotlib pyplot as plt import numpy as np 第一组散点 x np array 1 2 3 4 5 6
  • 在C++上利用onnxruntime (CUDA)和 opencv 部署模型onnx

    概述 将得到的模型转化为onnx模型 加载到c 中运行 来完成模型的部署 下载并安装onnxruntime CMakeLists txt cmake minimum required VERSION 2 8 project test 使用c
  • 一起学nRF51xx 10 -  rng

    前言 随机数产生器 RNG 的结构 随机数发生器 RNG 根据内部热产生真实的非确定性随机数噪音 RNG通过触发START任务启动 并通过触发STOP任务停止 当随机数已经生成 它会产生一个VALRDY事件 同时把随机数存入VALUE寄存器
  • 智慧城市领域大单,巨头占尽优势

    智慧城市领域 哪个公司做的比较好 一 前言 二 智慧城市中标大单 清单 三 中标厂商分析 1 华为 2 科大讯飞 3 腾讯 4 阿里 5 中国电科 6 中国电子 7 百度 8 数字广东 四 获取 智慧城市等全套最新解决方案合集 一 前言 在
  • python eclipse+pydev(An error has occurred when creating this preference page)

    Eclipse 安装pydev Help gt Install New Software gt add gt Location http pydev org updates 点击pydev左边的小三角勾选pydev for eclipse
  • Shell init Ubuntu

    echo HISTFILESIZE 99999 gt gt bashrc echo HISTSIZE 99999 gt gt bashrc echo HISTTIMEFORMAT F T gt gt bashrc echo PROMPT C
  • Thrift原理简析(JAVA)

    Apache Thrift是一个跨语言的服务框架 本质上为RPC 同时具有序列化 反序列化机制 当我们开发的service需要开放出去的时候 就会遇到跨语言调用的问题 JAVA语言开发了一个UserService用来提供获取用户信息的服务
  • CUDA编程 基础与实践 学习笔记(十)

    线程束 warp 一个GPU由多个SM组成 一个SM上可以放多个线程块 不同线程块之间并行或顺序执行 一个线程块分为多个线程束 一个线程束由32个线程 有连续的线程号 组成 从更细粒度来看 一个SM以一个线程束为单位产生 管理 调度 执行线
  • Java面向对象 - 封装、继承和多态

    第1关 什么是封装 如何使用封装 相关知识 为了完成本关任务 你需要掌握 1 什么是封装 2 封装的意义 3 实现Java封装的步骤 package case1 public class TestPersonDemo public stat
  • GoLang之”奇怪用法“实践总结

    2013 11 23 wcdj 0 摘要 本文通过对A Tour of Go的实践 总结Go语言的基础用法 1 Go语言 奇怪用法 有哪些 1 go的变量声明顺序是 先写变量名 再写类型名 此与C C 的语法孰优孰劣 可见下文解释 http