Golang基础-9

9、Go语言:从基础特性到效率优化 本文介绍了Go语言的基础特性,包括结构体方法、接口和泛型的使用,探讨了Go语言在效率优化方面的优势与挑战,并结合实际案例分析了性能优化的决策流程。文章还提供了使用Go语言进行高效编程的建议,强调了代码质量、基准测试和持续优化的重要性。 阅读详情

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中自定义类型、结构体定义、结构体声明、结构体初始化、字段访问与修改、匿名结构体、结构体嵌套、初始化函数定义等相关知识。

基础

结构体
  • 相对于其它的数据类型有唯一的类型,Go语言中提供结构体类型,结构体是由一个或多个任意类型的值聚合成的实体,每个值都是结构体的成员。
自定义类型
  • Go语言中使用 type 定义一种新的类型,也就是类型别名,由于Go语言中对数据类型检查比较严,认为是新类型,两个类型不能自动隐式转换,需要强制转换。
package main

import "fmt"

type MyInt int   // 将int重新自定义为新类型(起别名)

func main() {
	var a int = 10
	var b MyInt = 20
	fmt.Printf("a type: %T, value %v\n", a, a)
	fmt.Printf("b type: %T, value %v\n", b, b)

	// invalid operation: a == b (mismatched types int and MyInt)
	// fmt.Println("a == b: ", a == b)

	// 强制转换
	fmt.Println("a == b: ", a == int(b))
}

输出结果
a type: int, value 10
b type: main.MyInt, value 20
a == b: false

结构体定义
  • 结构体属于自定义数据类型、使用 struct 关键字声明,格式如下:

type 类型名 struct {
字段1 字段1类型
字段2 字段2类型
…
}

结构体声明
  • 将非指针变量声明为已经定义的结构体类型,默认初始化为哥字段对应的初始值。
  • 也可以使用指针直接声明结构体指针变量,此指针变量被初始化为 nil。
package main

import "fmt"

type Computer struct {
	id     int
	user   string
	update bool
}

func main() {
	var a Computer  // 声明结构体实例
	fmt.Printf("a type: %T, value: %v\n", a, a)
}

输出结果
a type: main.Computer, value: {0 false}

结构体初始化
  • 结构体创建的变量称为对应结构体的实例或者对象。Go语言中结构体有多种初始化方式,以下将详细说明。
  • 使用各类型默认值初始化。
package main

import "fmt"

type Computer struct {
	id     int      // 默认为0
	user   string   // 默认为空
	update bool     // 默认为false
}

func main() {
	var a Computer = Computer{}
	fmt.Printf("a type: %T, value: %v\n", a, a)
}

输出结果
a type: main.Computer, value: {0 false}

  • 使用字面量初始化。
package main

import "fmt"

type Computer struct {
	id     int
	user   string
	update bool
}

func main() {
	var a Computer = Computer{ // 所有字段初始化
		1001,
		"Admin",
		true, // 注意最后的类型末尾逗号不能省略
	}
	fmt.Printf("a type: %T, value: %v\n", a, a)

	// 初始化指定字段,未指定的字段使用各字段类型默认初始化值
	var b Computer = Computer{id: 1002, update: true}
	fmt.Printf("b type: %T, value: %v\n", b, b)

	// 分别初始化结构体字段值
	var c Computer
	c.id = 1003
	c.user = "root"
	fmt.Printf("c type: %T, value: %v\n", c, c)

	// 自动推导类型并初始化
	d := Computer{ // 必须所有字段初始化
		1004,
		"pin",
		true, // 注意最后的类型末尾逗号不能省略
	}
	fmt.Printf("d type: %T, value: %v\n", d, d)
}

输出结果
a type: main.Computer, value: {1001 Admin true}
b type: main.Computer, value: {1002 true}
c type: main.Computer, value: {1003 root false}
d type: main.Computer, value: {1004 pin true}

  • 初始化结构体指针。
