【go系列2】 关于go中与java C++中应该注意的语法糖以及不同点

C语言-布尔类型 除了进行数值计算、文字信息处理,电脑也能完成逻辑判断之类任务,逻辑型也称为布尔型(bool),关系运算>、>=、!=等,它们的运算结果是bool型的,只有1(真)、0(假)。C语言标准(C89)没有为布尔值单独设置一个类型,所以在判断真假时,使用整数 0 表示假,所有非0表示真。int10拓展:其实也可以使用来替换,不过他们之间还是有差别的:1.与#define不同,typedef创建的符号名只受限于类型,不能用于值。2.typedef由编译器解释,不是预处理器。3.对指针操作不同。若。 阅读详情

背景

最近在用golang写k8s operator(其中涉及到informer controler )用于内部调度平台用,刚好借此机会能够与java版本的 informer controller进行对比,由于之前对golang没怎么接触过,遇到了和java c++不同的语法糖,现在列举一下:

具体不同

glang中package

每个 Go 文件都属于且仅属于一个包,必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main,package main 表示一个可独立执行的程序,
每个 Go 应用程序都包含一个名为 main 的包。package main 包下可以有多个文件,但所有文件中只能有一个 main () 方法,main () 方法代表程序入口

golang中struct

golang中没有class的概念,但是有struct,而且可以给struct增加方法,如下:

type Member struct {
    Id     int    `json:"id"`
}
//绑定到Member结构的方法,但是这种不会改变member的值,因为结构体是值传递,当我们调用setID时,方法接收器接收到是只是结构体变量的一个副本,通过副本对值进行修复,并不会影响调用者,因此,我们可以将方法接收器定义为指针变量,就可达到修改结构体的目的
func (m Member)setId(id int){
    m.Id = id
}
m := Member{}
m.setId(1)
fmt.Println(m.Id)//输出为空
//绑定到Member结构的方法,会改变member的值 
func (m *Member)setId(id int){
    m.Id = id
}
m := Member{}
m.setId(1)
fmt.Println(m.Id)//输出为1

关于方法的接受者和接口如何被调用,参考如下:

  • 不管方法的接收者是值还是指针,对象的值和指针均可以调用该方法型,那么方法的接受者可以是值类型也可以是指针类型
  • 当方法的接收者是值时,不管是值调用还是指针调用,方法内部都是对原对象的副本进行操作,不会影响原对象型,那么方法的接受者必须也是值类型该方法才可以被调用
  • 当方法的接收者是指针时,不管是值调用还是指针调用,方法内部都是通过指针对原对象进行操作,会影响原对象

注意:struct的属性可以没有名字而只有类型,使用时类型即为属性名。(因此,一个struct中同一个类型的匿名属性只能有一个)

定义struct的tags

在定义strut的结构体时,可以添加tag,tag可以在运行时用到,以及形成json或者xml时用到如下:


type NetworkList struct {
	Project  `json:",inline"`
	f2 int    `json:"id,-"`
    f3 string `json:"f3,omitempty"`
	f4 string `json:"f4"`
}

type Project struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

其中,

名词解释
json:",inline"表示内嵌类型的key和外层struct的key是平行关系,如NetworkList里的key和Project key在形成json的时候是平行关系,不是内嵌关系,也就是在同一级
json:“id,-”-(横杠) 表示私有字段,形成json的时候不包括该key
json:"f3,omitemptyomitempty表示该字段为空,则生成json时,不包括该key
json:“f4”表示生成json时,key为f4

golang的类型转换

c++ java 中有隐式类型转换,golang没有,golang中有强制类型转换和类型断言

  • 强制类型转换
package main

import "fmt"

func main() {
    var a float32 = 5.6
    var b int = 10
    fmt.Println (a * float32(b))
}
  • 类型断言
package main

import "fmt"

func main() {
    var a interface{} =10
    t,ok:= a.(int)
    if ok{
        fmt.Println("int",t)
    }
    t2,ok:= a.(float32)
    if ok{
        fmt.Println("float32",t2)
    }
}

golang中的interface{}

interface{}是空接口没有任何方法,且所有类型都实现了空接口,相当于java中的object,interface类型默认是一个指针

golang中的go关键字

go 关键字用来创建 goroutine (协程),是实现并发的关键

//go 关键字放在方法调用前新建一个 goroutine 并让他执行方法体
go GetThingDone(param1, param2);