package main

import "fmt"

type Computer struct {
	id     int
	user   string
	update bool
}

func main() {
	// 声明结构体指针,未初始化,默认指向nil
	var a *Computer
	fmt.Printf("a type: %T, value: %v\n", a, a)

	// 使用 new 实例化结构体指针,默认初始化
	var b *Computer = new(Computer)
	fmt.Printf("b type: %T, value: %v\n", b, b)
	b.id = 1005 
	b.user = "pwd"
	fmt.Printf("init b type: %T, value: %v\n", b, b)

	// 取地址实例化
	c := &Computer{
		1006,
		"ccc",
		true,
	}
	fmt.Printf("c type: %T, value: %v\n", c, c)
}

输出结果
a type: *main.Computer, value:
b type: *main.Computer, value: &{0 false}
init b type: *main.Computer, value: &{1005 pwd false}
c type: *main.Computer, value: &{1006 ccc true}

字段访问与修改
package main

import "fmt"

type Computer struct {
	id     int
	user   string
	update bool
}

func main() {
	// 声明并初始化普通变量
	var v Computer = Computer{id: 1007, update: true}
	// 访问结构体字段
	fmt.Println("read v: id = ", v.id, ", user = ", v.user, ", update = ", v.update)
	// 修改结构体字段
	v.id = 1008
	fmt.Println("modify v: id = ", v.id, ", user = ", v.user, ", update = ", v.update)

	// 使用取地址实例化结构体指针
	c := &Computer{
		1009,
		"ccc",
		true,
	}
	// 访问结构体字段
	fmt.Println("read c: id = ", c.id, ", user = ", c.user, ", update = ", c.update)

	// 修改结构体字段
	// 对于结构体指针,修改字段时这两种写法均可
	c.id = 1010 // 会自动转换为 (*c).id = 1010
	(*c).user = "pwd"
	fmt.Println("modify c: id = ", c.id, ", user = ", c.user, ", update = ", c.update)
}

输出结果
read v: id = 1007 , user = , update = true
modify v: id = 1008 , user = , update = true
read c: id = 1009 , user = ccc , update = true
modify c: id = 1010 , user = pwd , update = true

匿名结构体
  • 在使用时直接使用 struct 关键字定于并初始化结构体变量或结构体指针变量,简单理解就是结构体没有指定名称,所以称之为匿名结构体。
package main

import (
	"fmt"
	"reflect"
)

func main() {
	// 匿名结构体变量
	addr := struct {
		ip   string
		port int
	}{"127.0.0.1", 9999}

	fmt.Println("net addr: ", addr, ", type: ", reflect.TypeOf(addr))

	// 匿名结构体指针变量
	addr2 := &struct {
		ip   string
		port int
	}{"127.0.0.1", 8080}
	fmt.Println("net addr2: ", addr2, ", type: ", reflect.TypeOf(addr2))

	// 匿名结构体数组
	addr3 := [...]struct {
		ip   string
		port int
	}{{"127.0.0.1", 1111}, {"127.0.0.1", 2222}, {"127.0.0.1", 3333}}
	fmt.Println("net addr3: ", addr3, ", type: ", reflect.TypeOf(addr3))

	// 匿名结构体切片
	addr4 := []struct {
		ip   string
		port int
	}{{"127.0.0.1", 4444}, {"127.0.0.1", 5555}}
	fmt.Println("net addr4: ", addr4, ", type: ", reflect.TypeOf(addr4))
}

输出结果
net addr: {127.0.0.1 9999} , type: struct { ip string; port int }
net addr2: &{127.0.0.1 8080} , type: *struct { ip string; port int }
net addr3: [{127.0.0.1 1111} {127.0.0.1 2222} {127.0.0.1 3333}] , type: [3]struct { ip string; port int }
net addr4: [{127.0.0.1 4444} {127.0.0.1 5555}] , type: []struct { ip string; port int }

结构体嵌套
  • 结构体也可以嵌套,这对于抽象出的公共数据多次复用非常易用。
  • 嵌套分为命名嵌套和匿名嵌套。不能嵌套两个相同名称的结构体。
  • 在不同的结构体中有相同名称的字段时,不能使用匿名嵌套。
package main

import "fmt"

type Base struct {
	name string
	id   int
}

// 定义结构体命名嵌套
type Cpu struct {
	cpuType int
	base    Base
}

// 定义结构体匿名嵌套
type Memory struct {
	mem int
	Base
}

// 定义结构体命名嵌套指针
type Net struct {
	chose int
	base  *Base
}

// 定义结构体匿名嵌套指针
type View struct {
	color int
	*Base
}

func PointerStructVar() {
	// 命名嵌套结构体指针声明并初始化所有变量
	a := Net{1, &Base{"NNN", 10000}}
	fmt.Println("a: ", a)
	fmt.Printf("a.chose=%v, a.name=%v, a.id=%v\n", a.chose, a.base.name, a.base.id)
	// 命名嵌套结构体指针指定字段初始化
	b := Net{chose: 2, base: &Base{"NNNNNN", 20000}}
	fmt.Println("b: ", b)
	fmt.Printf("b.chose=%v, b.name=%v, b.id=%v\n", b.chose, b.base.name, b.base.id)

	// 命名嵌套结构体指针修改字段
	a.base.id = 10001
	(*a.base).name = "NNM"
	fmt.Println("modify a: ", a)
	fmt.Printf("a.chose=%v, a.name=%v, a.id=%v\n", a.chose, a.base.name, a.base.id)

	// 匿名嵌套结构体指针声明并初始化所有变量
	aa := View{100, &Base{"XXX", 10000}}
	fmt.Println("aa: ", aa)
	fmt.Printf("aa.color=%v, aa.name=%v, aa.id=%v\n", aa.color, aa.name, aa.id)
	// 匿名嵌套结构体指针指定字段初始化
	bb := View{color: 200, Base: &Base{name: "XXXXXX", id: 20000}}
	fmt.Println("bb: ", bb)
	fmt.Printf("bb.color=%v, bb.name=%v, bb.id=%v\n", bb.color, bb.name, bb.id)

	// 匿名嵌套结构体指针修改字段
	aa.id = 10001
	fmt.Println("modify aa: ", aa)
	fmt.Printf("aa.color=%v, aa.name=%v, aa.id=%v\n", aa.color, aa.name, aa.id)

}

func NormalStructVar() {
	// 命名嵌套结构体声明并初始化所有变量
	a := Cpu{1, Base{"intel", 10000}}
	fmt.Println("a: ", a)
	// 命名嵌套结构体指定字段初始化
	b := Cpu{cpuType: 2, base: Base{"AMD", 20000}}
	fmt.Println("b: ", b)

	// 命名嵌套结构体修改字段
	a.base.id = 10001
	fmt.Println("modify a: ", a)

	// 匿名嵌套结构体声明并初始化所有变量
	aa := Memory{100, Base{"DDR333", 10000}}
	fmt.Println("aa: ", aa)
	// 匿名嵌套结构体指定字段初始化
	bb := Memory{mem: 200, Base: Base{name: "DDR400", id: 20000}}
	fmt.Println("bb: ", bb)
	// 匿名嵌套结构体修改字段
	aa.id = 10001
	fmt.Println("modify aa: ", aa)
}

func main() {
	// 结构体变量操作
	NormalStructVar()
	fmt.Println("==================================")
	// 结构体指针变量操作
	PointerStructVar()
}