//上例的变种,新建一个匿名方法并执行
go func(param1, param2) {
}(val1, val2)

//直接新建一个 goroutine 并在 goroutine 中执行代码块
go {
    //do someting...
}

golang中的defer关键字

  • defer 的执行方式类似其他语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行
  • 即使函数发生严重错误也会执行,相当于finally
  • 常用于资源清理、文件关闭、解锁以及记录时间等操作
func main() {
  fmt.Println("a")
  
  defer fmt.Println("b")
  defer fmt.Println("c")
}
//打印
//a
//c
//b

golang中的init 函数

golang的init函数在该文件被被引用时才执行(是import时,不是调用包函数时)

package lib
import "fmt"
func init() {
    fmt.Println("lib empty init ")
}
----
package main

import (
    "Test/lib"
    "fmt"
)

func main() {
    fmt.Println("wint")
}
// 输出
//lib empty init  
//wint 

匿名函数

该用法和java C++中差不多

func() {
    //func body
}()     //花括号后加()表示函数调用,此处声明时为指定参数列表,
        //故调用执行时也不需要传参
Go语言 -- 接口和指针语法糖 “我不想吹go怎么先进高级,相反就目前为止我觉得它有点莫名其妙” Note:没使用过c语言指针的建议直接找教程看,否则可能越看越糊涂。 指针和语法糖 go语言采用了C语言中指针的概念,简单来说指针就是变量的地址,在C语言中通过[*ptr.]或者[ptr->] 的方式来使用,但是在Go语言中把这两种方式都简化成[ptr.]了,与普通变量一样,看过一篇文章说这是go提供的一个语法糖,示例: fu... 阅读详情

相关推荐

同时学习PHP Java Python Go四种语言。

我是一名四十多岁的普通人,随着生活压力的不断加大,我意识到可以把我自己再多学点东西,翻来覆去,最后决定还是学习编程语言。但是现在编程语言有100都中,曾一度陷入了迷茫之中。所以我......于是我问了高手,给出的答复是这样的。PHP、Java、Python、Go这四种编程语言可以同时学习,但需要科学的学习策略和合理的规划。

Program Han 1267

C语言之布尔类型

文章目录布尔类型:boolean1. 基本介绍 布尔类型:boolean 1. 基本介绍 C 语言标准(C89)没有定义布尔类型,所以 C 语言判断真假时以 0 为假,非 0 为真 [案例] 但这种做法不直观,所以我们可以借助 C 语言的宏定义 。 C 语言标准(C99)提供了_Bool 型,_Bool 仍是整数类型,但与一般整型不同的是,_Bool 变量只能赋值为 0 或 1, 非 0 的值都会被存储为 1,C99 还提供了一个头文件 <stdbool.h> 定义了 bool 代表_Bool

兮动人 2万+

ENVI中Landsat8大气校正法实现地表温度精准反演

本文详细介绍了在ENVI软件中,利用大气校正法对Landsat8热红外数据进行地表温度反演的完整流程。该方法通过辐射定标、大气参数获取、发射率估算及温度转换四个核心步骤,精准剔除大气干扰,还原地表真实温度,是城市热岛效应监测、农业旱情分析等应用的关键技术。

weixin_29292535的博客 150

C基础-布尔类型 bool

如果调用布尔类型,需要调用"stdbool.h"头文件。布尔类型 bool (逻辑型)假 == false == 0。真 == true == 1。

qq_742861868的博客 2202

AB相增量式编码器以及STM32定时器编码器模式测速/测距离(HAL库)

编码器(Encoder)是一种用于测量旋转运动或位置的设备。编码器通常与定时器模块一起使用,以便在微控制器中获取和计算旋转的脉冲数量,从而确定物体的运动方向和距离。编码器在许多应用中都很有用,例如机器人运动控制、电机位置反馈和位置传感。STM32微控制器提供了多种类型的编码器支持,其中一种常见的编码器类型是增量编码器。增量编码器基于两个脉冲信号通道,通常称为A相和B相。当旋转发生时,这两个信号通道的相位关系会发生变化,从而可以计算出旋转方向和旋转的步数。

嵌入式软件工程师的博客 1万+

CMU动作捕捉数据集实战:从AMC文件到Python可视化的完整流程