输出结果
a: {1 {intel 10000}}
b: {2 {AMD 20000}}
modify a: {1 {intel 10001}}
aa: {100 {DDR333 10000}}
bb: {200 {DDR400 20000}}
modify aa: {100 {DDR333 10001}}
==================================
a: {1 0xc000008048}
a.chose=1, a.name=NNN, a.id=10000
b: {2 0xc000008060}
b.chose=2, b.name=NNNNNN, b.id=20000
modify a: {1 0xc000008048}
a.chose=1, a.name=NNM, a.id=10001
aa: {100 0xc000008078}
aa.color=100, aa.name=XXX, aa.id=10000
bb: {200 0xc000008090}
bb.color=200, bb.name=XXXXXX, bb.id=20000
modify aa: {100 0xc000008078}
aa.color=100, aa.name=XXX, aa.id=10001

初始化函数定义
  • 在Go语言中,通常定义一个或多个New函数用于创建结构体实例。
package main

import "fmt"

type Base struct {
	name string
	id   int
}

func NewBase(name string, id int) *Base {
	return &Base{name, id}
}

func NewName(nm string) *Base {
	return &Base{name: nm}
}

func NewId(num int) *Base {
	return &Base{id: num}
}

func main() {
	a := NewBase("QWER", 100)
	fmt.Println("a: ", a)
}

输出结果
a: &{QWER 100}

起始

9、Go基础数据类型详解 本博客详细介绍了Go语言中的基础数据类型及相关操作,包括指针的使用、切片与数组的转换、unsafe包的功能、随机数和随机字符串的生成方法,以及统计应用中的数据归一化处理。通过代码示例和流程图,全面解析了各个功能的实现原理和应用场景,帮助开发者提升代码效率与安全性。 阅读详情

相关推荐

研一脑电小白日记 之 EEGLAB预处理实战指南

本文为脑电研究新手提供了一份详尽的EEGLAB预处理实战指南。从MATLAB与EEGLAB环境搭建、使用NeuracleEEGFileReader插件导入BDF格式数据开始,逐步讲解了电极定位、滤波、降采样、ICA去伪迹等核心步骤,旨在帮助初学者高效完成脑电数据预处理,为后续分析奠定坚实基础。

weixin_29230649的博客 557

Go结构体初始化的几种方式

new初始化结构体指针 可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址。 格式如下: package main import "fmt" type stu struct { name,address string } func main() { // 结构体指针1 var stu1 = new(stu) stu1.name = "张三" (*stu1).address = "北京" fmt.Println(stu1) } stu1.name = "张三"其实在底层是(*

赵凯月的博客 3275

树莓派5使用CSI摄像头 | 树莓派5接上CSI摄像头后命令行操作显示检测无设备

此系列用于记录树莓派5的一些操作,这篇文章讲述树莓派5如何使用CSI摄像头。

beyourself_he的博客 8796

Go语言结构体如何进行初始化

目录Go语言结构体Go语言的类Go语言结构体定义Go语言实例化结构体——为结构体分配内存并初始化基本的实例化形式创建指针类型的结构体取结构体的地址实例化Go语言初始化结构体的成员变量使用“键值对”初始化结构体使用多个值的列表初始化结构体初始化匿名结构体 Go语言结构体 Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型。Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 Go 语言中的类型可以被实例化,使用new或&构造的类型实例的类型是类型的指针。

技术宅拯救世界 5602

基于Python的信用卡欺诈检测机器学习案例报告

当今时代,在线支付已成为一种高效便捷的支付方式,我们可以突破时间和空间的限制,输入我们的信用卡各项信息就可以完成在线支付。但随之而来的是这种支付方式也具备一定的风险性,我们无法辨别对方是否是恶意套取我们资金的非法分子。当信用卡信息数据泄露导致金钱失窃并最终失去客户忠诚度和公司声誉时,组织、消费者、银行和商家都会面临风险。2017 年,未经授权的信用卡操作达到了惊人的 1670 万受害者。此外,据美国联邦贸易委员会 (FTC) 报告,2017 年信用卡欺诈索赔数量比上一年高出 40%。

weixin_45673389的博客 6694

Python实战:用Realsense D435和睿尔曼机械臂完成手眼标定的5个关键步骤

本文详细介绍了使用Python、Realsense D435深度相机与睿尔曼机械臂进行手眼标定的完整实战流程。文章将过程拆解为环境搭建、数据采集、核心计算、结果验证和精度优化五个关键步骤,重点剖析了数据采集的黄金法则、常见错误排查以及如何将标定结果集成到视觉抓取程序中,旨在帮助开发者实现毫米级精度的视觉引导机器人系统。

weixin_29103191的博客 320

Golang 结构体、结构体的初始化、结构体作为函数参数、嵌套结构体、方法

Golang 结构体、结构体的初始化、结构体作为函数参数、嵌套结构体、方法

wgchen 781

游戏开发实战:5种AOI算法对比(九宫格 vs 灯塔 vs 十字链表)

本文深入对比了游戏开发中五种主流AOI算法(九宫格、灯塔、十字链表等)的性能与适用场景,帮助开发者根据项目规模选择最优解决方案。通过详细的技术分析和实战数据,揭示不同算法在万人同屏等极端场景下的表现差异,为MMORPG等大型多人在线游戏提供关键性能优化指南。

weixin_29268385的博客 474

Go语言中匿名嵌套结构体的初始化

匿名嵌套结构体的两个初始化方式: 方式一 结构体内嵌初始化时,将结构体内嵌的类型作为字段名像普通结构体一样进行初始化,详细实现过程请参考下面的代码 package main import "fmt" // 车轮 type Wheel struct { Size int } // 引擎 type Engine struct { Power int // 功率 Type string // 类型 } // 车 type Car struct { Wheel

赵凯月的博客 1411

Java语音革命:用代码打造永不疲倦的AI客服,让客户支持效率飙升300%!

客户支持领域常面临“薛定谔困境”,即无法预知客户来电的意图是投诉还是表扬。通过Java技术,尤其是语音识别和自然语言处理(NLP),可以有效解决这一问题。文章展示了如何利用Java代码构建“声纹量子引擎”,实现客户支持的自动化。核心技术包括录音与预处理、语音识别和语义理解。通过百度AI API和Stanford NLP,系统能够快速、准确地识别客户语音并理解其意图。数据表明,优化后的AI处理时间从15分钟缩短至18秒,语音识别准确率提升至98.5%,并发处理能力达到单实例1000+请求。这些技术显著提升了客

墨夶的博客 1035

置顶必读(1) | 《YOLOv26实战:从入门到深度优化》专栏导读与完整目录导航(持续更新中)

🏆 本文收录于 《YOLOv26实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现 YOLOv26 官方特性、核心改进、多任务支持、部署优化与行业落地,内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么用”,更讲“为什么这样设计、如何真正落地到项目中”。

**My Coding Family** 9万+

100天精通Golang(基础入门篇)——第9天:Go语言程序的循环语句

本篇博客介绍了 Go 语言程序中的循环语句,包括 for 循环、循环变体和多层 for 循环。同时讨论了跳出循环的语句,包括 break 和 continue,以及介绍了 goto 语句的使用。通过学习本篇内容,可以加深对 Go 语言循环语句的理解和应用。通过本篇博客,我们深入学习了 Go 语言中的循环语句。我们了解了 for 循环的基本语法和用法,并学习了循环的变体和多层循环的实现。同时,我们还探讨了跳出循环的语句,包括 break 和 continue,以及介绍了 goto 语句的使用。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 5万+

硬件学习手册【总目录】

欢迎大家来到《硬件学习手册》,专栏主要包括 《硬件经验手册》《电子元器件器件手册》《PCB手册》《CPU手册》《元器件选型手册》五个分册。在开始专栏的更新前,博主先列出专栏的大纲,以供大家参考。大家直接点击大纲中的蓝色标题即可轻松传送。

fydar的博客 5854

go安装1.9版本

如果有旧的go;首先卸载它,方法如果 rm -rf /usr/bin/go rm -rf /etc/alternatives/go rm -rf /usr/lib/golang 清理GOPATH;GOROOT变量 unset GOPATH unset GOROOT 然后开始正式安装,因为golang1.5以后实现了自编译,也就是用golang开发golang。因此在安装新...

闲人一小枚 1584

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Go最全WebSocket协议解析_decoding websocket frame opcode=9(1),Golang基础入门教程

算法描述为: original-octet-i 与 masking-key-octet-j 异或后,得到 transformed-octet-i。

2401_84920052的博客 553

Camera2Demo

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

9 java、go基础

php Java Go 一种计算机脚本语言, 一种解释性语言,可以直接执行 一门面向对象的计算机编程语言 一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言   支持多种编程范式(函数式和面向对象) 支持并发编程   增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interf...

学无止境,向互联网致敬! 261

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

9Go语言基础之函数

本文是李文周的博客go语言学习之路的目录提要版,方便复习查看使用,原文参见文章连接: https://www.liwenzhou.com/posts/Go/go_menu/ 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。 Go语言中支持函数、匿名函数和闭包,异常。并且函数在Go语言中属于“一等公民”。 函数总结 函数 1.函数的定义和调用 func 函...

weixin_42426385的博客 287

非零基础自学Golang 第8章 包管理 8.8 Go语言命名规范 & 8.9 小结 & 8.10 知识拓展

非零基础自学Golang 第8章 包管理 8.8 Go语言命名规范 & 8.9 小结 & 8.10 知识拓展

代码改变世界 595

Go学习笔记:基础语法9

Go语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种高级的代码复用方案。Go语言中为我们提供了很多内置包,如 fmt、os、io 等。任何源代码文件必须属于某个包,同时源码文件的第一行有效代码必须是语句,通过该语句声明自己所在的包。

weixin_47113960的博客 525

go 基础学习9 测试

go 基础学习9 更多干货 分布式实战(干货) spring cloud 实战(干货) mybatis 实战(干货) spring boot 实战(干货) React 入门实战(干货) 构建中小型互联网企业架构(干货) python 学习持续更新 ElasticSearch 笔记 kafka storm 实战 ...

架构师的成长之路的博客 558

go语言基础9——结构体★★★

目录 类型别名和自定义类型 自定义类型 类型别名 类型定义和类型别名的区别 结构体 结构体的定义 结构体实例化 基本实例化 匿名结构体 创建指针类型结构体 取结构体的地址实例化 结构体初始化 使用键值对初始化 使用值的列表初始化 结构体内存布局 空结构体 面试题 构造函数 方法和接收者 指针类型的接收者 值类型的接收者 什么时候应该使用指针类型接收者 任意类型添加方法 结构体的匿名字段 嵌套结构体 嵌套匿名字段 嵌套结构体的字段名冲突 结构体的“继

一蓑烟雨任平生 514

9. Go语言基础之数组

前言 Array(数组) 数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法: // 定义一个长度为5元素类型为int的数组a var a [5]int 9.1 数组定义 var 数组变量名 [元素数量]T 比如:var a [3]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [3]int 和[5]int 是不同的类型。 var a [2]int var b [3]int a = b //

小六 330

go基础类型9——range

package main import "fmt" func main() { str := "abc" for i := 0; i < len(str); i++ { fmt.Printf("str[%d] = %c\n", i, str[i]) } //range 默认返回两个元素 一个是元素的位置 一个是元素本身 for i, data := range str { fmt.Printf("str[%d] = %c\n", i, data) } for i :=.

www_dong的博客 426

非零基础自学Golang 第9章 结构体 9.6 结构体内嵌

非零基础自学Golang 第9章 结构体 9.6 结构体内嵌

代码改变世界 861

9.Go语言基础之指针

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。

鹿晓鹏的博客 181
上一篇: Golang基础-8
下一篇: Golang基础-10
无夜_
博客等级 码龄7年 2916粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值