本文提供了CMU动作捕捉数据集的完整实战指南,详细解析了AMC文件格式,并对比了MATLAB转换、Python原生解析及转换为BVH格式三种数据解析策略。重点介绍了如何构建Python数据处理与可视化管道,包括将数据转换为Pandas DataFrame、绘制时间序列与相关性热力图,以及实现3D骨架动画,帮助开发者高效利用这一经典动作捕获数据集进行运动分析与模型训练。

android的专栏 716

【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean

在我们日常生活中,我们经常面临需要做决策的情境,例如“是”或“否”,“正确”或“错误”。在C++中,这种二元选择被抽象为布尔(Boolean)类型。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 5539

LTspice进阶技巧-031.一键加密仿真模型:LTspice Encrypt Tool实战指南

本文详细介绍了LTspice Encrypt Tool的使用方法,帮助工程师一键加密LTspice仿真模型,保护知识产权。通过图形化界面简化操作流程,支持批量加密和兼容性处理,适用于电路设计中的模型保护需求。

weixin_28304023的博客 202

在 C 中使用布尔值

C 没有任何内置的布尔类型。在 C 中使用它们的最佳方式是什么?

HuntsBot的博客 1423

【TestNG自动化测试框架详解】

TestNG是一款设计测试用例执行流程的测试框架。

weixin_43936332的博客 1539

ROS2 DDS中间件(图文并茂+超详细)

DDS 的目标场景在端上,致力于使端上的应用可以更容易的进行通信,由于它的完全分布式架构,可以方便的将端上的应用拆分为多进程架构,从而提高端的容错能力。从产品定位角度来讲,它和 Chromium 中的 mojo 都是端上的通信中间件,只不过 mojo 不强调分布式,内部集成了更多的特定于端上的机制,比如句柄的传输,消息的缓存等。但由于 mojo 生于 Chromium,目前官方并没有把它独立出来,所以用起来比较不方便。而 DDS 或许可以在简单的场景下作为 mojo 的替代品。

weixin_39939185的博客 5282

Golang,Java大比拼之转go初体验——va学弟转go第一天

其实go语言的独特之处远不止于此,像go独特的结构体方法,for循环方式,切片和map等都很有go语言特色,这里仅挑出了几个本人学习过程中觉得有意思的地方结合我自己的思考拿来分享,欢迎大家留言补充,一起交流go语言学习,也欢迎大家为文章纠错~当初java阶段,并没有类似的关键字,只能用try-catch模拟defer的部分功能,今天学了defer之后,看到一个很有意思的现象(以下例子来自秀才的GO语言基础)它是go语言中的一个关键字,主要用在函数或方法前面,作用是用于函数和方法的延迟调用,在语法上,

坚持无悔亦无休 911

【开发必备插件】iframe嵌套报“拒绝连接请求”的本地解决方法

关键词:iframe 拒绝连接、X-Frame-Options、Chrome 插件、前端调试、Allow X-Frame-Options前几天我在本地项目里调试一个第三方网站的嵌入页面时,遇到了一个非常经典的报错:xxx.com 拒绝了我们的连接请求。熟悉的老前端们一眼就知道——这是。但对于日常开发来说,我们经常需要在本地测试 iframe 嵌套外部页面(比如嵌第三方登录页、支付页、可视化报表系统等)。而线上站点配置了或DENY时,就会直接导致 iframe 加载失败。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1540

2-golang安装配置

windows10外网、内网配置

changqing100的博客 2181

网络变更:APIC 节点替换

Fabric Name,Controller ID,TEP Address Pool 等信息必须相同;如果故障设备是 APIC1 还需要重新配置管理密码。此过程可能需要 10 分钟左右,在此期间目标 APIC 可能在 Available/Unavailable 状态翻滚。APIC 获取 TEP 地址后,进入 fully-fit。通过 CLI 以及配置的密码登录目标 APIC。

m0_54931486的博客 320

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

go和java如何交互_一个java和golang(go语言)通信的例子。

go语言是一个系统级语言,好处非常多。虽然是一个静态编译型语言,但可以像动态语言一样写程序,语言本身可以提供编写应用程序所需的基本组件,而不用引入第三方的包。如果了解c++、java、python等,会对其简洁和强大有更深的认识,c++实在过于繁琐,java也没有想象的简单,python的效率和go不是一个数量级的。那么多的特性,印象最深的就是其对并发的支持,优雅而高效。一般情况下并发通过进程、线...

weixin_29605297的博客 2765

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Golang实践录:调用C++函数

本文介绍如何在 Golang 中调用 C++ 函数。

李迟的专栏 2460

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【Go语言快速上手(一)】 初识Go语言

本篇文章着重讲解了GO语言的简介以及为什么要学习GO语言,后面讲解了GO语言的一些语法特性以及GO语言的变量与数据类型是怎样定义的

杭电码农-NEO的博客 3374

JAVA泛型特例化_Go Internals: Go 反射 vs Java 泛型 vs cpp 模板

go反射 vs java范型 vs cpp模板0 简述Go语言并不支持范型编程(某些内置函数是支持范型的,但是用户自定义函数不支持范型),但是可以借助reflect来一定程度上弥补这部分能力的缺失,因为要靠运行时计算所以有运行时开销,性能比不上真正的范型实现。Java支持真正的“范型”,泛型编程的好处是,编译时对类型安全性进行检查,并且模板参数可以是任意类型不用做类型转换,既安全又方便。由于是在编...

weixin_33656211的博客 230

go语言替代java做Android_[剑走偏锋] Android使用Golang代替C/C++进行Native开发

想一个好点的标题事情是这样的: 一次Android项目开发过程中,要用到数据的加密解密,因为数据运算量比较大,所以需要用到native进行开发,但是又极不情愿去写C/C++那种既耽误时间又不好调试的语言,所以想方设法的寻找替代方案,正好最近在用Golang,寻思着,Golang不是号称速度接近C++又能快速开发的吗,所以琢磨着能不能用Golang来写Android的native部分,然后就有了一系...

weixin_42441929的博客 978

对c++ Java go python js 的一些总结

文章目录

kk阿彬 924

C++程序员大佬如何评价GO语言的?

我正在读由Brian Kernighan和Alan Donovan编写的《The Go Programming Language》这本书。 这是一本在语义、编排和例程选取方面都勘称完美的语言类书籍。 没有华而不实,而是精简设计,摒除长篇阔论。 这是小编准备的C ++学习资料,加群825414254,即可获取整套! 作为一个C ++和Java的狂热开发者,并不是衷情于所有语言。这似乎是对C的一个改...

463

Go 闯进 Top 10、C++ 再次被 Java 反超,TIOBE 3 月榜单发布

整理 | 苏宓出品 | 优快云(ID:优快云news)编程语言本身没有优劣之分,但是随着技术的演进,其使用率也会存在巨大差异。当下,在 TIOBE 3 月编程语言榜单发布之际,我们也将透过编程语言排名的变化看其背后的领域发展!Go闯进 Top 10本月榜单中,最让人感到惊喜的是,Go 语言以 1.24% 的占比进入了 TIOBE 榜单的Top 10,工程师们似乎都很喜欢 Go 编程语言。事...

程序人生的博客 4513

哪种编程语言好?大神为你分析 Go、Java、C、C++ 等主流编程语言

本文主要分析 C、C++98、C++11、Java 与 Go,主要论述语言的关键能力。在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以客观公正的角度来论述下各个语言的特点和不足,对语言选型作为一个客观的参考。

华为开发者社区的博客 1万+

java泛型特例_Go Internals: Go 反射 vs Java 泛型 vs cpp 模板

go反射 vs java范型 vs cpp模板0 简述Go语言并不支持范型编程(某些内置函数是支持范型的,但是用户自定义函数不支持范型),但是可以借助reflect来一定程度上弥补这部分能力的缺失,因为要靠运行时计算所以有运行时开销,性能比不上真正的范型实现。Java支持真正的“范型”,泛型编程的好处是,编译时对类型安全性进行检查,并且模板参数可以是任意类型不用做类型转换,既安全又方便。由于是在编...

weixin_39524882的博客 135

c++代码转为go_C++程序员是如何评价GO的

原标题:C++程序员是如何评价GO的 作者丨Murray翻译丨王江平此文主要对GO语言的简单语法做了详细描述,并与C、C++、Java作了比较,以下为译文。我正在读由Brian Kernighan和Alan Donovan编写的《The Go Programming Language》这本书。 这是一本在语义、编排和例程选取方面都勘称完美的语言类书籍。 没有华而不实,而是精简设计,摒除长篇阔论。作...

weixin_39569543的博客 236
上一篇: 浅淡 Apache Kylin 与 ClickHouse 的对比
下一篇: Data Lakehouse (湖仓一体) 到底是什么
鸿乃江边鸟
博客等级 码龄6年 3746粉丝 235原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值